Sunday, August 28, 2005

PI and New Voyages

My phone number, minus the area code, begins at the 19,549,226 digit of PI. Find out the location of your special number.

Also, some Star Trek TOS fanatics have begun production of Star Trek: New Voyages. This is a fan fiction series of shows similar in spirit to the original television series. Like the original series, the acting is atrocious. Unlike the original series, the writing is atrocious as well. However, there is an upcoming episode written by DC Fontana, so we'll see if she fixes things up.

Code Kata

I've been investing some time in Code Kata. They seem to be an intruiging way to learn a new language and hone your skills. To that end, I am collecting a list of the most useful programming kata. Here are the ones I have so far:

Binary Search
Data Munging
Bloom Filters
Anagrams
Objectives
Checkout
Sorting
Code Comments
Trigrams
Dependencies
Word Chains
The Bowling Game
Prime Factors
Calculate the digits of PI
Eight Queens problem (N-Queens Problem)
Secret Santas
Sokoban
Countdown
Banned Words
Scrabble Stems
LCD Numbers
Animal Quiz
Paper, Rock, Scissors
1-800-THE-QUIZ
Roman Numerals
Texas Hold 'em
English Numerals
Knight's Travails
Barrel of Monkeys
Cows and Bulls (Mastermind)
Sodoku Solver
Center Strings
Format Number List
Survey Says
Four Letter Words
Histograms
Hangman
A Balancing Act
Interesting Anagrams
Repeated Substring

Virtual Reality Drawings

Very impressive, worth a moment of your time.

Virtual Reality Drawings

Friday, August 26, 2005

Site Update

On the right hand side of this page, I added links to RSS feeds that I monitor. Some are friends sites, but most are blogs with interesting opinions and insights into software development. I encourage you to check them all out!

Thursday, August 25, 2005

Pragmatists and Academics

I am an oddity, I consider myself a pragmatic academic. In the world of software development, that is a rarity. Most software developers are pragmatists. They attack a problem as soon as they encounter it. They surf web pages to find code to cut and paste, then they hack away at the code until it appears to do the right thing. They never understand the code, they only look at its results. A problem, to a pragmatist, needs a solution. The solution is correct if it produces the desired results. The wheel is recreated over and over again because time is not invested in understanding the problem and other attempts that have been made to solve it. The other side of the spectrum is the academic. The academic doesn't really care for real life problems. They abhor messy details and like to live in a fantasy land of imaginary computers and perfectly formed input. An academic loves to analyze a "real-world" problem, but only to abstract out the most interesting part and solve it in a vacuum, often rendering the solution useless for the general case. Neither is a panacea, but both are valuable when used correctly.

I feel I offer a unique value to a company because I'm a hybrid. I begin by attempting to understand the problem. I want to create the academic model. I want to look at each part of the problem in an abstract manner. I want to create precise nomenclature and definitions. I want to avoid the nasty details and solve the problem in a pristine environment first. However, I'm also a pragmatist. I realize that the real world needs real solutions. I realize that good solutions require dealing with unseemly details, but I also realize that coding a good solution is more than hacking some internet code until it appears to work. As I've discussed before, software development is a craft, and we must take our craft seriously or no one else will. By understanding the craft and attempting to provide deeper insight into problems, I hope that I am showing that the craft can be done right, and helping to pave a road that will make other's travel less difficult.

A Tale of Two Recruiters

Last week I had two recruiters contact me, let's call them Jack and Jill. They were both very nice and professional. When I let them know I wasn't on the market right now, they each had a very different response. Jack responded like I wish telemarketer's would. He left me alone. Jill responded like I think recruiters should, she asked for more information so that she could perhaps help me in the future. I like to make contacts and network, so I graciously answered Jill's questions, but more than that, I felt like Jill was honestly interested in helping me, not just herself. Guess who I'll go to first if I ever need a job? That's right, Jill. By showing interest, she has gathered my support for a longer term relationship. I think that is true for any endeavor, listen, ask questions, take notes. You never know when you might need a bridge built.

Monday, August 22, 2005

BugBash

BugBash is a great comic strip about life in the trenches, especially for testers. Check it out!

Sunday, August 21, 2005

New blogs

I have decided to separate out my content into multiple blogs. Therefore I have created Thoughts of KC to hold my football related blogs, and Thoughts of He to hold my religious and personal ramblings. This blog will continue to hold software development and miscelaneous topics. See you there!

NFL Preseason Week 2

Ok, after this weekend's games, here are my updated predictions. After the 3rd preseason game, I'll give win/loss record as well.

AFC East: New England, NY Jets, Buffalo, Miami
AFC North: Pittsburg, Cincinatti, Baltimore, Cleveland
AFC South: Jacksonville, Indianapolis, Houston, Tennessee
AFC West: *Will be updated after San Diego Game*

NFC East: Philadelphia, NY Giants, Dallas, Washington
NFC North: Minnesota, Detroit, Green Bay, Chicago
NFC South: Atlanta, Carolina, New Orleans, Tampa Bay
NFC West: *Will be updated after St Louis Game*

Windows HX

I was going to do this blog in podcast format for Gretchen's contest, but I couldn't find a microphone. So, I thought I'd just post it on my blog :-)

In this blog, I'd like to discuss a long term strategy for Windows that would help it to overtake Linux in the IT sector.

I believe that Linux's newfound popularity in the IT workplace stems from a couple of factors. In this brief, we're going to explore one that I think is easily solvable. I believe that great hackers begin cutting their teeth on linux. It is a free system that gives them quite a bit of flexibility and power. Most hackers don't have a lot of money to buy development tools and operating systems, so having a large amount of free software to choose from really gives them a head start. Obviously, hackers don't make IT purchasing decisions, so why should this affect Window's strategy? Because hackers grow, they join companies, they start making recommendations, and their ideas and background eventually affects the direction of IT. Furthermore, companies that want to attract great hackers have to use the tools that great hackers want to use.

Secondly, Universities can use and explore Linux's source code. This gives students a familiarity with Linux so that companies that are looking to hire IT workers can find more college graduates that are experienced in Linux programming than windows. This can affect an IT department's decision to go to Windows or Linux; obviously if they can find more cheap Linux talent than Windows then they will lean that direction.

Finally, being open source, many hackers feel like they might be able to contribute Linux and that gives them a sense of importance. Having a commit to Mozilla or perl or having a java program on source forge is a buzz to most programmers. Linux, is like the Mecca of open source projects, so naturally programmers will flock to it like moths to the flame.

I think Microsoft can address these deficiencies with a small investment; something I would call Windows HX (Windows for Hackers). Windows HX would be an open source version of Windows. It wouldn't need to have all the features of Windows XP; it would be targeted for the Hacker population. It would need to have great command line support (think Monad) and excellent developer tools would put it far above Linux. It would also need to come with free "web server" tools (whether or not you want to give away a scaled down version of Microsoft's or use Apache isn't that important). Windows HX should be run as an open source project. I would not base it on the current Window's source code, but instead I would get a small core of functionality working, then release it into the open source community with a Microsoft Employee as the "pumpking". This would allow Universities to have an alternative to Linux when studying operating systems, it would also give open source programmers something to strive for in the MS arena. Moreover, it would...Oh, my blog space is filling up ;-) If you'd like to hear the rest, you'll just have to give me a call.

Saturday, August 20, 2005

School Year

The school year is starting up. In addition to my day job, I also teach at nights at a local community college. Some people ask why I teach such a low level class, but I really get a lot from it. I teach a night class, which means that I end up with older people who have never used a computer before or are only just starting out. It is very rewarding to help them to understand what a computer does and how to use various programs (internet, email, word, excel, and powerpoint). It certainly isn't solving world hunger, but I know that in some way I'm making a person's life better, and that is good enough for me.

This school year is also exciting for a few other reasons. First, this is my daughter's Kindergarten year. She is so excited to be going into public school. Her teacher and I went to school together, so it should be a good year for my daughter. Besides, she's a smart girl. I honestly thought about letting her skip Kindergarten b/c she already knows everything they're going to teach her, but I figured there was some maturity that needed to be gained first.

The other reason that this school year is exciting is because it is my wife's last year. In May, she will have graduated with a degree in Nursing and become an RN. I'm very proud of her, going to school and being a mother to two children is very difficult. Moreover, at that point, we will no longer be tied to our current hometown or even our current state. We can choose to move wherever we want. I'm a person that loves possibilities, so May will be a very exciting time as I explore all the possibilities available to me and my family. I'm working hard right now to increase my network of recruters and IT industry people so that I'll have lots of choices when the big day comes. Stay tuned to see what happens!

Friday, August 19, 2005

Freedom

I was over at a friend's house a few days ago and the topic of conversation switched over to politics. He felt that we should give up some of our freedoms in order to be safe. I couldn't disagree more. Our country was founded by people risking their life to obtain freedoms they didn't have in their home country. I don't want some cowardly terrorist to mar their bravery. I would gladly give my life if it meant that my country could remain free. Unfortunately, with the PATRIOT Act and other recent legistlation, our country is headed down a path whose results I fear. In the immortal works of General Stark Live Free or Die!.

Thursday, August 18, 2005

Growth

There are three phases of a product or companies growth and the passage from one phase to another is a critical time. The first phase is the niche market phase. The company or product is small and addressing a niche market, with a small number of customers. The second phase is the "kool-aid point". At this phase, the company or product is gaining clients that have passion, clients that have "drank the kool-aid." The final phase is when the company or product moves to powerhouse status, a global Fortune 500 level company. There are very few individuals who can start a small business and run it as a global company. most of the time, a new leader must emerge at each phase, the old leader is kept for historical reasons, but the new leader is responsible for managing the transition and leading the company into the new era. It is arrogant for us to think we can handle all three phases. People, by their nature, are specialists. It is ok to fail at something. It is also natural to excel at other things. Sometimes we have to put our pride behind us for the good of others.

Sunday, August 14, 2005

Preseason Picks

Based on the first full week of the preseason, here are my 2005-2006 picks. Note that this WILL change as the preseason progresses.

Try it yourself, then scroll down to see the solution.




















AFC EastAFC NorthAFC SouthAFC West
New EnglandPittsburghJacksonvilleOakland
N.Y. JetsBaltimoreIndianapolisSan Diego
BuffaloCincinnatiHoustonKansas City
MiamiClevelandTennesseeDenver







NFC EastNFC NorthNFC SouthNFC West
PhiladelphiaMinnesotaAtlantaSeattle
N.Y. GiantsDetroitCarolinaArizona
DallasGreen BayTampa BaySt. Louis
WashingtonChicagoNew OrleansSan Francisco

Saturday, August 13, 2005

Generic vs Generative Programming

There is a difference in Generic and Generative programming, though C++ doesn't see it. Generic programming is about not having to specify the exact type when you are defining a class or function. This is a staple of the C++ STL. A vector can be a vector of ints, floats, strings, or foos: it doesn't matter. Generative programming is the ability to create code at compile time. For example, loop unrolling, fixing a buffer size, and choosing the correct version of a function to call at compile time is an example of generative programming.

C++ supports both Generic and Generative programming through the same language mechanism, templates. That sinking feeling should have come over you already. Using the same language feature for two distinct operations is never a good idea. Java does not support Generative programming, though Java 5.0 has recently introduced template support for Generic programming. One interesting language to study in this regard is Template Haskell. Template Haskell uses Haskell's module system to support Generic programming, but adds a new syntax to support Generative programming. I hope that other languages start supporting two unique syntaxes for these unique programming styles as well.

Thursday, August 11, 2005

Casual Fridays

You must read this blog. I can say no more about it.

Wednesday, August 10, 2005

Name that Tune!

Do you like pop music? Want to try your hand at guessing artists and titles based on lyrics? Then try Song Lyrics of the Day and Today's Lyric.

Good luck!

Sunday, August 07, 2005

Heron

There's an interesting programming language developed by Christopher Diggins known as Heron. It is a language similar in spirit to C++ but with some modern software engineering techniques such as contracts built in. More interestingly, he is playing with concepts. Conceptual programming will, if done right, be the successor to Generic Programming (i.e., programming with templates). Conceptual programming allows structural conformance rather than name conformance. It is similar to duck typing (the definition on Wikipedia is essentially correct, though the history is screwed up). Another interesting language is Scala. I'm just beginning to look at it, but it looks to be a rather modern alternative to Common Lisp and CLOS. I'll keep you posted.

Saturday, August 06, 2005

The Alcohol Test


Bacardi 151
Congratulations! You're 134 proof, with specific scores in beer (40) , wine (100), and liquor (121).
All right. No more messing around. Your knowledge of alcohol is so high that you have drinking and getting plastered down to a science. Sure, you could get wasted drinking beer, but who needs all those trips to the bathroom? You head straight for the bar and pick up that which is most efficient.





Link: The Alcohol Knowledge Test written by hoppersplit on Ok Cupid

Green Bay vs Buffalo

Last night I watched the scrimage on the NFL network between Green Bay and Buffalo. Now, this is each teams first scrimage this year, so I didn't expect a lot, but I'll give a few comments on what I saw. As a disclaimer, I have to say that I'm a Chiefs fan and don't care about the Packers or the Bills.

My thoughts on the Packers

  1. Green Bay Defense was never in the right place. For the most part they wrapped up well, and I was happy to see that. However, they had to wrap up a lot because the receivers were typically wide open. Furthermore, they let Buffalo's runners run all over them.

  2. Brett Favre telegraphed every one of his throws. I'm seriously surprised that he didn't have about 10 throws picked off. It was a testament to his skill that he could stare down the receiver for the one second his offensive line gave him and still get the ball to him.

  3. Javon Walker shouldn't have held out, period. At this scrimage the GB Packers management looked smart for not giving in as Javon looked like a first year player.

  4. I hope the Packers' offensive line becomes less offensive and more defensive of Brett. The quarterbacks had absolutely no time to throw and were constantly being hasseled. At the end of this season, Brett is going to wish he had retired.

  5. The Packers better hope that Bubba Franks come back because they have no depth at tight end. In fact, they better hope that no defensive player gets hurt because they have no depth there, either



My thoughts on the Bills

  1. JP Lossman didn't do poorly, but I can't say he did exceptionally well, either. Toward the start of the scrimage he did his best, it seems the defense caught on to him pretty quickly though.

  2. Willis McGahee showed why they no longer have Travis Henry, he was amazing. He was tearing up huge tracks of land in no time. The Bills just have to hope he doesn't go down.

  3. The Bills defense was good, but it is hard to tell in a scrimage exactly what is going to happen in a real preseason or season game. They wrapped up well and didn't give Ahman Green room to run; however, it could be that the Packers offensive line was so bad that they didn't have to try very hard.

  4. Kelly Holcomb looked great against the second team defense of Green Bay. Then again, I might look great against the second team defense of Green Bay. I'll be interested to see how he looks during the preseason.



Of course, this was just a scrimage and things will change the more the preseason continues. I'll continue to monitor these and other teams and give you my opinion. Your milage may vary.

Tuesday, August 02, 2005

Hell's Kitchen

Tonight was the final episode of Hell's Kitchen. If you haven't seen it, it is a reality show where Master Chef Gordon Ramsay has 12 aspiring chefs attempting to win their own restraunt. I really respect Gordon. I would love to train alongside that man. He has a passion for what he does, he is creative, he is confident, and he is a perfectionist. He has all the traits of an excellent Master Craftsman. Tonight, the two survivors squared off to see who would get their own restraunt. On one hand was the polished salesman, Ralph. Ralph is a freelance chef from New Jersey. He dresses appropriately, has the "right" attitude, and is dependable. On the other hand is the creative guy, Micheal. Michael is an executive chef from Colorado. He has a body full of tatoos and is shy and a bit schizophrenic.

Each contestant gets to create his own restraunt and menu. Ralph chooses a throwback to the 20s. He creates the traditional Italian Steakhouse. It looked like a very elegant New York restraunt, which is exactly what he wanted. Michael decided to go contemporary. He created an LA "mod" restraunt with a flareful, imaginative menu and a private, but relaxed dining experience. Ralph's waiters were a focus point, dressed in bright red shirts with black pants, while Michael's were afterthoughts in grey and black attire.

Each Chef had to manage a hot plate. Michael struggled with this, while Ralph performed well. Michael had a hard time gaining respect with his mild mannered demeanor; whereas Ralph's bubbly personality kept everyone moving. However, Ralph chose personnel poorly and had to spend much of his time away from the hot plate and in the kitchen, covering for others mistakes. Michael's personnel was much better and he could focus his attention on quality control.

In the end, both had excellent nights. Both restraunts were given rave reviews by the diners, and they had 90-94% of their customers say they would return, a truly phenomenal number. So, which one did Gordon pick?

He chose Michael. In particular, Gordon commented on Michael's creativity. This bolsters what I said earlier. Software development, like cooking, relies heavily on people and thier creativity. We all have the same basic ingredients (if,while,for,data structures,algorithms) and the same recipies(design patterns, idioms) but it is how we piece them together that gives us a great Beef Wellington or an overcooked Steak Tartar. It is that intuition and creative ability that separates the truly great chefs of the world from the average Joes. I respected Gordon before, but after that choice, when I saw that he got it, I admired him. He looked past Michael's form and saw his true function.

Afterwards, Gordon even offered Michael a chance to move to London and work in one of his restraunts alongside him. Michael, like a good Journeyman, accepted. I would have expected no less from Michael; he gets it too. I wish all of our executives were like Gordon, masters at what they do, demanding perfection from others, giving perfection in return. I just hope they do a sequel :-)

Monday, August 01, 2005

Architecture

Most of the experts are beginning to converge on the idea of software as Architecture. At one time it was mathematics, then engineering, now architecture. I am fond of this idea. The goal of architecture, like that of software, is to make a product that suits a given purpose within given constraints (building codes, cost, etc...). There is also some artistic aspects of both: desiging a user interface is similar to designing a house (which is essentially a user interface). For the same amount of money and functionality you can get completely different structures, some usable, some not. In addition, you can use cheap labor to build the house or more expensive labor. If you opt for the cheaper labor, then you are likely to have quality problems down the road.

Architecture is essentially about the creative genius of a person. A Frank Lloyd Wright original is infinitely better than a prefabricated construct, though both may be made with the same material. It is the creativity and imagination of the builder that makes the product amazing. Also like architecture, creation is more about patterns than components. Often, there doesn't exist a component to do what you want; therefore, you have to build it using patterns and principles to create the best component possible.

There are a lot of similarities between architecture and software development, more so than engineering or mathematics. Now we just have to look for similarities between architects and computer programmers.