The Harmonious Programmer - Covering a symphony of technical and sometimes off-topic subjects

Technical Debt: If You Can't Handle Change, It's Time To Change Careers

Change happens every moment. Right now things have changed just from the second before. This means all things in life are fleeting. Not changing is like trying to hold on to the present as it becomes the past. Why should we hold on to the past? We should not. Nobody has every succeeded at this and you should not think that you're special enough to think you will be the first.

Change is good. It should not have negative thoughts connected with it. Change will happen whether we like it or not.  We might as well learn something new so we can adapt to change in ways that do not cause us suffering.  The scariness of change can be counteracted with learning. Learning something will lessen any suffering that occurs from change.  In the terms of IT, you'll live a happier IT existence because you will not accumulate massive amounts of "technical debt" by not changing and therfore not learning.  Doing things in the "tried and true" methods don't always mean you're doing it right.

So take the plunge and make a nice down payment on the change that inevitably comes. Learn something new every day.  Or if you want a different explanation in clearer wording: How can you be in IT if you don't want to learn new stuff? If you don't want to learn, you're in the wrong business.

Filed under  //   Philosophy   Social Commentary   Software Development  

Comments [0]

Loading mentions Retweet

CFML Function - createDatetimeFromHttpTimeString()

Working with HTTP time strings should be easier to CFML / ColdFusion,
but there is no built-in function that will create a CFML date/time from
a UTC HTTP time string. So here is the UDF that can help you work with
HTTP time string in native CFML date/time functions. I didn't check
cflib.org first, but I really couldn't check it out of professional
courtesy because I was writing this function for open source project and
I didn't want to deal with attribution / license stuff (yes, I'm lazy).



<cffunction name="createDatetimeFromHttpTimeString" access="public" returntype="date" output="false"
    hint="Creates an UTC datetime from an HTTP time string.">
    <cfargument name="httpTimeString" type="string" required="true"
        hint="An HTTP time string in the format of '11 Aug 2010 17:58:48 GMT'." />

    <cfset var rawArray = ListToArray(ListLast(arguments.httpTimeString, ","), " ") />
    <cfset var rawTimePart = ListToArray(rawArray[4], ":") />
    
    <cfreturn CreateDatetime(rawArray[3], DateFormat("#rawArray[2]#/1/2000", "m"), rawArray[1], rawTimePart[1], rawTimePart[2], rawTimePart[3]) />
</cffunction>



Enjoy!

Filed under  //   CFML   Open Source   Sharing  

Comments [2]

Loading mentions Retweet

FuseboxFramework.com Domains Are Going Away Soon...

Where did you get those URLs? The fuseboxframework.com domains are going
away soon (because no one in the Fusebox community was interested in
taking them on - and they expire in two weeks).
via groups.google.com (a comment by Sean Corfield)

This is in reference the domain being used by the what appears to be the "defunct" FuseNG project that forked from the Fusebox project. While these aren't the main fusebox.org domains, this prompted me to look at the status of the main Fusebox project.

I was surprised to learn that the last stable release for Fusebox was in March 2008 (version 5.5.1). Has it really been that long? It will be 2.5 years ago in just about a month or so without a release is stunning. Time flies.  Also, I quickly checked the Fusebox Trac site. Only one new ticket other than spam tickets has been filed or commented on in the past 6 months and that one ticket is just a question on syntax (it should have been sent to a list).  What is the state of Fusebox these days? Is TeraTech really "driving Fusebox forward and you can expect to see major improvements to the web site and the documentation in due course"? I don't see evidence of it on the site.

What really saddens me is the state of the CFML community. Have people not learned to pitch in and help their open source projects? Clearly not because there is still the glut of new one-man projects that never leave the ground or barely hover. CFML community members need to band to together instead of re-inventing the wheel. They need to learn to contribute (which I'd say that 99.9% of them do not) and realize that there is only a handful of people contributing to their open source project of choice. You don't have to pay for software with money; you can pay with your time, talent and expertise. Contributing does not always mean code but help on lists, documentation, sample applications, etc. There are so many things to do on open source project other than the next generation of code.

This is a call to arms! If you use open source, donate some time back to it or you might sadly find yourself with a defunct project and no maintainer there to help you. The great news is you can save yourself by contributing your time now. I urge all CFMLers to donate just 30 minutes a week to ONE project of your choice (if you don't know what to do, contact the maintainers -- I'm sure they have a laundry list of things to do). Just 2 hours a month would change the state of affairs in the CFML community and propel our language forward.

Filed under  //   CFML   Help   Open Source  

Comments [23]

Loading mentions Retweet

CounterMarch Systems Blog: Mach-II is (still) awesome

Mach-II rocks. It is one of the more "mature" surviving ColdFusion application frameworks, and as such doesn't get nearly the amount of buzz that the new (interesting, different, creative, awesome-in-their-own-way) frameworks get. If you're looking at frameworks, I encourage you to take a look at the amazingly capable Mach-II - we've had fantastic success with it!

Things I really, really like about Mach-II:

Backwards compatibility

Take an old (Mach-II 1.1 app, circa 2006) and update the framework to 1.8 (released 2009). Replace the application.cfm file with application.cfc, comment out everything in index.cfm and *boom*...you're done. I can't really assess how challenging it is for the team to maintain backwards compatibility, but I sure do appreciate how simple it is to upgrade. Instant feature add with zero headaches.

Coldspring integration

<include file="./mach-ii_coldspringProperty.xml" />

and in your listeners:

<cfcomponent name="mpListener" extends="MachII.framework.Listener"

depends="howConfigManager,mpManager,reportManager,notificationManager">

I don't think it gets much easier than that. Instant Coldspring integration for dependency injection (and more), radically simplifying the configuration of all of my listener and model cfcs. Now we've got all the power of Coldspring cleanly available to our Mach-II application.

Faster Fixes

Knowing where to find things is one of the hallmarks of any good framework. Some do it by convention, some by configuration. Mach-II falls into the latter camp but that's perfectly fine by me. Getting back into the mental model of an application months (or years) after deployment is a challenge but by simply cracking open mach-ii.xml I can see what happens where within seconds and bend it to my will. I love this.

Modularity

This wasn't in the framework back in the 1.0 and 1.1 days (when we created some mammoth apps), but by 1.5 (which came out in 2008) the ability to break up large Mach-II applications into separate modules was baked in and oh-so-handy. It's two years later and we've been able to make the easy changes to break those older apps into a collection of modularized sub-apps for much easier maintenance. Perfect example is an extranet: lots of only slightly related apps put under one common umbrella sharing security or UI components. This is easy to implement and support in a well-designed Mach-II application. All of our more recent apps make use of this feature.

The Team

The people who created and have since improved and evolved Mach-II are some of the smartest folks who are or have been involved in the ColdFusion community. Look at this list. Not only have they created something awesome, but they're incredibly responsive on the wiki, development Google group, and framework users Google group. They use this framework at their day jobs so you know that each release has been painstakingly designed, implemented, tested, re-tested, piloted and then released. Plus, they're open to new ideas (even if you personally have no idea how to make them happen!). Code is great, but the people are the best.

The View Loader

This is where some of those "convention-based" concepts have crept in to Mach-II much to the benefit of the users. Back in the "bad old days" your mach-ii.xml file would contain a block that looked sorta like this, except far longer:

<page-views>
      <page-view name="showWelcome"       page="views/showWelcome.cfm" />
      <page-view name="showHome"       page="views/home.cfm" />
      <page-view name="baseTemplate"       page="views/baseTemplate2010.cfm" />
      <page-view name="blankTemplate"    page="views/blankTemplate.cfm" />
      <page-view name="welcomeLanding"    page="views/welcome_landing.cfm" />
      <page-view name="showSendPassword"    page="views/showSendPassword.cfm" />
      <page-view name="showAppHelp"       page="views/showAppHelp.cfm" />
   (and so on)

Each page would have a page-view defined. Someone called shenanigans on it and now we have the PatternViewLoader to replace ALL of it!

<page-views>
   <!-- This would load all views with the pattern of "/views/**/*.cfm" which is the most basic and common pattern -->
<view-loader type="MachII.framework.viewLoaders.PatternViewLoader" />
</page-views>

So, so simple. Love this line of the config file more than any other.

Better apps, faster.

Take Mach-II off the shelf and use it as your "glue." Add Coldspring to manage your model. Use ColdFusion 9's new Hibernate ORM capabilities to cut the lines of code in your model by a huge factor. Redirect some of the saved time into building a better UI using jQuery, improving your cross-browser capabilities with clean CSS and making your client happier by communicating more frequently. Result: a better app, designed to be maintainable and much more in line with your client's spoken and unspoken expectations. How could any craftsman not feel good about that? Mach-II is a key component to that successful formula for us.

Try Mach-II. Need help? Talk to the team on the list. Build great things.

This exactly what Team Mach-II likes to hear. Thanks for the shout out Steve!

Comments [0]

Loading mentions Retweet

CFML Advisory Committee -- My Thoughts

As for the narrative of what happened to the demise of the committee, it isn't worth my time to comment on it.  It is what it was and I have nothing if any real interest to add to what has already been said by Adam, Matt and Sean.  My resignation letter clearly explains my resignation:

http://blog.maestropublishing.com/open-cfml-advisory-committee-resignation-lett

In his blog post, Adam alludes to some inside knowledge on my life and the demands on my time.  Adam has absolutely no understanding or knowledge of my daily life and demands. It is rather imprudent and extremely rude to make assumptions and presume some alternate agenda.  This is the issue I take with Adam's post.  Straight from my resignation letter: "it has become increasingly difficult for me to contribute sufficiently to the CFML specification process".  I spent a lot of time over a period of a couple months debating my resignation.  In the end, I felt I did not have the time to serve the CFML community in a manner that did justice to the committee as a CFML *community* representative.

Filed under  //   CFML   Open Source   Software Development  

Comments [1]

Loading mentions Retweet

Peter Landgren enjoys the sights and sounds of Cleveland as director of Baldwin-Wallace College's Conservatory of Music: My Cleveland | cleveland.com

Is it possible for a musician to make a living in Cleveland?

I'd like to broaden the question and say that it's more possible now than in previous decades to make a living in music anywhere in the country. A musician, however, has to be more than a good player or teacher. They must have an entrepreneurial spirit and serve as an advocate for their art.

Music is one of the easiest art forms to give away for free. B-W teaches all college students how to be contributing citizens in today's world, and in the conservatory, we not only teach students to be intelligent and sensitive performers, but we also guide music students on how to create their own unique career in music.

Mr. Landgren (fondly named PL by his students) is my former horn teacher of three years in college (Johns Hopkins in Baltimore). As a music major at a great conservatory, I spent a lot of time each week preparing for my lesson with PL. It was really exciting to see this piece in the newspaper about Big P's new adventures at BW (I was known as Little P in college). Take a moment to go read the whole article which is very interesting insight on the music "mecca" in Cleveland.

Filed under  //   College   Life   Music  

Comments [0]

Loading mentions Retweet

Top Five Tips for Evaluating Employee Performance (via GreatBizTools Blog)

Investing Time in Employees Puts Money in the Bank

The following situation represents an age-old challenge facing many managers when it comes to helping employees improve their job performance:

I work in an organization that doesn’t use a standard performance management system. Managers are given some general guidelines, which are a bit confusing, but everyone seems to be using a different approach. Employees tend to get feedback only when they do something wrong. What is the best way to evaluate my employees and provide feedback regarding their performance?

Our team at work has been blogging some great information on HR questions and advice. Be sure to follow the link to read the entire article!

Filed under  //   GreatBizTools   HR  

Comments [0]

Loading mentions Retweet

OpenBD (CFML) on Google App Engine - Live Meeting June 8th, 2010 at 7pm ET

Just wanted to quickly blog that Matt Woodward and I are presenting on OpenBD on Google App Engine tonight at the Mid-Michigan CFUG at 7pm ET (about 30 minutes from the time of this posting).

Where: http://breeze.msu.edu/mmcfuggoogle  (Enter as guest)

When: June 8th, 2010 - 7pm ET

Description:

If you want to take advantage of the power of cloud computing but want to focus on applications instead of server infrastructure, you owe it to yourself to check out Google App Engine. Google App Engine lets you deploy applications to Google's infrastructure with the push of a button, and the best part is that for many applications it's entirely free of cost.

In this presentation we'll discuss both the benefits and downsides of living in the cloud, outline how Google App Engine differs from other cloud solutions, and demonstrate how to build and deploy a simple CFML application to Google App Engine using Open BlueDragon, which is the only CFML engine compatible with Google App Engine.

If you're interested in running your CFML applications in the cloud come get in on the ground floor, because with a few simple tips and tricks, it's all clear skies.

Filed under  //   CFML   Google App Engine   Open BlueDragon   Presentations  

Comments [0]

Loading mentions Retweet

Unofficial CF bug database mirror setup = wake up Adobe

This website is an live unoffical mirror of the Adobe ColdFusion Bug Database created by Elliott Sprehn.

I was created because the Flex based UI that was provided by Adobe is a real pain to use, specifically lots of text is not selectable, the Bug Areas dropdown is a mile long with no scrollbar, and it won't work on something like an iPhone.

This website is not affiliated with or owned by Adobe, Inc.

There is definitely something wrong with the idiotic bug database for ColdFusion at Adobe. The Flex interface is horrible. It's meant as no offense to the developers of the Flex interface but the user experience is painful at best. I can't even use it on my netbook because the there is no way to resize boxes or popups to maximize the lower resolution. Then there is mobile access (iPhone / Blackberry).

I understand the intentions of Elliot are good, but having to mirror the bug database should be a wake up call to Adobe to fix their issues. However, I don't believe it's totally the Flex interface. I would guess it's the out-dated issue tracking software they use.

Flame away at me if you want - it won't do any good...

Filed under  //   Adobe   CFML   Greedy Corporations   User Experience  

Comments [1]

Loading mentions Retweet

Is a Pure Meritocracy Possible in Open Source?

I've been asking myself this question a lot lately.  Before we continue this discussion, let's look at how Meritocracy is defined (as by Wikipedia):

Meritocracy is a system of a government or other organization wherein appointments are made and responsibilities assigned to individuals based upon demonstrated talent and ability (merit). In a meritocracy, society rewards those who show talent and competence as demonstrated by past actions or by competition. Evaluation systems, such as formal education, are closely linked to notions of meritocracy.
Some open source projects like the Apache claim to be a meritocracy where contributors gain "status" by their merits usually through contributions (code, documentation, mailing lists, tutorials, etc.).  Some people say that the Apache Project is more egalitarian than meritocracy however I'm not writing this to lobby either case.

In the terms of the projects I'm involved with, the biggest for me is the Mach-II Project.  A lot of people on Team Mach-II were asked to be on the team because of pure merit.  Flashback to 2005 when I started with Mach-II and apply merit to me, I would never be selected -- I was too green.  I would say we try to run Mach-II as a meritocracy as much as possible, but I definitely believe there is a bit of benevolent dictatorship in the mix as well.

In the end, not every decision can be made by committee. At least a "good" decision made.  Some of the problems with committees are while they take account of a bunch of different view points they are terribly slow to move and sometimes produce less than desirable results.  Then introduce politics (especially when financial implications of multiple parties are involved) and things typically grind to a halt.  Committees only work when all parties involved want the same result.  I have little patience to be part of committees / processes that are jaded that progress can be made despite have multiple parties with different financial interests.

This is one of the reasons why committees by company / association appointment in open source just don't work.  Money will nearly always triumph over pure idealistic concerns even when "doing the right thing" would be better.  Does this mean that humans are just greedy by nature? I'm glad I don't have to answer that question (it's been a funny premise on the Simpsons before as well).

People appointed by merit (and not company / employer association) typically share a common goal.  However, who is to break a stalemate?  This why most "meritocracies" still have some person in the "dictatorship" role.  In regards to Mach-II, I definitely play this role.  In the Rails project, DHH still plays the role of the dictator when needed.

So yes, I believe meritocracies can exists, but in certain situations somebody has to play the role of "dictator" / "president" / etc.  However meritocracies need transparency to function properly.  Transparency will be a subject for a future blog post.

Filed under  //   CFML   Mach-II   Meritocracy   open source  

Comments [0]

Loading mentions Retweet