Happenings and acts of geekery.
Today we launched the third major update to our event management system for alumni relations and university advancement offices. We're especially proud of this one. as it represents a huge leap forward in both functionality and usability over the previous release.
EMS3 is in production use right now and has received an overwhelmingly positive reception from our clients. We'll write more on the integration features at a later date - we view them as a major advantage over other systems currently on the market. Building a proper API is a challenge unto itself and we have found that our clients are eager to simplify data exchange whenever possible. We feel we have met that need with this release.
Modifying a reservation is easier than ever thanks to our consolidated user interface. Generate a PDF copy of an invoice. process payments and apply discounts to reservations all from one screen.
Creating an event is significantly faster now that we've pulled all activity information forward. Set a default price for an activity and specify activity options (dropdowns) all in one screen.
Changing event information in a popup window. We've included a nice DHTML date/time picker control that renders consistently across all browsers.
Modifying activity prices.
Reports have been streamlined - pull attendance lists. extracts for outside systems and nightly transaction reports for reconciliation purposes from an easy-to-understand screen.
We launched a new Farcry site this week!
All of the front end content is managed by Farcry. Once again. we were able to train the content editors in about 15 minutes and they've been happily tweaking and changing stuff ever since. The "News" item is a big help to them - using the categorization features of Farcry. they are able to target specific news articles to an individual class page. the home page. or dump it in the general pool of news items. It's working great...now if only we had more content! One more shout out to the guys at Daemon for building a simple. powerful CMS with GREAT reporting tools!!
The registration system (go ahead..take a few steps in to it) is a separate Mach-ii application with a friendly dose of cfAjax baked in for user-friendliness. There are simply too many events involved in reunion weekend to present just one big list (even broken down by day). so we decided to apply tags to the individual events. The tags are created to classify the event's nature as well as the reunion class(es) it applies to. Naturally. we default the selection of events to correspond to the class year(s) of the registrant and any guests.
The back end management is done through our intranet infrastructure (also all Mach-ii) using another hefty dose of cfAJAX. I might have mentioned our event management system before. but this is the third generation of that codebase and it supports more options than ever before - discounts (apparently nobody pays face value anymore). more flexible activity options (so everybody gets the right size t-shirt). and multiple payment options. We also bulked up the reporting interface quite a bit.
We're happy with it - the client is now hosting ALL of their reunion and event websites in-house. Our traditional sample Farcry site (the Young Alumni Reunion one) will move into this new reunion framework in time for a July launch as well. Training cost drops just about as close to zero as it can be! Score one for the programmers.
Charlie Arehart. who many of us know and love. put together a very useful post listing a bunch of proxy packages that help you debug web apps. primarily ones using ajax techniques.
I've used Firebug to weed out some particularly irritating bugs. demonstrate ajax security techniques AND to do performance enhancement on our web apps. Firebug was the one I used during my CFUNITED presentation last year on cfAjax simply because it's so clear and easy to use.
I gave my cfAjax presentation yesterday afternoon to a fairly full main ballroom. I was fairly nervous - this is some pretty cool stuff that is just gaining some serious momentum in the CF community.
I think I did "ok". but i'm looking forward to today's repeat session that should go a bit easier. flow a little nicer and leave the attendees somewhat more informed than when they arrived.
For those of you who were asking. I did post the updated presentation and the associated sample code files to our website (http://www.countermarch.com/go/cfunited) right after the preso was over. Farcry makes things so easy :-)
Thanks to all who have attended - I hope it was worth your time at the conference!
Matt and I just spent all day working on the one piece of our latest project we were both dreading: the middleware to port the old database over to the new one.
The old DB was an evolutionary system. Four years of adjustments. new features. and changes really had left the thing in baaaaad shape. Naturally. we did a "clean sheet" approach to the new DB but while it was being designed kept an eye towards data porting.
It took 8 hours. but we figured out what we had to do. ran numbers on the current database so we knew what to expect. then built out a simple component-based system for doing the data transfer. Since we're not going live on Monday. we needed to make sure our work today would be repeatable in two weeks when we do it again. All i can say is "yaaaay inheritance and method overriding".
26 different sports. each bastardizing different fields in the source database. It's kinda icky in there! The new structure is much more accomodating and that makes them happy. In turn. we're happy that they are happy. The data porting step is now all coded up and tested. so that'll just take an hour at most to run when we cut over. Such a relief.
Anyway...technically. here's a system overview of the whole project if you're interested:
In two weeks we'll be going live with RecruitWeb. It's (obviously) web based. SQL Server on the back end with ColdFusion 7 doing the heavy lifting. Mach-ii architecture and a front end that uses a hefty dose of Ajax (all piped through Mach. which I'll be showing at CFUNITED). The Ajax stuff all uses cfAjax for the time being. but we could just as easily swap that out too. Front end is all XHTML/CSS so it should be easily skinnable for the next client who wants to buy it and implement at their college or university.
By late June (hopefully also in time for CFUNITED) we should also have a Palm interface for the system working too. Coaches currently travel with stacks of paper and that's just not cool. They've all been provided with Treos. so now we just have to figure out how to get data to/from them.
This is the cool part: For the Palm client we'll be using AppForge to build a UI in C# and deploy on their Palm runtime. storing data in a Palm database. We'll use their Crossfire conduit to get the recruit data back to a PDB file on the local machine at sync time. When the user syncs up the Palm. we're going to fire off a Windows C# app that calls a set of secured web services. These requests go to our ColdFusion back end (crazy simple web services!) to push/pull recruit data to/from out of the main database. Naturally. security and data protection are vital (HIPPA. FERPA to name two reasons).
Since the whole thing is web service based. the coaches will have access to the synchronization tool from anywhere they have a laptop and a connection to the web. Once wireless service becomes commonplace (and accessible in packed gymnasiums and the middle of corn fields in Nebraska). we'll have a PDA-sized browser interface talking to the system too.
Contrast that with the Access front end to a SQL Server DB that they use now. and it's quite a step forward. It's been a fun project and I can't wait to show it off!
Had a little app that needed to be put together. It's essentially a survey that the student body will be accessing once they get back from Spring Break (*sigh*). See. there are about 420 "activities" that students can participate in at Lehigh. These groups are terrible at reporting their membership information. so we're going to try out self-reporting at the individual level.
Needless to say. the prizes for participating are pretty cool - I think there's a 60GB iPod up for grabs!
Anyway. long story short because it's pushing 3:30AM. putting a 400+ element select box on the page is just a terrible idea. The activities themselves are poorly classified (tell me why we had "undergraduate" and "student" categories in Banner?). so doing any easy breakdown is darn near impossible.
Not one to miss an opportunity to blend in some old techniques with new ones. I decided to throw Verity at the problem. Bam. 6 seconds to build the index. all searches are about 100ms. I took it up a notch and added a "tags" column to the activity table and kicked in a few extra key terms for most of the activities (so you could search for "music" and get back choir. band. etc.). Rebuilt the index and i'm still getting results back blisteringly fast. Last time I played with verity was cf5. so i'm impressed with not only the tool but the speed with which it works.
So how do we search this? Ajax! Wired up a single search field that sends a request via ajax to the back end. runs the
Many thanks to my colleague Matt for doing the serious grunt work on learning the intricacies of Ajax before I picked it up. He saved me a LOT of time with encoding/decoding issues and any cross-browser issues that would tend to arise. I now understand why getting this stuff working is cause for celebration - it's so damn cool to make these apps work in the browser!
It seems like every blogger goes through a phase where their posts slow down...then...unexplainedly........stop. Then about 2 months later. the "mea culpa" post - "been busy" "had a kid" "major project" "releasing soon" "index finger removed by rabid aardvark" - then everything gets back to normal.
We're working towards releasing our second major Ajax-enabled application. The due date (immovable!) is December 13. Matt is working his tail off on this and in the process has become quite the god of DOM manipulation and character encoding. Eeks...never really meant for it to get that bad. but i'll make it up to him once the "open" season was over.
I'm working on a mass email application. Dime a dozen functionality. but additional features that are client-specific. Since we're trying to deploy to a fully Mach-ii powered intranet. I decide that we should roll our own. Coding goes well for the most part; not everything is done (and i'm still picking at it as of this post) but i'm nice and busy.
December 13 comes and things are cool for a few days. but then we start hearing from the end users that there are things they don't understand and a few minor bugs that needed to be killed off. Also. the reporting engine needs some attention - CFDOCUMENT is devouring parts of the PDF. We fix the minor stuff quickly. sometimes within a half hour. and figure things should calm down considerably before we hit our self-prescribed "R&D period".
Yep. we were supposed to not be doing any deployments or actual client work for the last 2 weeks of the year. Ha! I'll know better in 2006 to not even attempt this one unless we deploy at Thanksgiving so the hubbub dies down sooner.
Due to certain users who shall remain nameless (though they all have nicknames now) not reading the very nicely illustrated and critically acclaimed user guide. we find ourselves answering the same email over and over again.
Christmas week comes. No meetings (horray!). Productivity on the other app skyrockets. Matt gets a little bit of time to start messing with Flex 2. as we have plans to start developing some stuff in the 2nd quarter of 2006. But not the full 2 weeks. and hardly without interruption.
I'm more than a little upset that my planning didn't allow for us to really dig in to Flex more. But we've got a lot of stuff on our plates right now. Blogging is important. so i'll be working towards getting back to my "every other day" pace starting now.
So i'm back. just like Jack Bauer. Enjoy!
Can't believe I forgot to post this...
I'll also be presenting on CFAJAX. Here's the session summary I sent to Michael and Liz:
We've all seen Ajax-powered applications built using Ruby on Rails and other non-CF tools. Have you wondered how to create them using ColdFusion? This presentation will show some basic examples using the latest CF-powered packages for doing so and also include the demonstration of a cfAjax-powered application. We'll also discuss security. usability and cross-browser compatibility concerns. Once we're done. you'll be able to look around at all the "Web 2.0" pundits and laugh at how simple it is to emulate their techniques using your favorite programming language: ColdFusion. "
Should be fun!
This presentation offers more background on the history of Ajax and some more (written) detail on considerations regarding the use of the pattern.
Ajax and the back button...not quite so simple! http://www.digitalmediaminute.com/article/1765/ajax-how-to-handle-bookmarks-and-back-buttons
Just cataloging them here for future reference!