Recommended Fantasy & Science Fiction

This list will give some idea as to my inclinations towards Science Fiction & Fantasy. As you can see, I like Space Opera (actually I really, really like Space Opera) and world builders. Authors from the old school who simply loved to create everything and anything.


Google App Engine & django template include tag

If you are using the django template language include tag I stumbled across a small gotcha concerning development GAE (Google App Engine) versus production GAE. While developing within the development server I had inadvertently placed the files I was attempting to include in a directory labeled as a static_dir (inferring a static directory handler) within my app.yaml. While running on the development server the include tag functioned just fine even though the directory was noted as a static_dir. However, when I uploaded the application to appspot (production), the include tag ceased functioning. If you run into this, just make sure the directory you are including from is not listed as being a static directory. In other words, do not place files referenced with a django include tag in a directory declared as a static_dir in your app.yaml.


Running on Google App Engine

I have moved from my own little Apache Tomcat box to Google´s App Engine hosting/application framework. I wanted to check out what all the fuss was over, so I ported my site over to App Engine. This of course means Python and the Google included django template language. My site used a relational database to serve article content, so switching to Google´s data store was the biggest hassle, but since I have so little content...


Perspective on Web Development Frameworks

There is nothing wrong with idea of web frameworks (ROR, Django, Zope, struts, ASP.NET, etc.) in the enterprise. On the surface, use of a framework seems like a good decision even. I would like to make another suggestion to my fellow enterprise developers, do not use that framework, at least not yet, and here are my reasons.

1. You will become dependent on the framework and less likely to move to new languages/tools.

"But..., but, but the framework does so much for me. I cannot, will not, leave without her." Run, fast. If your framework has a brain, she will take out a restraining order on you. Seriously, you have begun to think in terms of how fast, and only how fast you can finish a project. This is dangerous. By thinking in these terms and allowing the framework to handle all the complexities of web development plumbing and abstraction, we have unwittingly stopped thinking of new and exciting ways to solve problems. I know, I know, we are probably going to reinvent an old way to solve our problems, but that is not the point. The relevant point is that we are exercising our brain and developing our own thoughts. Remember a quote of Einstein´s that I believe wholly applicable to software developers who only use frameworks.

Any man who reads too much and uses his own brain too little falls into lazy habits of thinking - Einstein


2. Do not worry about your next job interview because you do not know framework "X".

I speak from experience as I conduct the technical job interviews for the company I work for. I will not ask you questions about a framework. I repeat; I will not ask you questions about a framework. We may discuss a framework, but this would be more a case where I want to see if you are thinking critically concerning a framework´s design decisions. Why in Hades would I ask you about frameworks? I want to know what you know about file processing, data structures, language, design, testing, and most importantly, are you capable of developing your own thoughts and thinking critically on these topics. We do not even have to agree, just so long as you are willing to think and present your arguments coherently and professionally.

3. Every web framework that has ever been, and ever will be, is incessantly described as the easiest framework to learn that has ever come into existence.

Guess what, most are pretty easy to learn. Therefore if you know and understand data structures, file processing, regular expressions, testing, design, the language involved and the language´s associated web APIs then I am not worried about your ability to learn framework "X".

4. In two to five years that shiny and magical framework will turn ugly and undesirable.

If you work in enterprise, it is not likely that you were able to use ROR after the first alpha release, indeed, you likely did not even smell ROR until around 2006 or even last year. Therefore, by the time you and your cohorts are ready to make the leap, the leap has become a step and the step after is the, let us hope gentle, downward slope. For example, I believe the ROR hype is now in full decline and new frameworks are filling the voices of the horde in the important nerd news aggregator sites such as reddit.

5. The framework´s code base and the project´s code base are now inseparable.

I would rather have my project tied to a language and web server, than language, web server, and framework. When is it ever a good idea to include new dependencies into a project? And you, the developer of a web framework, want me to stake my livelihood on what you proudly coded in a weekend, no thanks. I despise using even simple third party libraries of any kind, unless there is a very good reason. After deciding I do need a third party, I am going to first shop open source in the event there is a defect and the library developers are not cooperative in correcting the offending source. To sum this point: I can live with an Apache/mod_python , Java/Tomcat, or IIS/C# dependency, but please do not add Django, Struts, or the infamous "runat=server" please.


December 2007: Review of developer tools in 2007

First, for a simple straight up list of the development tools that I am using in 2007, just go to my about page.

I want to start with browser based development. Here we go.

What? Your not using the Venkman JavaScript Debugger? I know, you have to restart Firefox should you close the debugger and then wish to resume debugging, so quit closing the debugger. You can set breakpoints, evaluate variables, set watches, step through/over source code, and well, do what you do with most other debuggers. JavaScript development is hard without this, know what I’m saying?

JSEclipse is a simple, but functional JavaScript editor plugin for for the Eclipse IDE. JSEclipse provides syntax coloring, formatting, and code outlining via a tree view. Ok, you still think JavaScript development is painful, well it is, so keep reading.

The View Source Chart Firefox extension rocks. Why? Say your writing some code in JavaScript to generate HTML for display after the initial page rendering and you wish to view your dynamically generated changes. You cannot use the simple view source command because this shows what was rendered initially, enter View Source Chart. This Firefox extension allows you to view your HTML as it is now, not just on the initial rendering. Sweet. JavaScript is getting easier, but it is still kind of hard right. So we need something else, read on.

But you say, I have JavaScript code that I have written that is not UI dependent (business rules perhaps or XML parsing code) and I want to test/debug this code outside the browser. Enter the Rhino. Rhino is a Java implementation of the ECMA Script specification. It has a command line interface and a GUI. You can execute your JavaScript code within Rhino and print output to the console for simple debugging. Rhino can be a huge time saver when your code is not dependent upon graphical elements. JavaScript development is now like a day at the beach. Okay, okay, if the beach is infested with sharks that is, cause darn it, prototypal languages with functions as first class variables are just plain different for us Java/C# coders.

Alright, you have been writing JavaScript code for a while and achieved a certain level of competence. You know JavaScript does not have classes, you use namespaces, understand how to manipulate the DOM, perhaps have implemented a personal library or two of helper functions, and slapped an interface over JavaScripts AJAX mechanism. I know, I know, you are a do it your selfer, but resistance is futile. If you have to suppport multiple browsers and multiple browser versions in a real world production environment I do not see what choice you really have. You can either spend your time trying to figure out why your drop down pick list in IE 6, because users still cling to that old dog, is poking through your modal dialog box, or you can use a framework such as the Yahoo User Interface (YUI) library and worry about your business rules. The main advantage of YUI is the provided UI widgets and the strength of documentation. Lots of good examples and the API docs are the best that I have seen.

The next entry is not really a tool like the other items I have just mentioned, but this is just as important. It is the site of Douglas Crockford. Douglas provides scholarly explanations of many of the harder aspects of JavaScript, but in a manner that the regular programmer can understand. I particularly like his sections on inheritance. I must, for it seems I have to re-read these sections about every other month. That is it for javascript, up next is Java Development.

I think most of us are aware of the major IDE options available for Java. The two dominate entries are Eclipse and Net Beans. I chose Eclipse about three years ago. I felt at that time it was simply better suited to my way of thinking, intuitive if you well. The choice was still hard, but the clincher was due to the fact that I work in a Windows shop. I needed support for Visual Source Safe and there is an Eclipse plugin for this and there is not one for Net Beans. Eclipse has finally seen the light concerning releases and pushes Eclipse out in several different configurations. Each configuration has a different software bundle along for the ride. For many a year, the Eclipse web site could confuse the best of us, however I prefer not being confused.

A couple of plugins (I discussed JSEclipse earlier) are absolutely necessary if you are going to develop in Eclipse. First is the Visual Editor. If you do not do Swing development you can skip this. I have never used the Net Beans version and so cannot compare. However, prior to developing with Eclipse I used Borland's Jbuilder up to about version 8 (I think) and I can say emphatically that the Eclipse Visual Editor plugin is the better of the two. The code produced by the Eclipse Visual Editor is much cleaner and follows the getter/setter paradigm we are all familiar with in Java. Next up is the Tomcat Sysdeo plugin. This plugin enables debugging for web projects using Apache Tomcat (you can walk set breakpoints within your code that is contained within the WEB-INF/classes directory), enough said, web development sucks without a debugger. If you are an ASP.NET developer, this is synonymous with what happens if you set a break point in one of your code behind pages and hit the F5 key.

Nutch is a free open source web crawler. If you have a large volume of unstructured information to store I would highly recommend giving Nutch a try. In the past, if I needed to support searching text, the only option available to me was Oracle CLOBs or B-Files. With the right hardware the Oracle approach works fine and Oracle even has a web crawler called Ultra Search that up to 10gR2 was packaged with the database. However, from 11g forward, Ultra Search has been removed from the database install and is now a part of different software package which requires the purchase of another license. I ran a little, highly suspect, test with 1.1 million documents. The average document contained approximately one page of text. The 1.1 million documents are stored both in the database as CLOBs and also indexed by Nutch. The hardware used was a P4 Xeon machine with 4 gigabyte of RAM attached to a SAN utilizing 7200 RPM SATA disks (wish they were 15,000 RPM SCSI) . The CLOBs were stored on a RAID 5 partition. The queries were simple, consisting of two to five words. Nutch outperformed Oracle in this situation almost every time. The differences were small, but it did illustrate to me that another option was available that would perform at least as well.