Forgotten Requirements
Recently, I had the opportunity to look at a set of user stories on an upcoming project and apply a high level estimate to each. These estimates were going to provide a starting point for determining project timeline and schedule. Every time I'm presented with a request for estimation, I shiver a little because I'm so bad at it. As I understand it, I'm not alone in this weakness. I have found, however, that the more requirements that can be defined and the more detail that can be described for each, the more accurate a timeline can be established.
Generic Interfaces Arabian Magic
[flash bang!] Say words like generics, enums, or interfaces, and you've immediately transported to the realm of conjured whirlwind sandstorms and curved-sword-weilding assasins. Well, I guess we're going there, because I think this is pretty cool. Plus, undocumented, or at least un-reiterated to myself, and later I'll look at it and think it's just pretty complicated. Prepare for angle brackets in the amount of parens in lisp.
Quick Bookmarks
For someone who spends mucho time daily on the interwebs, being able to jump around quickly is important -- both for focused productivity and ADD-inducing web surfing. Bookmarks have long facilitated savings your place on the web for a future return, but there are a few enhancements to the regular vanilla bookmarks that have greatly added to my bookmark delight: 1) Bookmarks in the cloud and 2) Keywords/custom search engines.
Ideal Tech Conferences
It seems that in the IT, there are many, many conferences offered every year that people are invited to attend in order to glean something of use. Which are the good? Which are the bad? There are a few points that may make a differentiation.
Xquery Optimization Tips
My first xquery experience has been on the MarkLogic platform. The project that we just released was written entirely in xquery and on that platform. As our site continues to gains popularity, we continue to realize how little about xquery we knew or know. Sometimes and in some places, the site is just really not that performant. "But I thought MarkLogic/xquery is super-scalable," some exclaim indignantly. If you do it right, an Oracle relational database can be made to scale. Done wrong, a MarkLogic database can be made to not scale at all. There's a lot to be said about knowledge of the platform, the language, and how to wrestle it to do your bidding. Here are a few optimization ditties that I've collected as of late that might help in your future xquery dev.
Jquery Plugin: safesubmit
Jquery gives a great, easy-to-use mechanism for extending its API and creating your own plugins. For stuff that looks like it could be useful generally, you should really try to put it into a nice little plugin package. For submit buttons, there is a general thought that they shouldn't be clicked twice (especially for functions such as financial transactions), so I created a plugin that fits an app that I have been working on recently, where there are many, many submit buttons, saving very granual pieces of content through ajax requests.
Jquery Plugin: readmore
Jquery plugins are a joy to use, and they are surprisingly easy to write. Everyone that writes lots of Jquery code should seek to take potentially-resuable functionalities of code and put them into a nice, compact plugin. In the app I've been working on, we have a lot of user-generated content that we don't limit the length on, so it can grow very large. To combat this, there is the UI pattern on the site that there is a "read more" link available to show the remaining text for the long-winded texts, while just showing a snippet otherwise. This exists everywhere, for lots of different content; hence, the "readmore" plugin was born.
PNG Gamma Correction Woes
PNG was a file format that, among the original reasons for conception, was created to show the same color over different computers, with different OS's, and browsers. To this end, gamma, or lighting, correction was added. While solving the original problem, a new, bigger, badder problem was created. Now, there was the potential for color inconsistencies on the SAME web page. For example, the color of certain items rendered on the page with the same hex value will display differently than PNGs rendered on the page painted with the same hex value.
Add/Remove Classes with Raw Javascript
Jquery and other sweeto js frameworks have some awesomeness to help you change the css classes of various elements on the page with ease and grace. They have some very convenient functions to add and remove classes. These are uber-useful and highly recommended for saving you precious time and jiggawatts, but if you don't have jquery available to you, sometimes you may want to do this in raw javascript.
Caching Ajax Requests in IE
Have you ever had a problem with ajax requests caching in Internet Explorer. I have, and recently I came across a nicer solution than I have traditionally used. In the past, I have used a unique parameter on the url to keep IE from caching previous requests to the same url, like so:
Django on Jython Intro
Here is a "new and shiney" presentation for running Django on Jython. It's based on my experiences with the DjangoJython tutorial.
As is discussed in the slide deck, and hence the subtitle of the presentation, much could be helped by more careful reading of documentation. Well, moments ago, I decided that I hadn't checked out django-jython 1.1. Well.... turns out many more problems could have been helped by using this later version. Sweet!
Synergy on Ubuntu
Synergy is a fantastic project that allows you to share a single set of input devices (keyboard and mouse) over multiple machines. Clipboard sharing is also supported. It's remarkably easy to set up, and it works across multiple platforms.
Change hostname on Ubuntu
When you setup your computer at the time of your initial Ubuntu installation, you assign your computer a hostname. In my case, I gave it a hostname and then later wanted to change it to something else. This is accomplished in two easy steps.
Install Java 5 on Karmic Koala
In Ubuntu 9.10, they removed Java 5 from the update repositories for Karmic because Java 5 was end of lifed in Oct. 09. This has made it more cumbersome for the Java 5 user on Karmic. Luckily, cumbersome is still pretty easy.
Access JS object fields
Sometimes it is useful to be able to iterate through the fields in a javascript object and use the values kept therein for something spectacular. I've found this to be the case for POJSOs (+S = 'Script') that I pass down to the client with new-found data from the backend.
Unexpected call to method or property access
In a recent admin tool I was creating, I was using SOUIT of Javascript... apparently more than I knew how to write well. Eventually, it all worked wonderfully -- that is, until someone tried to use it in a lesser browser -- Internet Explorer. The error was thus:
Engineering for Engineering's Sake
Software engineers are sometimes very, very prone to making things more complex than they need to be. In the engineer's mind, "complex" can be replaced with the word "cool" (or some other amazing adjective). Such a mind has gotten lost, has lost sight of the fact that there exists a most-efficient path from the problem to the solution. Such a predicament is not uncommon -- probably because of something physically wrong in the engineer's mind; And because a certain amount of tinkering is usually required to begin work toward a solution. But, when one becomes enveloped in the problem and forgets about the priority of actually solving the problem, large, unrecognizable apparatus are concocted.
Django Intro Presentation
At Sort 2009, a technical conference at the LDS Church, I gave a presentation on my favorite all-in-one web framework, Django. It's a great tool, and here's a look at the slides produced to accompany my presentation. Also, checkout bitbucket for the source code for the demo project.
Parameterized States in Webflow
My first experience with Spring Webflow is on a project that uses Webflow 1.0.5. So far, I'm impressed. Apparently, Webflow 2 offers even more incredible awesomeness, but thusfar I would put my webflow experience over that of my previous couple years in Seam. (I was just waiting for a chance to abandon that library anyway.)
Find network hosts with nmap
I had some fun this morning when the headless box that I'm ssh'ing into to do test app runs randomly changed IP address. My goal was to find it on the network from my local box. To my rescue: a cool tool called nmap.