Thursday, November 8, 2007

Lessons from experience

Recent work projects have once again reinforced that which I've already known but had forgotten. Three simple rules of thumb to keep in mind when working on a project for other people. First, don't commit to implementing incomplete or vague specifications. Second, don't raise expectations higher than what's needed to meet the requirements, or what you can reliably deliver under a given set of constraints. Third, take the responsibility and the initiative to get the job done, don't expect others to do their job or yours or to volunteer help. Simply learning to keep these three principles in mind when working on any project will go a long way toward getting the job done and satisfying its requirements.

Tuesday, October 23, 2007

Automation is the Key

I've been working on programming problems at work. They are pretty much run of the mill create, retrieve, update and delete user interfaces. Unlike other interfaces that I've done in the past, these are very focused, mostly dealing with modifying data from a single table. The problem at hand, of how to allow the user to modify such data in a coherent and reasonable way, presented a solution for each individual interface that had much in common similar solutions for each of the other similar tables. This was true to such an extent that I was able to generalize more than three quarters of the interface, the remaining quarter or so followed reasonable conventions and design choices that were directly the result of the structure of data and and its constraints. This set me to thinking about automating that design and implementation process, even if such a process resulted in code that was 95% complete with only minimal manual customization. We already generate 100% of our simple data access layer artifacts. We do this thorough a generator driven by simple declarative data in XML. Since we already do it for the data access layer in a very primitive template driven way, why couldn't we use a design rules and design implementation rules engine driven "expert system" code generator to create useful and coherent user interface from simple declarative data about the data the interface presents and how that data is to be manipulated.

Since I've written a very basic expert system for plant identification in an AI course, and written it in Lisp, this gives me a practical reason for (re)-learning LISP and learning it in greater depth. I'll elaborate on my thoughts on this in later posts

Sunday, September 30, 2007

Fish for lunch

Today I made one of my favorite lunches, a mackerel fish spread on toasted bread. It's quite cheap and really simple to make. Just take a can (15 oz or so) of canned mackerel, drain it, remove the skeleton from the fish. In a bowl mix this fish with about quarter cup of mayonnaise, a couple dashes of old bay seasoning an about two chopped sprigs of green onions. The amount of mayo should vary by preference. I like mine just moist enough so that everything hangs together and no more. Same applies to the amount of spice and onions. Even though this is very simple to make, it is quite tasty. All three of my sons like it, but my wife does not. There is something about the fish smell the does not agree with her. Mackerel, sardines, and herring all fall into that class of fishes that do not appeal to her, but catfish, tilapia and salmon do. For a cheap (15 oz can of mackerel is about a $1) and easy to make (about 10 minute prep time) lunch it is quite healthy. Mackerel is one of the fishes that is high in Omega-3 fatty acids, and high in protein. It also is quite tasty, perhaps because the fish is wild and not farmed. Cant really ask for much more in a quick and cheap lunch, except maybe something that doesn't wrinkle my wife's nose, so I could share with her.

Tuesday, August 28, 2007

Lunar Eclipse

Saw the lunar eclipse this morning. What a neat sight eventhough it was nearly obscured by the trees and lampposts in the streetscape. We must have been a sight to see. I, my wife, and our sons all quickly dressed in whatever clothes were handy just after waking and walked on our street until we could glimpse the reddening moon between the trees and lightpoles on our street. No one else was out to see the eclipse. It was a neat sight to see.

Friday, August 17, 2007

Tools

Having the proper tools when working certainly makes one's job easier. Some of the most difficult tasks when developing software is debugging and load testing. On any significant application this is difficult enough when you're one of the original authors of the application. When faced with debugging or load testing someone else's application it can be excruciatingly difficult. Part of difficulty is certainly visualizing the structure and the behavior of the application at the macro, micro and any level in between. Better tools for quickly and correctly understanding the structure and dependencies in any given application would be a great boon to both individuals and to teams. For example a tool that allows browsing of a software library in totality perhaps presenting the view as a sort of three-dimensional landscape. A workable implementation for Java (will have to find link later)uses a modified treemap algorithm for mapping packages and classes. That implementation displays Java classes as pseudo buildings whose height and width depends on the number of member variables and methods in a city scape of nested elevated platforms which depict the package hierarchy. This gives a quick visual cue about the classes' complexity and to the overall package structure. It does not display inheritance or interface implementation. A good visual metaphor for inheritance and its complexities may be at odds with the cityscape representation for package structure. Will have to revisit this at a later time.

Tuesday, July 24, 2007

Practice and Persistance

Sometimes it's only practice and persistence that makes the difference between the hypothetically possible and the actual. Thomas Edison had once remarked that invention is "one percent inspiration and ninety-nine percent perspiration". It is easy to talk big, and even to come up with workable ideas, but until one tries to implement those ideas, nothing really happens. Now don't get me wrong, inspiration is important, without it our efforts don't bring anything new into the world. I've had plenty of inspirations, and with my recent change in employment I've had the presence of mind to pay attention to that inspiration. Now it is a matter of seeing my inspiration through.

Sunday, July 1, 2007

A Kids' Movie

Went and saw the new Pixar movie Ratatouie with Misce, Karl and Tom. It was a fun movie to watch. The plot was about a rat following his dream to be a real chef. The story was well told for a kids movie, but it was still very enjoyable for adults. The computer generated graphics were simply astounding. The movie still looked like a cartoon, but not like the classical Disney cartoon. It looked more like an elaborately illustrated storybook. All of us enjoyed the movie, and I would recommend it for anyone who is looking for a light hearted feel good story.

Friday, June 29, 2007

Dinner and Conversation

Had a wonderful dinner with my wife to celebrate our wedding anniversary. We went to a restaurant in downtown Allentown, the Bay Leaf. She was not in a good mood, a bit withdrawn. Her mother's recent death was still on her mind. The usual daily problems also were on her mind. After she had a chance to relax a bit he mood improved and we had a good conversation. The subject stayed mostly close to home. More than any particular thing we talked about, I was really happy that she had a chance to relax and that we had some time together away from everyday worries. It helps us reconnect. I'll make it a point to do that on a more regular basis.

Sunday, June 24, 2007

A Happy Sunday

Finally completed some nagging gardening chores. Finished whittling down a stump from a tree that we had to remove when a freak windstorm twisted and broke off half of it. Eventhough the stump had been in the ground for over a year, some of the roots were still live. I wasn't able to remove all of it, instead I cut and chopped away as much of it as I could. I did manage to somehow break two of my hatchets. Both had cracked handles, so it was not too surprising. After hours of working on the stump I didn't want to spend even more time on in. If I plan on planting a tree there I'll have to dig up the roots again. Now we have a nice little flowerbed where the stump was.

Took the two younger boys to the pool for two hours. Karl went off with his friends while Tom and I played. We invented our own game with the volleyball we had with us and had a fun time. It was a mix between catch, soccer, keep away and water polo depending on whether we were in the pool or out on the grass. We played almost continuously for an hour. It really was a refreshing and fun way to spend a part of the afternoon. Tom is always so boisterous when I take Karl and him swimming.

Karl and I went to check on the local wine berries and the mulberry trees. While there, we picked a sandwich container's worth of mullberries. For both of us it was a relaxed way to spend time together and explore, talk, and pretty much enjoy each other's company. Karl is an amazing boy and I am very much proud of him.

Misce made Karl's birthday cake, and boy what a cake it was. It was a big carrot cake with cream cheese icing by Karl's request. I think in the end each slice ended up having a thousand calories. We all had a piece. Mary Anne, one of our friends, had a piece with us

Wednesday, June 20, 2007

Programming Languages

Recently I've started a personal project to learn Lisp. Why Lisp? That is certainly a good question. My experience with Lisp is limited. My only other exposure to Lisp was in an undergraduate class on Artificial Intelligence. In that class we wrote a simplistic expert system for plant identification. The class and the project were interesting, but the thing I remember the most was Lisp's unusual syntax, and the apparent ease and simplicity of writing programs in it. It was the first programming language that I worked with that had automatic memory management. Eventhough I liked Lisp, I did not pursue it further at the time.

At the time it seemed that all the programming jobs were in C or C++. Most of the programming classes that did not explicitly teach a particular programming language were taught in C or C++, much like Java is the default teaching language in many places today. I pursued C/C++, that's where the money and the jobs were. Well in my software development career so far I've seriously used C or C++ only in one project. I've used Korn shell, SQL, PL/SQL, Perl, Cold Fusion, PHP, and of course the latest and greatest kitchen sink of computing languages, Java. In a fit of dissatisfaction with a Java project at my previous employer, I half heartedly searched for criticism of Java. I didn't expect to find any real substantiative criticisms. Boy was I wrong. I came across all sort of criticism, and some of it pretty damning. The worst criticism of Java that I came across, was that it was designed specifically for the mediocre programmer, that it was limited and watered down by design. In effect it was designed to be used by dummies and that this was acknowledged in a round about way by one of the language's designers. The criticism went into a fair amount of detail to support that view. In effect this means that there is a glass ceiling on what I can do using Java. That's when I decided to look for another language to learn, a language that does not have those limits, a language that the language designers themselves use. I thought about pursuing Perl in greater depth, or learning Ruby or Python but I always came upon comparisons between those languages and Lisp. Comparisons in which those languages do not quite measure up to Lisp's power, elegance, utility and so on. With limited time to learn and master any given language, I decided to learn Lisp. I had some experience with it and had liked it. Why learn a language that comes up short? Learning Lisp may not translate directly to my current job, but it might give me more insight into programming and programming techniques in general, and there is always the part about learning something just for the pure joy of it.

Monday, June 18, 2007

Father's Day

Father's Day is supposed to be a day to celebrate fathers, fatherhood and the their role in the family. My wife and my children celebrated that, in a low key way that I prefer. My boys made a breakfast for me and I got amusing cards from them and from my wife.Since my own father is dead, I could not talk to him or tell him how much I appreciated him, but I did think about him and what he did for me and my family when we were growing up. As I thought about it I wondered what it is that I can do as a father that my own children will appreciate for the rest of their lives. There are the basics of providing shelter, food, and a sense of safety and security. That is a necessary given, they will appreciate it but it is not something necessarily special. Beyond that there is basic moral instruction, and some familial discipline. That also is necessary for development of my children as whole persons and again that is not necessarily special. Of course there is that love and support for them that encourages them to do their best, to not be afraid of failure, to dream and dream big. Without that they will not be able to think and act independently, to be fully independent persons. Since I have only sons, my perspective is perhaps somewhat different than that of a father who has daughters. I want my sons to grow into mature independent accomplished men. Perhaps doing what I can to help further that goal might just be that special thing that all of them will appreciate for the rest of their lives. I pondered that sitting alone in my chair on my backyard deck sipping wine watching the sun set on warm summer's day. That's what I did on Father's day.

Thursday, June 14, 2007

A Short and Simple Introduction

Well this is the first dispatch here At the Singing Frog. This blog will be about whatever strikes my fancy and whatever I want to record and share with others. This may include, but is not restricted to, my experiences, thoughts and reflections on life, work, food, art, music, programming, politics, parenting, philosophy, crafts, gardening and the occasional elusive singing frog. Posting may be irregular and mostly dependant on when my muse inspires me. I invite you, dear reader, to stick around and read and comment if you wish. I hope to make this a worthwhile blog for both you and me.