Saturday, December 09, 2006
What's in an operating system?
I hadn't considered the Mac as a viable choice for most applications since sometime in 1994, the last time I used a Mac as my primary computer. As DOS made way for Windows 3.1, and eventually Windows 95, my trusty Mac slipped from the mainstream to an OS that you only found in schools and design shops. Windows NT, 2000, XP, and now Vista added increasing stability, usability, and security. I have to give Microsoft credit: they managed to transform one of the world's worst operating system into something that's almost as usable as a Mac. Almost.
I'm pleased to say that after a 13 year absence, I'm back to a Mac! I haven't had this much fun with a computer in a long time. More about why, later...
Sunday, July 23, 2006
Quality is not an act. It is a habit.
Quality is not an act. It is a habit.
-- Aristotle (384bc-322bc)
Tuesday, May 02, 2006
Velocity Drives Innovation
While 72% of the senior executives in the survey named innovation as one of their top three priorities, almost half said they were dissatisfied with the returns on their investments in that area. The No. 1 obstacle, according to our survey takers, is slow development times.
Innovation, today, is about much more than just developing new products; it's about structuring the entire enterprise around routinely producing great ideas, rapidly selecting the right ideas to bring to market, nurturing the ideas that prove themselves in the market, and letting go of the ideas the don't. It's about taking calculated risks and making new mistakes in a focused, disciplined effort to discover entirely new markets and revenue streams.
In an innovation-driven organization, there's no such thing as a bad idea except one that isn't shared.
Tuesday, April 25, 2006
Setting Up a Ruby on Rails Development Environment
- The Rails framework
- A relational database (MySQL, PostgreSQL, and SQLite are supported, out of the box)
- Your favorite text editor
- The SubClipse SubVersion Client Plugin for Eclipse
- The Ruby Developer Tools Plugin for Eclipse
- The Web Developer Tools Plugin for Eclipse
- It's free!
- I'm planning on evaluating a Java-based architecture shortly, and Eclipse is probably the de-facto IDE for Java development.
- I'm planning on evaluating a LAMP-based architecture shortly, and there are PHP, Perl, and Python plugins available for Eclipse. No matter which 'P' I end up using, I should be covered under Eclipse.
I found another article on the Ruby on Rails site about How To Use Rails With Subversion. It's concise and includes valuable guidelines for what parts of the Rails environment to place under source control.
To test everything out, I built the sample application described in Rolling with Ruby on Rails, by Curt Hibbs. It's the perfect guide, if you're like me and just want to dive into something new, without a clue of what you're getting yourself into!
In all, it took me around two days of effort to find and read all of these articles, install MySQL, setup my development environment, build the sample application, and commit everthing to SubVersion.
Architectures that Enable Velocity and Agility
Adapt or perish, now as ever, is nature's inexorable imperative.
-- H.G. Wells
In theory, software is a fantastic environment to build things that are designed to adapt to changing needs. Compared to brick and mortar, software is relatively maleable. The cost of making even major changes to software is relatively low.
Unfortunately, too much software is not explicitly designed with change in mind, resulting in systems that quickly become brittle. Some of this is due to lack of attention; some is due to architectures that aren't designed for change.
I plan to spend some time exploring some contemporary architectures for Web-based applications in terms of their ability to support changing requirements throughout the application lifecycle. For each architecture, I will evaluate the level of available support for practices like rapid prototyping, continuous integration, and test-first development. I will also explore the architecture's support for separation of concerns and its performance and scalability characteristics.
I'll start with Ruby on Rails. Ruby on Rails has been generating quite a bit of buzz with its claim of improving developer productivity by a factor of 10 and it's recent Jolt Award. I will also probably look at Java, .NET, and LAMP, since they are so commonly used. No promises, though; some of this will depend on how much time I will actually be able to devote to this exploration!
Next: setting up my Rails development environment...
Thursday, April 20, 2006
Etymology of Technology
The American Heritage® Dictionary of the English Language, Fourth EditionCopyright © 2000 by Houghton Mifflin Company.
Published by Houghton Mifflin Company. All rights reserved.
Zen and the Art of Software Development
While Pirsig weaves together many themes, one thesis is that we do not exist in a dualistic world of mind and matter or subjects and objects. Rather, there is a third entity, Quality, that is independent of the others.
We recognize Quality when we see it, but we cannot define it. We can only describe attributes of subjects or objects that provide evidence that Quality was present during the creation process.
Gumption is the glue that connects one with Quality and ensures that the objects that we create manifest our connection to Quality:
Gumption is the psychic gasoline that keeps the whole thing going. If you haven’t got it, there’s no way the motorcycle can possibly be fixed. But if you have got it and know how to keep it, there’s absolutely no way in this whole world that motorcycle can keep from getting fixed.
So what do Quality and gumption have to do with software development? Without them, you can't build great software. The trick is to start with plenty of gumption and control for everything that tries to take it away.
A gumption trap... can be defined as anything that causes one to lose sight of Quality, and thus lose one's enthusiasm for what one is doing.
Pirsig goes on to elaborate on several, common gumption traps, which he classifies into setbacks and hang-ups. I'll paraphrase and elaborate to connect Pirsig's examples from motorcycles to the computer world.
Setbacks consist of careless mistakes, intermittent failures, and parts problems. Anyone who has been around software for a while has deleted a critical file on a production system or broken a piece of code that used to work. Those are careless mistakes. Troubleshooting mysterious problems that do not appear to fit any pattern is also common. Integrating third-party components that are too expensive, aren't compatible with the rest of the system, and/or don't work as advertised is par for the course.
Hang-ups can be further broken down into value traps, truth traps, and muscle traps. Value traps consist of rigidity, ego, anxiety, boredom, and impatience. Truth traps basically involve being trapped in dualistic yes/no logic, and not being able to see the value outside of clear yes/no answers. Muscle traps consist of inadequate tools, bad surroundings, and something Pirsig calls "muscular insensitivity."
I had some trouble mapping muscular insensitivity to the software world, where there are no threads to strip and finely machined surfaces to damage. I liken muscular insensitivity to understanding the subtle characteristics of a system and its sensitivity to changes.
The software world talks about things like process, methodology, and best practice as ways of ensuring quality deliverables. These are really tools to help keep you from loosing gumption, and therefore help you from loosing sight of Quality. However, if you don't have sight of Quality in the first place, all of the processes and best practices in the World won't help produce great software.
Monday, April 17, 2006
Adding RSS Feeds to Blogger: Part 2
The AJAX version is based on sample client and server code that I downloaded (see Part 1 for references). I cleaned up the code a bit and added simple caching to the PHP-based proxy. Feel free to download the code and give it a try! You'll need a server than can run PHP - it uses CURL to make HTTP requests and it needs to read, write, and delete local cache files. Unzip the files to a directory on your server, change the rss_feed variable in index.html to point to delicious_proxy.php, and you're good to go!
Both approaches are very easy to implement, but with zero technical footprint required, Feed2JS has to win, in terms of simplicity.
Thursday, April 13, 2006
Adding RSS Feeds to Blogger
Blogger is very cool! It's just so easy to setup a nice looking site, manage your content, and tweak your template until everything is just right.
Once I decided to resurrect this blog, I looked at my templated and decided to spice things up, a bit. In particular, I really wanted to make my links dynamic, so that they would automatically reflect my current interests and areas of research. Luckily, I already have this content on del.icio.us. The question is, how can I get it to automatically update in my sidebar. Adding an RSS feed from del.icio.us was the obvious answer. You can see the results on in the sidebar, on the right side of the page.
I started by looking around Blogger for the ability to add RSS feeds to my blog from the Settings tab. Imagine the ability to go to "RSS Feeds", add a feed by entering a name, a link, and a number of items to display, and having the feed show up in a pre-determined area on my site (e.g. the sidebar). No such luck.
A quick search produced an article from AJAX Magazine about how to build an AJAX-based RSS reader, complete with sample code. Testing and fine-tuning the sample code on my local computer was a breeze and I was consuming my del.icio.us RSS feed in minutes.
However, when I plugged the AJAX code into my Blogger template and previewed the page, I received error messages... an no del.icio.us feed. What happened?
I searched again and found a great article on XML.com that outlines three approaches to working around the originating domain limitation in the XMLHttpRequest object.
- Write a proxy that runs on the originating domain that can be invoked by XMLHttpRequest (requires the ability to run scripts on the originating domain)
- Use Apache mod_proxy (requires access to the Apache httpd.conf file)
Since I already had an AJAX RSS reader and I could only access a limited set of PHP functions on my host, I chose to write a proxy that can be invoked by the XMLHttpRequest object. A few more minutes, thanks to the sample code in the article, and my del.icio.us proxy was working!
Moving forward, rather than focusing on just one area of technology management, I have decided to write about whatever I am working on at the time. My goal is to provide myself with a narrative of projects, solutions, situations, and interesting areas of research that I encounter along my travels.
If anyone other than me reads this stuff, please let me know what you think!