Monday, January 28, 2008

Thoughts on Learning

I have collected these quotes while at Maersk learning software development. Perhaps they are of little use, but many have helped me apreciate learning.

Troy asked me to think about the process which leads to successful problem solving. Certainly a difficult concept to define, but maybe summed up by the phrase I enjoy saying, “be creative, be innovative.”

Being creative and innovative is certainly easier said than done; however, the best path I’ve found to this is having a wiliness to learn, and be willing to learn from the most unexpected places.

  • Regarding Buckminster Fuller -- The first prerequisite for continued education is a receptiveness to one's environment. Calluses worn through a faulty environment dull the learning senses. We must educate ourselves to do more with less in creating a suitable environment. Vicious circle? Nonsense: Fuller tells us that no curve can overlap with itself! This is an upward spiral into which Fuller propels us. There is no alternative.

  • "To me, there are three things we all should do every day. We should do this every day of our lives. Number one is laugh. You should laugh every day. Number two is think. You should spend some time in thought. Number three is, you should have your emotions moved to tears, could be happiness or joy." Jim Valvano

  • Demonstrate an attitude that leads to competence -- be an active partner in developing a solution.

  • "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." Rich Cook

  • It's so much easier to suggest solutions when you don't know too much about the problem.
    Malcolm Forbes (1919 - 1990)

  • Technology is dominated by two types of people: those who understand what they do not manage, and those who manage what they do not understand.
    Putt's Law

  • The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.
    Nathaniel Borenstein (1957 - )

  • A man is not idle because he is absorbed in thought. There is a visible labor and there is an invisible labor. Victor Hugo (1802 - 1885)

  • A supervisor must be willing to look their employee in the eye for a successful relationship.

  • Moore's Law -- Another, sometimes misunderstood, point is that exponentially improved hardware does not necessarily imply exponentially improved software to go with it. The productivity of software developers most assuredly does not increase exponentially with the improvement in hardware, but by most measures has increased only slowly and fitfully over the decades.

  • To err is human, but to really foul things up requires a computer.
    Farmers' Almanac, 1978

  • "The only people for me are the mad ones, the ones who are mad to live, mad to talk, mad to be saved, desirous of everything at the same time, the ones who never yawn or say a commonplace thing, but burn, burn, burn, burn like fabulous roman candles exploding like spiders across the stars…" Jack Kerouac

  • One ought, every day at least, to hear a little song, read a good poem, see a fine picture, and if it were possible, to speak a few reasonable words.
    Johann Wolfgang von Goethe (1749 - 1832)

  • So you see, imagination needs moodling - long, inefficient, happy idling, dawdling and puttering. Brenda Ueland

Thursday, January 10, 2008

Quotes of the Day

Interesting quotes for the day. The first I think is very important when considering how a business deals with its employees, and how a supervisor deals with their team. Both I think are important when considering

Anger at lies lasts forever. Anger at truth can't last.
Greg Evans

You can't build a reputation on what you are going to do.
Henry Ford

Tuesday, January 8, 2008

SQL: Database Normalization

Technique for organizing relational databases to minimize duplication of data. While performing this minimizing function, the technique also prevents certain logical or structural data anomalies.

Higher degrees of normalization tend to involve the creation of more tables, and more joins when retrieving functional datasets.

Data anomaly types addressed by normalization
  • Update Anomaly - similar data is represented in multiple areas. When data is updated, it may not capture each specific source. When queried, this results in multiple records and inconsistent results.
  • Insertion Anomaly - When combined with the incorrect combination of fields, an insert statement into the table may be incorrectly refused.
  • Deletion Anomaly - Similar to insertion, when combined incorrectly on a table, the last instance of a record may be incorrectly deleted.

The normal forms of a database determine the degree of vulnerability to data inconsistencies. The higher the form, the less vulnerable the table is.

Purposeful denormalization can be used to represent by read-only applications or Business Intelligence applications. These are characterized as OLAP (Online Analytical Processing). An implementation of this is the Amazon database previously written about, allowing data set in a field, more like hash table/key value pairs.

Monday, January 7, 2008

SI Acknowledgement Notifications

Initial development has been completed for these notifications. The test service is currently only available on my desktop. This is a pilot windows service, which currently sends notices to customers (the application will send the notice first the forwarder, if no forwarder then the shipper) after receiving an initial MASTER B/L, MASTER SED, or EDI MASTER Image type from MDWS.

The solution has been added to Source Safe as SIAcknowledgementSolution. Here are the sample notifications (
Maersk and Safmarine). I went ahead and made the service so it will handle Safmarine bills, even though they haven’t asked for it.

Testing the implementation, as with most windows services is not easy, but I think we can come up with something. Basically, we need to fill the base table, then run the service from my desk.

  1. Database – the initial data is generated from the MDWSProcessImageLink stored procedure, inserting data into the SIAcknowledgementBillTable when the ‘Master B/L’ criteria is met.
    • Tables
  • SIAcknowledgementBillTable – holds initial data from MDWSProcessImageLink
  • SIAcknowledgementReportTable – holds records which a Crystal Report notification is processing from
  • SIAcknowledgementContactTable – holds the pilot group customer numbers and contact numbers
  • Stored Procedures
    • SIAcknowledgementGetBillNumber – pulls the initial set of data for the application.
    • SIAcknowledgementReportSproc – moves the appropriate data into the report tables
    • SIAcknowledgementIndex – indexes the data sent in the notification. The data is indexed into the Images, CustomerInteractions, and CustomerInteractionReasons.
  • File Storage - Files will be stored on the CDTStore drive.
  • Application
    a.Location – Assume we will install this on the SCRBCDTUSWOFCL2 server
    b. Running Time – The requirements say as real-time as possible, I’m thinking about putting the timer at 10 or 20 minutes. This may accomplish close enough to real time as necessary for the pilot group.
    c.Who to send to – Send notice first to Forwarder, if no forwarder, then shipper
    d.Maersk or Safmarine – compares line code to find company
  • Thursday, January 3, 2008

    How Much Does An MBA Cost

    Interesting article discussing the relative costs versus benefits for an MBA. They conclude that the most significant benefit for an MBA is the network of friends you develop.

    I think I would go for the self taught method.

    Import Inland Arrival Notices - Discharge/Clearance Port Logic

    The import department has requested a review of the logic necessary to send inland arrival notices. We have developed a new set of criteria which should simply the process significantly.

    The new logic follows below, and relies significantly on the comparison between the discharge and the clearance port (this is a new field in our ACMain table).
    1. If Discharge/Clearance match, then send notice when container gates in or off-rails at delivery location.
    2. If Discharge/Clearance do not match.
      • Send notice when container gates in or off-rails at clearance port
      • Send notice when container gates in or off-rails at delivery location

    Here are the objects adjusted to enable the change in logic, most of this was done to accommodate the new criteria of Discharge/Clearance match.
    1. Tables
      1. ACMain –
        • DischargeClearanceMatchGroup field added
        • Adjusted Process Steps 70, 71, 72 to hold new filters
        • Deleted Process Steps 73, 74, and 75 which are no longer necessary
      2. ACDischargeClearanceMatchGroups – new table
      3. ACDischargeClearanceMatchValues – new table
    2. Views
      1. ACShipmentDataView – added joins and field (DischargeClearanceMatch)
      2. ACProcessingView – added joins and field for new logic
    3. Stored Procedures
      1. ACShipmentDataSproc – This is the main stored procedure, which needed new variables to hold the discharge/clearance field
      2. ACLogicSproc – This stored procedure compares the activity to the ACMain logic table.