The amazing adventures of Doug Hughes

Starting at about 8am today, some members of the Alagad team started receiving, shall we say, subtle reminders to blog. You see, I’m trying to institute a new policy here to have everyone blog at least once a week, with me blogging twice a week. The problem is, as much we we all know it’s good for us (and for you), it’s easy to let blogging take second stage to paying work.

To encourage people to blog, I recently assigned a blog-day to everyone here. I’m supposed to blog Monday and Thursday. Jeff, Layne, Scott and Jared are assigned to Monday, Tuesday, Wednesday and Thursday, respectively. To make sure people remember to blog I made a habit of sending harassing IMs to people encouraging them to blog. This was more effective than doing nothing, but had one slight downfall: I had to remember to remind people.

Last night I was thinking about this problem and though, what the heck, I’ll automate it! As it were, we already have the infrastructure in place to facilitate 90% of this process. We have a project management system we built that already makes use of the XMPP Event Gateway that ships with ColdFusion. We used the gateway to create an IM bot which many of us use to track time against tasks on our various projects. (This time tracking information feeds into our project management system which ultimately feeds QuickBooks and drives our invoicing and reporting. Let me know if you want to hear more about this process and maybe I’ll blog on that as well.)

So, we already had a system to send IM messages to Alagad employees. We also have the blog, which conveniently has an RSS feed that includes the email address for the person who wrote the entry. All I had to do was create a service which first pulled the RSS feed and parsed it to find out the last time any given person blogged.

Next, I had to know what day a user was assigned to blog. For that, I created a new table in my database called UserBlogDay, and stored a userId and the user’s blog-day. By referencing this object in my Reactor config, I was able to use Model-Glue scaffolding to generate the user interface which I then tweaked to perfection.

By cross referencing what day a person was supposed to blog and the last time they blogged I can figure out if the user is overdue to blog. In the case that they are due to blog I then use the same event gateway used by the time tracker IM bot to send them a random nagging IM message.

I set up a scheduled task, which is actually created by the reminder service when it’s instantiated, to run the reminder process every hour. But, I didn’t want to be rude and overbearing. (Well, not that overbearing!) I decided to only have this remind people to blog between 7am and 6pm. The nice thing is, because of the time tracker, I’m already tracking each employee’s time zone and I could reuse functionality to get the time in that user’s locale and only remind them when it’s reasonable.

The whole thing is wired together using ColdSpring. In fact, the messages that can be sent are configured via ColdSpring, though perhaps I should put them into a database table and scaffold an interface to create new nags.

Finally, the entire Project Management system, now complete with a blog-reminder nagging system, is deployed by Ant. We use my CFAnt project to check the application out from subversion, configure it for production, create the data source, enable trusted cache, regenerate all Reactor objects, and more. The whole modification to the project management system only took about 3 or 4 hours to implement and roll out! So, this is a little slice of how we do things at Alagad. It gives you a little peak into our culture as well as how we work! Today, I personally received about 9 reminders to blog! So fine, here’s my blog entry!

Comments on: "A Little Slice of Alagad Life" (16)

  1. Ha! I think that’s an excellent policy. 🙂 I’ve been making a point of blogging more myself recently. Though I should probably stop harassing Scott when he blogs. This is the 2nd time, he’s probably getting annoyed. 😛


  2. Eric Knipp said:

    Its tough to find the time to blog when the work is flowing in. Glad to hear you have those kinds of problems even in a rough economy.


  3. I wouldn’t mind hearing about your CF to Quickbooks integration. I was going to work on implementing a simple CF/QB interface to transfer billing information from a CF app to QB, but ran into problems with the self-signed SSL requirement of the QB Web Connector. I haven’t had a chance to touch it since.

    There is a 3rd party company that uses QB and made a free open source tool that should help communicate between QB WC and CF, are you using that?



  4. Doug Hughes said:

    @Ryan – I’ll try to keep that in mind for a later blog entry. Maybe, time permitting, at some point in the future I’ll work on a releasable package for QuickBooks integration for ColdFusion.

    Frankly, there were a number of challenging obstacles to implementing QuickBooks integration. SSL wasn’t the biggest challenge for me, though it was a challenge. What was most difficult for me was getting the required web service to work. Unfortunately, the CFC web services wouldn’t work. It’s been a while since I did the integration, but my recollection was, essentially, that the WSDL generated by ColdFusion (and the structure of what handles the http request) didn’t align correctly with what the QuickBooks web connector expected.

    To work around this I had to create my own system which parsed the SOAP request and manually built the response. Fun stuff! (Not really.)

    In the end my current implementation is not releasable. It’s far too specific to our PM application.


  5. Joe Rinehart said:

    Interesting use of XMPP. I have a habit of getting more and more entrenched in _not_ doing something when continually reminded – any accounting for the human factors like that?


  6. Doug Hughes said:

    @Joe – It’s a risk, that’s for sure. Some people here, not naming names, have declared my quest to get them to blog “annoying”. And it is. Who wants to be pestered over and over again? On the other hand, if I didn’t pester people they’d never blog.

    So, to actually answer your question, not really. The closest I get is only reminding people while they’re working and only once an hour. I may drop it down to ever two hours if it turns out to be painfully obnoxious.


  7. Stephen Moretti said:

    Will you put a reminder in your system, so I get a prompt to write up my Friday round-up? 😉


  8. Doug Hughes said:

    @Stephen – If you were working with us, maybe I would!


  9. todd sharp said:

    I’ve done some QuickBooks/CF integration work – and as Doug said it really sucks (well not in so many words). There is an open source project that helps with the integration (though I’d really like to clean it up a bit since I’m not thrilled with the code in it) but the true PITA is trying to decipher the cryptic non-descript error messages that start flying everytime you try to sync with QuickBooks Web Connector. Plus the API documentation was a bit wonky if I remember right, and the connector is super stingy with the XML format.

    Fun stuff… 😐


  10. Mike Kelp said:

    While this is becoming a separate conversation quickly…

    There’s definitely some room for a solid QuickBooks integration project. I have done some work with the SDK myself and with the latest release I’ve been able to create a CFC based service to handle everything. It was a pain to get right, but far better than dealing with the SOAP requests myself.

    So far I’ve implemented every part of the complete web connector process and can run multiple tasks and such without error. I have a lot more work to do as far as writing all the different actions I want to do though as the XML all the requests have so many properties and are not documented incredibly well as to the format they require. So far I’ve mainly done hello world style requests that don’t insert a lot of useful information into QuickBooks.

    I’d consider joining a project or setting one up if anyone is interested?


  11. I wish my boss told me I had to Blog, I would be turning in 10 a week if that were the case.


  12. As a boss, I tried to tell my employees to blog once a month… but the posts seemed more obligatory rather than from the heart. Now it’s an optional thing – but I try and give them good credit when they do blog.


  13. todd sharp said:

    The extent of my work has been twofold Mike:

    1. Downloading sales receipts from eCommerce site into QB.

    2. Syncing inventory stock levels between SQL and QB.

    Beyond that I’ve not done too much, but I wonder how much interest there really is. I’ve done this for 2 clients, but it seems more like a niche service then a solid demand.

    Sorry to hijack the thread here Doug, but if others chime in there it may be worth pursuing a community project…


  14. Doug Hughes said:

    @Andrew – We keep really busy here. We strive for 95% or more billablity and, at the moment, that’s fairly easy to reach. So, even though some of the guys like Scott and Jared really like to blog, they might never choose to do it because of the pressure from normal work. So, I’m sort of enforcing the notion of taking time to do something enjoyable. But, then again, others aren’t so in that that! We’ll see how it works out.

    @Todd – No problem and no hijacking. I’m hiring a part time developer for a number of tasks. I’ll probably put a task of creating a really nice interface to quickbooks on their plate as well. Though, if it’s really good I might actually sell it rather than give it away. But, we’ll cross that bridge if or when we get there.


  15. @Doug – A QB facade sounds like a fun challenge. 🙂


  16. It’s kinda hard to blog when you feel like you don’t really have anything to say. Sometimes it’s better to think through what you’re going to blog about before actually putting it up. Of course, one then runs into the situation that you’ve just described. Catch-22, to be sure.


Comments are closed.

Tag Cloud

%d bloggers like this: