Apr 24

There was a recent discussion on our CF User Group list that regarding a general purpose form generation tool that could store form definitions in XML and be used to abstract the form logic and circumvent the tedious process of writing forms. I for one HATE writing forms- it’s just one step above cleaning the bathroom on my list of “mindless, repetitive yet necessary annoyances.” So basically I had this same idea a couple years ago to distill the logic of forms down to the critical portions that change from instance to instance and then write a very simple message format and engine for storing form definitions in XML and then rendering them to a browser. I called this project Instaform and from the recent renewed interest in this technique on the AZCFUG list, I have dug up the code and made it freely available here.

A couple things:
Just for background, the birth of this concept for me came after I had played around with a tool that was used to develop a Macromedia developer survey I had taken. The tool InfoPoll.com’s windows client for creating surveys that could be hosted on their site. At the time I was sick of writing forms and facing the need to make a ton of forms for various projects I had while working for Act.com. I was also reading a book on design patterns. that gave me this whole idea for “encapsulating the variation” in systems. When I used the Infopoll client, it made me realize that form elements are really just different variations of the same class and that surveys are composed of questions and common form object blocks which consist of these elements. Adding new elements was just a matter of writing the necessary “handlers” for displaying them. The result was some tinkering that lead to Instaform. I have since seen a better implementation of the same idea called Facile Forms which is really worth checking out if you’re serious about this stuff. Facile Forms is an add-on component to the php-based Mambo framework (i know i know, not cf…) and it achieves the same thing as InstaForm plus some added advantages like:
-a nice GUI for administration
-extensible validation scripts
-automatic handling of the database logic for storing responses
-a slick mechanism for sharing and deploying forms via XML
-positioning information to place the form elements where you want
-support for multi-step “wizard” forms

Feel free to try out InstaForm – if it gives you an idea you can use, great. I made this same disclaimer on the azcfug list:
1. it was pre-cfmx when it was written and therefore did not make use of cfc’s and the cfxml tags since they did not yet exist. Instead it relied upon a tag from SiteObjects called “soxml” that was a wrapper for the MSXML com object that parses XML.
2. I haven’t actually tested it since 2002 so the code may need tweaking to work
3. I don’t see what harm could come from playing with it, but I suppose I need to make the standard “use at your own risk” disclaimer and I’m not responsible if something breaks.
What would be really cool is if someone would port the Facile Forms component to ColdFusion and sell it as a mini-app or customtag. Anything to eliminate the tedium of forms is money well-spent.

Tagged with:
Apr 17

You know how every once in awhile you’ll get asked a question that catches you completely off-guard because its simplicity demands a straightforward answer and yet none exists? I was meeting with the partners of a small company for a web project I’m doing the other day and one of the partners (who’s quite a bit older) asked me point-blank, “Sean- how do you know how to do all this stuff?” I considered for a moment launching into an explanation of RSS feeds and blogs, webinars, listservs, etc and then realized this is someone who doesn’t even use email, much less the more advanced communication channels of the internet. In the interest of not filling this guy’s head with a bunch of foreign technical jargon, I opted for the abridged explanation of “I’m self-taught.” But then I got to thinking that I have been asked the same question before by younger comp-sci majors who are moving into the field and I figured it warranted an attempt to break it all down and explain the guts of how we in the software industry learn what we know. This will be beneath other developers that happen to be reading this but here goes:

There’s a ton of ways to come at this explanation but I thought a useful perspective would be to break it down by communications channel (Of course there is no substitute for getting your hands dirty and actually playing with a technology yourself). Our attention is a limited resource that can only be divided amongst so many sources in a day. Given this limitation, how then is the best way to allocate our brain cycles in order to solve our complex problems, keep up with the latest technologies and methodologies and at the same time remain sane, human and happy? Having spent over seven years in the web app development industry I’ve knitted together a system which works well for me and incorporates about eight different mediums. Broken down by order of time allotment they are:

  • Email – Undoubtedly the majority of my time is spent reading and writing emails. It may be unthinkable to some but I conduct all my email through a web interface using Gmail for work and Yahoo for personal email. Gmail is great for listservs and newsletters because of Google’s options for applying labels, filtering messages and threading conversations. Email encompases all list exchanges, newsletters and one-to-one personal communications with other developers.
  • Web – Web browsing accounts for the next chunk of knowledge input and consists generally of highly-specific google searches for various error codes and phrases that usually lead to someone’s forum post on how they dealt with the exact same problem. I also use web to browse vendor’s sites and read developer zone tutorials and announcements they publish on their products. When I come across a helpful tutorial or refernce page I’ll bookmark it and come back to it later. There are a couple news sites I read regularly including Google News, Wired, Slasdot and Boing Boing. Del.icio.us is a recent gem I’ve found that uses social bookmarking to show what other people find useful. Technorati is supposedly the next greatest thing for unearthing information found in blogs but I haven’t caught that bug yet.
  • RSS – “Really Simple Syndication” or what Firefox calls “Live Bookmarks” is huge part of my daily reading and allows me to monitor the ramblings of people I feel are wise and worth listening to. Rather than checking a bunch of sites regularly, I can subscribe to certain authors and the new content comes to me. I have a two-tier system to “triage” the various blog postings that I follow. I use Bloglines to aggregate a bunch of feeds and skim through the material for key stories of relevance. If a particular feed on bloglines has consistently high-quality information and the user comments are insightful and complement the authors post, I promote the feed to my Thunderbird RSS reader. Unlike Bloglines, Thunderbird doesn’t strip the formatting and it leaves the user comments inline with the post.
  • Print – As high-tech as this world gets there will always be a place for paper and ink publications. Even in the face of downloadable ebooks and the promise of high-res ePaper, there is simply no substitute for having a reference book or a glossy magazine which you can leaf through, dog ear and pass along to friends. Finding the best books on a subject is usually a matter of asking around on a discussion list or reading Amazon reviews. I only subscribe to one magazine personally, though I read a couple others at my office like Law Office Computing and Law Technology News. Amazon recently added a concordance feature to their book reviews which could make an interesting way to thin-slice a book for its contents.
  • Podcasts – I was a skeptic of the podcasts at first thinking “I can read this faster than I can listen to someone else talk about it,” but things like tone of voice, personality and emphasis just do not come through in an article. Think of podcasts like syndicated talk radio that you can subscribe to. I’m a big believer in cross-training and variety and I have found that listening to a few podcasts from ITConversations is a great way to stay ontop of new trends, get to know the voices in the industry and hear the authors that I read actually talking about their own books. This is the relative newborn for me having only discovered podcasts in the last couple months but I am appreciative of this channel because it lets me attend virtually the conferences that I couldn’t otherwise.
  • Webinars – These are generally live product demos you get delivered via WebEx or Breeze. Think of it like someone giving you a presentation on a projector only it’s projected over the web to your computer and can incorporate interactivity like chat and desktop sharing. Comparitively I spend only a sliver of my total time in webinars (maybe one or two a month) but I have gained massive insight from a few webinars so I wanted to make sure they were included in this list.
  • Conferences, Usergroups and Instructor-led Training – Much like paper publications, face-to-face interaction will always have its place in learning in the IT industry. Anyone who neglects the value of a dialogue with a teacher in person or shooting the shit with other developers over a beer is sadly deficient in an important element of this field. Conferences and Training can be expensive investments but usually have unforseen dividends that come in the form of personal connections that are established and continue well after the event. Usergroups are free and a great place to get a monthly barometer of what other fellow developers are doing and to launch into peripheral discussions about xboxes and other topics that are important to developers.

So that’s the “quilt of info channels” that keeps me warm in this industry. Ultimately, it’s playing with blocks first-hand and discovering through trial and error how things work that matters most. Jean Piaget’s model of assimilation and accomodation resonates for me as being a very simple yet helpful way to understand the way we understand. What did I forget? How do you learn what you know how to do?

Apr 12

Here’s a random smattering of cool tools I’ve recently run across. In no particular order…

del.icio.us is a social bookmarking tool that let’s people collectively share their bookmarks. It’s neat because it color codes by popularity and allows for categorization of the links through tagging so you can scroll through and discover the gems that everyone else knew about by sheer popularity of the link. I was using it today and it helped me discover…

Craig’s List meets Google Maps – someone built an interface to craig’s list postings by incorporating the google maps API. By grafting two great services together, you get a scatterplot of the locations of housing listings in an easy-to-navigate format. beautiful.

ZoomInfo – I’m not exactly sure how this service does it’s thing but it works like a search engine that will compile a dossier on anyone realtime by seemingly stitching together various search results and company names. It was surpisingly accurate with my bio though I’m not sure how it melds together the correct info. Seems like it could be useful for getting a background on a key higher-up before an important first-meeting.

DropLoad – that’s what I almost did when I saw this simple yet ingenious little app. It allows you to move large files that are too big for email to friends using a simple one step process of uploading. It generates a notification with instructions for the person on how to pickup their files and will notify you when they’ve downloaded them. Free service, simple and useful instead of doing the ftp dance for moving big files that aren’t super-sensitive.

Billboard Tour Finder – you can search a database of tours to see what bands are coming to town and where your favorite bands are currently touring. It’s not perfect and doesn’t have every band but it’s pretty neat and has quite a few. I can’t figure out why nobody has created an app that will let you register your favorite groups and notify you via email when they come to town. Does such a thing exist?

IT Conversations – I’ve listened to about 30 various interviews and speeches now and they’re great. It’s for us proletariat class folks that can’t afford to go to all the snazzy IT conferences. You can still hear the keynotes and audience questions and best of all, do it on your own schedule and be able to replay the talks that are chocked full of good info. It has great organization of content and has a personal queueing system so you can tag the talks that seem interesting and have it remember what you’ve already listened to. It’s not just IT-centric programming either, there are interesting biogenetic and psychology topics- the kind of stuff that Wired magazine covers. Definitely makes my 22mi commute a little more tolerable in the morning.

iPodder – despite its name this app is not directly related to the iPod but it facilitates podcasting which is like RSS for MP3’s. Basically a content provider can syndicate their talkshow or other audio content by exposing a special RSS feed enabled with enclosures. iPodder is a client you install that will poll these sites for new audio content and download the MP3’s when your not looking. Combine it with the sites like the one above and you can have ala carte radio programming you design!

RSSauction – you can save a set of search parameters for an item you’re looking for on ebay and have it deliver results to you via RSS. This is a beautiful use of this technology and it seems strange to me that ebay does not offer this feature itself. I’m using it now to hunt down my next laptop and I can see this being a very useful way to keep track of numerous searches for gear on ebay.

These are my picks for the most useful tools I’ve run across lately. The consistent theme they all share is simplicity, focused scope and elegance in design. If you have other gems worth sharing, post them here.

Apr 03

Here are two unrelated yet equally-cool freeware tools I recently discovered:

Xenu Link Sleuth is a small windows app that will spider your site and report any broken links or graphics it finds. Back in the day I used an online tool for this that would do the same thing called websitegarage.com. It was later acquired by Microsoft bCentral and now appears to be out of business. This little app is great at what it does though and it can even connect to your site via ftp and report orphaned files based on what it was able to spider. I just used it to check my company’s corporate site and it found a few links that were bad as well as one directory that had a permissions problem.

Sequoia View is freeware windows app developed by the CS department of some university in the Netherlands. I needed to do a little spring cleaning on my laptop to free up some hard drive space. When I used to have a Mac there was actually a freeware app called “Spring Cleaning” that was great for giving you a visual overview of how your hard drive space was consumed. It would walk the contents of your drive recursively and produce a bar chart that filled the screen where the left-most column represented the space consumed by your top-level directories, then to the right it drilled further and further until you had as many columns as you had subdirectories on your computer. This worked but produced a report that was VERY difficult to interpret with thin slivers representing each directory. Sequoia View has an ingenious interface that uses what are called “squarified treemaps” or cusion maps (because their shading makes it look like a quilt of cusions knitted together) to represent the contents of your hard drive. It gives a complete visual snapshot of how space is allocated color-coding on filetype and allowing you to see exactly where the problem files are drill down to the directories right from the snapshot view to get rid of them. I found out I had an 800MB pagefile and an 800MB hiberfil.sys which both could be deleted plus a bunch of temp directories that were out of control. Two great little apps I wanted to pass along – nice!

preload preload preload