 Sunday, February 24, 2008
 Tuesday, October 30, 2007
This is an interesting article from the 1920's written by a proprietor of a grocery supply business. What the author considers brilliant may not fit the definition that many of us have. I think a better term would be "schemer" or "dreamer" or something similar. Anyway my main interest in the article is based on my assertion that many in the software profession are "brilliant." I myself find it hard to finish projects but easy to start them. If you believe in personality tests than I am an INTP. This means I have a tendency to live in my head. I need to constantly fight to finish things and to stay interested in projects. I'm always exploring new languages and technologies. This is both a boon and a burden in the technology field. I'm usually up to date on the latest technology but I have to push myself to finish projects that become a little too mundane. I also read many articles from programming.reddit.com and similar sources. If I'm not careful I can consume a whole night or day reading such articles. The plus side is that I'm a sponge for information. The negative is that I may have a hard time applying it as I'm always trying something new. I believe that we must understand ourselves to be successful. I am aware of my weaknesses and by my awareness I am able to realize what I must work on to be successful. I must force myself to complete current projects and to apply my research. When I am able to do this I can produce results that are amazing. However, I always have the potential to waste days and nights reading. However, it may be debatable whether reading is really ever a waste. I watch very little television as I prefer to read and program instead. In my opinion, this article can be summed up as "find hard workers." Not brilliant by any means but a good read none the less. Article: Why I Never Hire Brilliant Men
 Saturday, September 22, 2007
Talk about a word until it makes no sense. Why would you do this? This is much of what philosophy seems to consist
of, attempting to reach the absolute definition of a word with zero ambiguity. While a neat intellectual exercise, there exists
a threshold where this ceases to be useful for most humans. Typically most words can be defined in a short
phrase. This suffices to give us a mental
picture of what a word is meant to convey.
In fact passing this mental threshold might be somewhat harmful. There be dragons there.
We can draw a parallel to programming or to program design. Consider a database schema or a UML diagram of
a painstakingly designed class hierarchy. Each quantum of information neatly defined in
terms of other types, just as a word1 is defined by other words. Each word defined to the point of lowest ambiguity. At least this is the intention of the designer
if one follows the typical methodologies for such things.
However, is there a need to leave ambiguity in the system? Can we equate ambiguity to abstraction? On some level abstraction and ambiguity are linked.
Consider the need the most organisms have for ambiguity in their
perception of their environment. Humans
do night see all spectrums of light. We
do not hear all frequencies of sound. The
human eye cannot distinguish every possible shade of color. If you say a restroom is for woman, your brain
can picture the type of person that may enter that room. The general class of woman is sufficient for
the needs of blocking males from entering the females restroom. Our brains have the ability to remove unneeded
information so that we can concentrate on what is important.
This is the crux of the issue. This is abstraction. Instead of dealing with the billions of women
on the planet, we can deal with the one class of women. We abstract away the complexity and gain ambiguity. If we say that all women have long hair, we over
specify the general case of women and lose the power of abstraction.
What information is important in our system and how much do
we really have to specify it. Is it enough
that we know that something is a series of characters forming a string? Is a person’s name a series of fields like
prefix, first name, middle name, last name, and another series of suffixes? Or is it simply one string of characters?
Let’s examine the first case. In a large organization there is often a design
or architecture team. This team is typically
obligated to define an organizations data. The team most likely will tend to choose the
multi field very explicit representation of a person’s name. After all, what is there job but to minimize ambiguity
and maximize specificity?
In the second case a lone hacker with a deadline may decide
that one long database field is enough to store the name. This is most expedient and it gets the job done.
Why does the lone hacker’s system survive longer and cause fewer
problems? Consider the first case again. Most likely we will have to define a suffix table
where every known suffix (Jr, Sr, MD, CPA) is defined. After all a user must now choose this from a dropdown. Also the prefix must be entered. We will need another table to define these. What happens with a person who has two middle
names? Do we define another column?
It appears that even in the simplest data point definition we
have run head first into mushrooming complexity. How long do you think the design meetings will
take JUST to determine how to define a name?
I’ve been in on this and it can take a surprisingly long.
The lone hacker has written most of his system by the time the
committee has determine the proper representation of each data point in the system.
The fact is that ambiguity or rather the ability to handle ambiguity
is a feature of a system not a flaw. Many
times the ability to handle ambiguous data from a user or external system saves
a monumental amount of redesign and rework. An example would be a company that decides to open
a foreign branch and now must handle names in a different format. Do we need to redesign our system or does it
just work?
A caveat here is the interfacing to other (broken) systems
that require the data to be split into small pieces and fed in. A partners system requires first and last names.
Is this a problem?
It can be. One solution
is to parse the name field. Ninety percent
of the names will probably be first and last name only. This is because most users are lazy and only want
to enter the minimum amount of data. Some
self absorbed types are going to enter every credential in the list including their
Boy Scout merit badges. Now we may have
to kick back this data to a human to look and correct. Last I checked data entry was cheap, programming
was expensive. A great solution? Maybe, maybe not. How much money did your design team burn by arguing
over what should be in the prefix and suffix table?
In the age of search, ambiguity becomes more useful. If we can search on any field in the database
than I no longer have to use last name to organize a list of people. Searching for them may work much better. Or it may not and you find that you want a separate
first and last name field.
Of course if your requirements call for separate fields because
they must be fed to another legacy system, then by all means specify two fields.
You have a valid reason to do so this increases
the coherency of the system. My point is about over specification in the absence
of requirements.
In the absence of requirements, don’t over specify. Creating unneeded complexity in a system does
not benefit anyone. Ambiguity, as a facet
of abstraction, provides the designer a way to deal with complexity or at least
to mitigate it.
1-In fact languages like Forth
or Factor call the smallest unit of execution a “word.” The word in such a language is equivalent to
a function in the more “mainstream” languages.
 Tuesday, October 24, 2006
This week's reading assignment can be found here:
We're all big babies
This guy stole my idea for my second book but I'll let that slide for now. Our society is devolving into an ipod filled, Paris Hilton admiring child care center. Many of my friends and contemporaries frighten me with their child like behavior and attitudes. Actually, most of my friends and colleagues are OK, the people who truly concern me are the casual acquaintances and and people that I interact with in public at the gym or in a store, e.g. situation that I can't help but interact with these fools.
Examples: Adult mothers wearing "MILF" t-shirts (Britney Spears style).
Adult woman dressed as teen aged hookers. These are the woman that wear tight jeans and tops when they are in the 40's and 50's. What is wrong with dressing in something more suitable to your age? I find a woman much more alluring when she dresses appropriately. I'm not a prude I just don't want to see your mom's saggy boobs hanging out of her baby t belly shirt. (shiver).
There is just something about a woman in the appropriate clothing (a business suit, etc) that some men find very attractive.
Men in their 50's wearing hip-hop style baggy jeans is another non-starter. What up with that homey g pimp daddy Ted? Ted shouldn't wear that kind of stuff. Actually nobody should wear that kind of stuff. I love the old movies where everyone is wearing a suit or a dress. The people in those movies are adults. They say adult things and make adult decisions.
An adult buying a toy on credit.
I mean taking a loan to purchase a boat, jet ski, motorcycle, etc. These are toys. If you must take a loan out to buy this then you are a child plain and simple. You are ridiculous.
A hobby you can not afford.
This is related to the above example. Do you spend every weekend involved in an activity that is utterly non productive? Do you spend a large amount of money on this hobby? Do you make sacrifices for this hobby? My grandparents had hobbies. Gardening comes to mind. They grew their own food. I just don't understand the elevation of golf or hunting or fishing or football watching from a waste of time to a priority. These activities are for retirement. You should not be wasting all your money and time as a young man on frivolous activities.
The worst part of this whole deal is that this fool will want to talk to you about this hobby as if you give two shits about their childish pursuit of the great horned snipe.
Politics is Stupid.
Arggghhhh! I think politicians love it when people get discouraged. If you are too stupid or lazy or both to care about politics then not voting is your best option. Please drive your jet ski into a boat dock and spare all of us your ignorance.
Lack of a personal philosophy.
Do you live by a set of values? Do you have standards? I can't imagine discussing philosophy with today's Tylers and Skylers (my code for the boy-men of our era). What are your goals? What do you want to do with your life? If you simply want to golf every weekend and watch football and drink so much alcohol you piss and shit yourself then by all means philosophy is not for you.
My puppy/kitty/fish/hamster/turtle is part of the family.
Thinking a pet is part of the family is childish. This is how children think. I love my big fluffy doggy. Ooohhh, how cute. It is cute when you are 5 but not when you are 35. Grow up. Don't let your dog shit on my lawn. Take care of the damned thing. Take it for a walk, give it a bath. I'm all for responsible pet ownership but when a childish adult refuses to take care of his or her pet it is utterly infuriating and just plain pathetic. Oh, and if your dog bites me I will do my best to have the animal put down, even if I must do it myself. Your stupidity does not supersede my rights.
 Tuesday, September 19, 2006
Scoble has been irritating me for a while now. This latest steaming pile of poo-poo has pushed me too far.
 Monday, September 18, 2006
Playing games an investment? Maybe. Yes your kid might not be wasting thier life in front of the computer, they may be preparing for a great career.
 Saturday, September 16, 2006
I probably should mention that IronPython is probably the ultimate example of alternative languages for the .NET framework. It was developed first independently then in cooperation with Microsoft. Microsoft made IronPython team member Jim Hugunin part of the CLR team. Not a bad recruitment strategy, how many people can claim to have worked on porting a language to the .NET framework successfully. IronPython seems to have all of the major .NET 2.0 features which Boo is still missing but Nemerle is way ahead on because Nemerle also has the C# 3.0 features.
So IronPython looks pretty good if you're a Python fan. I myself don't care for Python. There is no particular reason to dislike Python, I'm sure it's a perfectly fine language. I've played around with it a little bit but didn't find anything that convinced me that I needed to make Python part of my arsenal. It's a nice enough scripting language along the lines of Ruby. Which brings me to another point that I didn't mean to get to: Languages seem to pick off the most converts from languages that are very similar. For example, C# is about 95# Java and so someone who knows Java would feel at home in C#. I think the same can be said very generally about Perl and Ruby but not to the same degree. I think Python and Ruby are going to compete in the same niche but I don't really see the difference between them besides the syntactic niceties and some miscellaneous differences.
I wonder if there is a biological law or principle about this? I thought I remember learning about this at some point. The principle is something like the individuals most like you will compete for the same resources. Nursing kittens with compete with their litter mates for the limited resource of their mother's milk. I think this is true for languages. I come across some language projects that make me wonder why someone would want to do that. What is reason someone would need another scripting language let alone another general purpose language (C, C++, Java --> C#,J#,J++,Visual Basic)? One valid reason I can see is that it targets another platform like Unix or Windows or a mobile device or perhaps it offers some powerful language feature that can only be accomplished in a new language. Or perhaps the old language is controlled by a competitor or some similar entity and simply extending it is not possible nor feasible.
Many people complain (wrongly IMHO) about JavaScript. I think it is a very elegant language once you understand how it works and what you want to do with it. JavaScript (ECMAScript) was built for a new platform, the browser. It also makes a fairly decent and powerful replacement for VBScript for Windows scripting using Windows Script Host (WSH). So I see the point of that language. But WTF is up with JScript.NET? What is the point of this bastardization and castration of a perfectly good language?
Some languages like Java and Ruby had the intent of making Lispy features available to the Average Joe. This may be blasphemy but I don't think Lisp is all that difficult to comprehend. What is difficult to comprehend is all the hoops you have to jump through in Java, C#, etc to get quasi-Lispy stuff (see Reflection).
So with IronPython we have another example of bringing an existing language to the framework instead of using that effort to get a better language for the .NET framework. The more I think about it the more I think that Nemerle is a LFSP whereas something like C# is more of a safety language.
The .NET framework and the CLR are powerful tools and a language like Nemerle shows us what is possible. IronPython shows us what was possible ten years ago.
Disclaimer: I make my living writing mostly C# code at this point. I have also made money with Java and Visual Basic in the past. I have not made any money or with non-average languages...yet.
 Friday, September 15, 2006
I think when Microsoft introduced .NET and the declared that you where free to write in any language most people focused on bringing old crusty languages like COBOL to the modern .NET framework. I'm not sure how successful this has been. I'm not being critical, I simply do not know because I use C#, arguably the most mainstream of the .NET language families. For the past few years I have flirted with languages like Ruby and Lisp and found some of the features of these languages to be intriguing. C# is fairly powerful and is still being extended by Hejlsberg and company and is even starting to stretch into some Lispy areas with features like LINQ. What I miss most in almost every language is the Lisp style macro. These things are powerful, if you don't know what I'm talking about you need to check out Peter Seibel's Practical Common Lisp book. Once you implement the MP3 database in Chapter 3 you should have a good idea what macros can do for you and your coding, especially if you write a lot of repetitive code (hint: database access, DAL, etc).
The problem is that even thought I enjoy Ruby and Lisp the implementations for these languages are hit and miss. The open-source implementations all feel like second class citizens on Windows XP. Using Emacs as a text editor for Lisp when you are used to Visual Studio 2005 is a little disappointing. Using GVIM to edit Ruby on Rails files leaves me with a similar sense of dissatisfaction. These are great languages without great tools and with hit and miss implementation issues. I have to say however that I am fairly comfortable with some of the commercial Lisp Implementations with LispWorks being the best all around when you consider licensing.
Back to my point, I did not set out to author a diatribe on Lisp and Ruby, and I will leave that to the Flamer and the Flaming Flamed. My intent is to write about two rather new languages that give me a lot of hope for the direction and potential of CLR languages: Boo and Nermerle. Both of these languages support cool syntactic macros and add their own little twist to CLR programming. Boo is about agility and keeping the code lean and clean and uses macros to support this concept. Nemerle is a hybrid functional language very similar to C# but with the cool functional stuff like Pattern Matching and also C# 3.0 features. What is interesting is the C# 3.0 features are implemented in the C# compiler and does not require support from the CLR. CAUTION GENERALIZATION AHEAD! Lisp macros are simply code that runs at compile time instead of run time. So we are doing things in C# that sounds like an area where macros could make a huge impact. In fact this is how Boo and Nemerle implement many of their advanced features, they are simply using macros. So Greenspun's 10th Rule plays out again this time inside the CLR. In fact if we design a language with Lispy-ness in mind we know that we need very few constructs to develop a very powerful language and I think Nemerle especially takes advantage of this fact.
These languages are not designed by Microsoft. They are independent languages targeting the CLR. So yes even though we are coming back around to Lisp, I for one am not disappointed but rather quite pleased. If I can get the power of Lisp on a framework like .NET then I will be a happy camper. I'm waiting for the tools around these languages to mature a bit and at this point I'm leading more towards Nemerle because it seems to be farther along and very well documented. Once a plug-in for Visual Studio 2005 becomes mature I will definitely spend more time playing with this Nautilus machine for the mind.
So all I want is a great language and great tools and I will be happy. Is that really so bad?
In the upcoming articles I will showcase my new PC and how I went from a bulgin' beige box o' noise to a sleek powerful dual core system that is not only fast but also nearly silent.
For now I will tell you that I bought the main system from EndPCNoise. I believe I came across them as I was checking out SPCR.
 Wednesday, March 08, 2006
I believe this comes from Ruby or that's where I got it anyway. What it means is that something should do what you think it should.
- Don't get too fancy on web pages, meaning not too much AJAX
- Don't get too complicated on a web page
- Keep it simple, somehow
 Thursday, February 23, 2006
I've decided to attempt a paperless revolution.
I'm going to scan most of my paper doc's and store them on my pc and then shred the originals. Of course I will keep the originals where necessary. I then plan on archiving to CD or even DVD on a regular basis and storing a copy off site, maybe in my desk at work.
The Equipment:
HP Officejet 6210 All-in-One
This seems to be working ok but I still need to figure out how to scan multiple documents and then split the scan into multiple files.
The Files:
Searchable PDF's created with the OCR features of the HP 6210 and the HP Director software.
The System:
Sort the files into folders as appropriate and use Google desktop to search for relevant information. This is the big benefit. I can search through all of the text of my documents with the power of Google.
 Monday, January 23, 2006
I came across this while searching for a CD recorder for Windows XP. I haven't burned a CD in a long time and I realized that I hadn't copied one since I re-imaged my system back in May of 2005. I used to use Nero but I was too lazy to find the software so I downloaded this:
http://isorecorder.alexfeinman.com/isorecorder.htm
It seems to be a bit faster then the built in Windows XP facility for copying data disks via drag and drop. It also lets you burn ISO's which is a plus. I'm not sure it's ready for the toolkit yet as it hasn't proven its mettle in combat yet. ---Updated 06/02/2006---
I've used this a few times now and it did the job. One problem I ran into is that you can't record the ISO's off network drives or drives that are aliased with the subst command. So just keep that in mind if you are having any problems burning an ISO.
 Thursday, January 12, 2006
PSPad is still the winner. There are some odd things I don't like but for the most part I think it's pretty good. It still loads fairly fast. It has GREAT HTML, CSS and JavaScript support along with the color picking ability. It integrates with TopStyle (and the free Lite) version but with the included intellisense and color support I don't think you necessarily need TopStyle.
PSPad has made it only 3 of my 4 machines and the fourth I don't use often for development so it's not a big deal.
All in all I will say that PSPad is the king of development oriented text editor. For Now...
PSPad Site
 Monday, January 02, 2006
I was under the weather this weekend so I spent some time looking for a new text editor. I had a few requirements:
- File explorer
- ability to view differences between 2 files
- syntax support for Ruby
- pretty print features
I tried out CPad and it was very promising. However there is a little bug with CPad where the program will not close without killing it in taskmgr. I posted the bug on the CPad form and we will see if it gets fixed.
So I tried quite a few others but none had the features I listed above.
Then I came upon PSPad. It has the features I need plus the kitchen sink. This thing has everything from a color picker to an ASCII table to the ability to handle ruby embedded in HTML. Something only sophisticated IDE's are usually able to handle.
I'm still playing with the PSPad but I think it may replace my current favorite Crimson Editor and earn a place in the Pragmatic SDK.
Update:
Yes it does do Ruby fairly well. I must admit however that since ASP.NET 2.0 came out I haven't used Ruby or Ruby on Rails much. I'm exploring the new features of ASP.NET and C# and enjoying the new IDE.
See the comment below for enabling Ruby syntax support.
 Saturday, December 31, 2005
Paul Graham is a LISP dude. He likes LISP. He preaches LISP. This made me very interested in LISP because I find his writing to be interesting.
Joel Spolsky is also an interesting writer. He has mentioned LISP several times in various essays.
Taken together this provides curiosity about LISP. I’ve downloaded SCHEME and played with it. On the surface it seems an interesting concept. You define functions which you can then call. Not too far out.
I’ve also come upon the recent Reddit-LISP-convert-to-Python controversy and this inspired some thinking on my behalf.
I will concede that LISP is the most powerful language in the solar system. Maybe GOD (GOD Over Djinn) wrote the universe in LISP. If so why didn’t he provide the nice standard libraries for sockets and threading that the Reddit team would eventually need?
I’m interested in these ideas because I recently started using Ruby on Rails and JavaScript which are both languages with a similarity to LISP (or maybe the better description is “cheap knock offs of LISP” or maybe “actually useable versions of LISP”?). Of course as an avid reader of the sources I’ve mentioned above I was more readily willing to try Ruby. My background is in Microsoft technologies and Java. I started in VBScript then I went to Visual Basic then to .NET with C# and then to Java and now back to classic ASP and ASP.NET with C# and Visual Basic.
I’ve learned that .NET and Java the platforms are roughly equivalent in power with Java having the longevity advantage which provides for all kinds of open source resources and a mountain of documentation. Java can run on multiple OS’s and I used to work for a company where this was important, now I don’t so this is no longer an issue for me.
Now LISP claims the title as most powerful. I would append this to “theoretically most powerful.” If it is the most powerful why do people stop using it because it can’t do what they need? Why did Paul Graham have to write his back office code in Perl and his image manipulation in C if LISP was so powerful? Why does Joel Spolsky write FogBugz in ASP classic?
It comes down to libraries. Java is the king of libraries. I can find Java classes to do anything. NET is catching up. JavaScript is going to rule client side software. So why am I using Ruby? Because I can get most of what I need to get done very fast and there are a lot of libraries for Ruby available. Not as many as Java or NET but no deal killers yet. It’s cross platform. I develop on a Windows machine and deploy to a FreeBSD machine with no problems.
Maybe one day I’ll get around to truly learning LISP but it will probably be after I’ve written my killer app in a more powerful language…
 Friday, December 30, 2005
I've been thinking about business ideas lately and this
topic comes to mind. Many of the large and well publicized acquisitions
by Yahoo and others are for general purpose large user base applications.
These include picture sharing and social networking in one form or
another.
Today in a meeting one of my colleagues made the comment that "custom is
always better" in reference to COTS versus home grown software. This
started a thought process on the value of software and a continuum for
measuring the value.
On the low end you have a product like Writely or Basecamp. These
applications are simple and general purpose. On the other side you have
software for a custom application and in the extreme case it is for one
customer, one site or perhaps one special purpose like running one of a kind machinery.
Now I believe that we can place value of the software along this spectrum.
A piece of blogging software has almost zero value because it is on the
commodity end of the spectrum. Anyone can write blogging software and
everyone apparently has. There are so many open source blogging engines
that it's almost comical. Let’s say that
the developer/publisher makes one cent off each user so volume is important.
On the other hand specialized software is expensive. Software for complex processes like specialized
work flow, monitoring and industrial processes is very expensive. COTS packages for this type of application
are not cheap. In this monetary range
many organizations hire programmers either full time or as consultants to build
custom applications. These often are the
most expensive of the software options, yet like a tailored suit often provide
the best fit.
The problem I’ve seen is that companies that have a full
time development staff often opt for COTS packages. While many times this is a great fit for
example buying the MS Office suite is a good idea, trying to wedge a work flow
system into an organization is not such a good idea. The more custom your application, meaning the
more a COTS solution needs tailoring for the organization, the more a custom
developed application makes sense.
These types of application can pay very well but you need a
lot of pay from these jobs because you very likely can only sell one of
them. You can’t mass produce these
applications on a CD and put them on the shelf in Wal-mart.
What does this mean?
I think that the companies purchased by Yahoo, Google et al.
are lottery winners. The development
effort was equivalent to buying the $1 Lotto ticket at the local gas
station. When you win you win big but most
the time you lose but it’s not a big deal because you haven’t invested much.
The other side is more like a Texas Hold ‘Em game. You’ve got fewer competitors but you know who
you’re playing against. This is where
the big boys play; the COTS players with the deep pockets, if you will.
I think my spot is somewhere in the middle. I don’t want to write yet another blog engine
but I don’t want to make shrink-wrapped software.
 Thursday, December 29, 2005
Adobe Acrobat has sucked for quite some time. Actually it has sucked since version 6.0. Now there is a great replacement for it.
Foxit (http://www.foxitsoftware.com/pdf/rd_intro.php)
It's small and fast and you simply download a single exe and execute it. No fuss no muss and did I mention fast? It smokes. It's also free. This has to be one of the best pieces of software I've seen in a long time.
This is going into the Pragmatic SDK.
 Friday, September 09, 2005
Every once in a while you come across some truly innovative useful
software. Wink is that type of software. It's a free
application that can capture screen shots as either individual frames
are as a mini movie which are then converted into single frames and can
then be edited and eventually saved as a flash .swf or windows .exe
file.
I intend on using it for help systems and instructions for remote users. Did I mention it's free?
All I can say is wow.
http://www.debugmode.com/wink/
 Tuesday, August 09, 2005
Paul Graham seems to be an incredibly smart guy.
Here’s an article
that covers a wide gamut of issues many of which I’ve pondered and I have to
say I admire the way in which he has laid out this article and the coherent stream
of consciousness it presents.
Essentially, it’s hard to work in offices, which I whole
heartedly agree as I get the lion’s share of my work done at night after my
wife has gone to bed and the house is quiet.
He also writes about the fact that people will work hardest for
themselves and more importantly their idea and ideals.
The idea that most intrigued me was the employer-employee
paternal relationship and its implication of justice. In other words an employer is obligated to
take care of the employee and this makes the employee behave like a teenager, tugging
at the reins of control imposed on him/her and resenting the cozy embrace of
the parent’s house and rules. His
example of postal employees is dead on.
Well worth the read but set aside 15 minutes of quiet time
(if your office allows for such a thing) and read it.
 Wednesday, July 27, 2005
Again taking inspiration from Joel:
http://www.joelonsoftware.com/news/20020715.html
Major point of article: Coders in large shops are
often rewarded for writing lots of buggy code and then swooping in at the last
minute to fix their own mess and make themselves the hero.
I worked with a guy; let's call him Squirrels, who was just this kind of
coder. He would churn out volumes of code. Whereas some coders
progressively improve their craft, this guy progressively randomized his
output. You could tell when he read a
new article in MSDN because that code would go into his project. Most programmers are somewhat guilty of this
but this guy was the extreme. He would
try out something new and cool (or not so cool) while neglecting the basics of
simplicity and readability let alone the niceties of error handling and maintainability.
He would race ahead of his disasters, making junior
programmers responsible for fixing his messes and then moving from Visual Basic
to web development to database development and management seemingly just to
avoid having to work on his own evil machinations.
I learned a valuable lesion, more != better and quality is
sometimes hard to quantify especially for a little bald dude with a Napoleon complex
and an ex-auto mechanic turned axe-man.
But that’s another post…
 Friday, July 08, 2005
I've been thinking seriously about business oppurtunities and for some
reason there is a general conception among many people that a business
idea has to be new and original. I've got news for ya' brotha'
there ain't nothing new under the sun. Well there is but the
these ideas are few and far betweena and they are mostly improvements
on old ideas.
Hence the point of this post. Pick a business, fiind a way to do
it better, faster, cheaper etc then make money. Recently I read
an article that reinforced this belief:
http://www.joelonsoftware.com/articles/AardvarkMidtermReport.html
Joel came up with an idea for an improved remote computer assistance
software. The key word is improved, not new, just better.
Now to the point, I've been kicking around the idea of a sort of cross
bread between a certain electronics shack, a certain big box store and
a cell phone dealer.
We will handle small personal electronic items and networking of
digital appliances whether these are cell phones, pda's, pc's or a
fridge that has a NIC card. The emphasis is on small high margin
devices which are wireless. The key to this goal is
service. We will out service any competitor. All employees
are A+ certified or equivalent and customer friendly which means no
rude high school kids! We will not carry low margin big box
merchandise. Our customers are SOHO (small office home office)
and individuals. Our goals is to make the customers digitial
devices work together to increase value (see Metcalfes law).
This is the template to move forward with. The working name is Gadget Tree. To be continued...
 Tuesday, July 05, 2005
 Saturday, July 02, 2005
I'm writing this looking back from a potential future where
microsoft becomes a consulting services company and its Windows OS is is the
OS/2 of its day. Microsoft failed to embrace the Open Source software
movement. Well not exactly. Microsoft failed to research the make
up of this group. Not only the creators of OSS
but the users of OSS. The
users are almost more importannt then the developers in this case.
Why? MS decided that OSS was
foolish and that the developers engaged in OSS
where giving away their services and their time. MS argued that software
should be paid for and that developers should be making money. I can't
argue with any of this and on this point they are very correct. However
you have to look at the motivations of the OSS
community.
The first perspective is the users. They get free
software without the worry of the licensing nightmare that accompanies most
commercial software. There is no good way to keep track of the software
installed on most systems. Don't get me wrong there are several improving
ways of monitoring installed software but this is usually not free. There is SMS and related products but this is
still difficult, with many small to medium companies struggling to 1) understand
their licensing agreements and 2) comply with their licensing agreements. How do I know this? I was employed by a small division of a VERY
large corporation. We had incredible
resources but it was still a great challenge to manage all of the various MS
and related software and all the third party software. When you are told to install software on that
laptop today because the boss is going out of town and needs it right now, you
do it.
However as
we move forward in time and major shift in development away from desktop and
towards web applications began. The two
reasons for this were 1) DLL Hell, which is its own article/book/series of
books on its own and the licensing debacle referenced above. So we have a paradigm shift from desktop
software to web software to alleviate the installation and maintenance
nightmare of desktop software. Note that
we have had several paradigm shifts from the original main frames and UNIX
boxes to the all powerful desktop to the client server heydays of the mid
nineties and eventually to the web centric model that is emerging today.
Microsoft
of course saw this and countered with .NET. Make you think that .Net is all about the
network and every server and desktop with .NET
would be instantly connected and on the web.
Well here is reality: .NET did not
ship with Windows XP. Nor was it on the
2000 servers most people were using at the time. But the worst was yet to come. All of my client server apps written with VB6
and MSSQL would have to re written because VB.NET
was not backward compatible with VB6. Goodbye
desktop hello web. So VB6/COM
training/talent/know-how goes to ASP and ASP.NET
and then in ASP.NET vbscript is abandoned
(rightfully or wrongfully) in favor of javascript. So know I have wasted 5-6 years with VB and
COM and must upgrade my skills. So lets
go looking for training for our staff.
Wait a second. What’s this java stuff. That will really take off and that’s what all
the big guys use on their servers and even better this language was written for
the web and even better developers can fell like they are writing in C and feel
smart while having the memory management of VB.
Yeah Java! Then along comes .Net
with C# the Java killer.
All the while many free lance
developer, student, academics, government and pretty much any software
developer who has limited resources has been searching for ways to reduce
software costs while remaining inside the boundaries of the law. Well a few of them get together and figure
some stuff out and write some programs to share. Why not create this and why not create that
and pretty soon you have an OS and a web server which is all your really need
in this new world. Why not have a few
web languages? Keep building on the
foundations of what is currently available, get smart and hungry people to work
on it and wait a while. Pretty soon you
have some pretty good tools written for smart people by smart people to do the
things you need to do. Bugs are fixed
quickly, people are friendly this whole thing isn’t too bad.
So all of a sudden OSS
becomes to pretty decent software with a price that you can’t beat. So the question is why pay for all that
software especially when all you need is a web browser (available on Windows
98) to access all of the company network and software which is now web based.
...End of Part 1...Part 2 soon to come...
 Thursday, June 16, 2005
 Monday, June 06, 2005
This is a site I've used more then once:
http://www.lookuptables.com
A good site for ASCII, COBOL, HTML and UNICODE character codes and
translations. It's almost faster then looking at the sheet I have
hanging on my cube wall.
 Friday, June 03, 2005
Do you call yourself a Java developer or a .NET
programmer? Do you think a carpenter
calls himself a handsaw carpenter or a table saw carpenter or a belt sander
carpenter? The point, if it is not
obvious, is that you should not pigeon hole yourself into claiming that you’re
only a one trick pony. Could you imagine
a carpenter getting a job if they walked into contractor’s office and said “I
use a hand saw really well but I’ve never really messed with this hammer stuff?” That carpenter would be laughed out of the
office.
One thing some of the language evangelists forget is that a language,
IDE, framework, OS and the hardware it all runs on are just tools. Humans advance by making tools and then
making better tools. Imagine if we had
stopped at the flint axe because the flint axe evangelists said that the flint
axe was the best axe ever made. At that
point it probably was but eventually we moved from the Stone Age to the Iron
Age and the Steel Age and now you can buy nice steel axes at Home Depot for reasonable
prices. Of course you can also buy a
chain saw and save yourself a lot of hassle.
So what does this mean for you, the sophisticated computer
programmer of today? It means that you
should think of yourself as a programmer.
It may be acceptable to think of yourself as web developer or enterprise
software developer who is fluent in many of the tools of your trade. Don’t get stuck in the rut of your current
tool of choice. VB6 programmers learned
this lesson all too (or should have) well when Microsoft decided that VB as
they knew it was no good and needed to be replaced. Goodbye VB6, COM+, COM, etc, hello .NET, good
bye knowledge, hello training classes.
A good craftsman uses the best tools for the job. If a new tool comes along that can make a job
faster, easier or results in better end products, you can bet that it would be
adopted. However there are always the Luddites
that believe nothing new can be better. So
the advice is to stay agile and keep learning.
If you catch yourself bashing another technology without having used it,
maybe you should reconsider after all right now you could be out hunting bison
with a stone axe, instead of sitting in a nice climate controlled office
sipping lattes and reading this excellent article.
 Wednesday, June 01, 2005
I’ve been
in the habit (well I’ve usually not had a choice) of learning a new language
each year or so. I’ve always had an
interest in scripting languages, this is not unusual as I started my
programming life as a system administrator and I used VB scripting edition for
all kinds of things. I’ve since learned
quite a few languages and some I’ve enjoyed and some I have not. I looked into PERL last year as it is used
where I work and I had read about it in The
Pragmatic Programmer. I was a little
bit disappointed. What a mess. It seemed like a patched together hack and I
was not much more productive then if I had simply used Java or C#. With that out of the way, I was surprised to
see a book published on-line by the authors of The Pragmatic Programmer.
Programming Ruby is a
book dedicated to the Ruby language.
Ruby is supposed to be simple to use and very object-oriented. I have decided that this is the next language
I will dive into. One reason I am
interested is the productivity promised by the Ruby on Rails framework.
Here is a
list of what I am expecting:
- Easy
to learn
- Easy
to use
- Minimal
hassle
- Minimal
quirks
- Free
to use
- Good
for web developing
Some things that I am interested in finding out:
- Data
Access capabilities
- Availability
of editors (code completion, etc)
I will post again once I have read the book and coded enough
to form an opinion of Ruby.
 Thursday, May 26, 2005
I was reading another great article by Joel on the Law of Leaky Abstractions. Simply stated, programming advances by creating abstractions of complex processes. ASP.NET makes web development simpler. However, it does not relieve us of having to learn CSS, XML, XSLT, XHTML, javascript and C#. Instead we must learn all of these technologies and having done so, we are able to develop web sites more rapidly but we must now know more then we had to before.
This concept is probably best illustrated by TCP/IP Socket programming. No matter how well a library is written you should still learn TCP/IP to use it effectively.
I believe that this is the reason that even as tools, techniques and hardware constantly improve, software quality is not improving at the same rate. The troops in the trenches have to keep elevating thier game to keep up.
The article:
http://www.joelonsoftware.com/articles/LeakyAbstractions.html
|