 |
|
Friday, October 19. 2007
"You want to know how two chemicals interact. Do you ask them? No, they're going to lie through their lying little chemical teeth. Throw them in a beaker and apply heat."
Dr. Gregory House, MD (Hugh Laurie)
I'm fairly confident that Fox or CBS will never make a TV drama about software development. It's for the same reason that there are few biopics about writers or philosophers: it is simply not very interesting watching someone think or tap away at a keyboard. Sure, if my job involved saving the world by skateboarding in transport terminals evading the FBI while hacking into the mainframe of a corrupt corporation, movies will certainly be made about it. Sadly though, my profession verges perilously close to the same degree of glamor as accountancy; and yes there are times I daydream about being a lumberjack.
Though I will never see an episode of 'Buffy the Code Debugger' on November 2004 a show aired on Fox that did catch the very spirit of what I do as a software architect. 'House MD' is centered around Dr. Gregory House, played by Hugh Laurie: a rather complex and antisocial Certified Clinical Diagnostician. House is a flawed antihero, addicted to painkillers, maverick to point of unethical behavior, egotistical and contemptuous of authority: an archetypal 'outsider'. Despite these flaws he is fundamentally a likable character; like Harry Callahan of the 'Dirty Harry' movies, he is acceptable to us within the dramatic context. His professional ethics are questionable, but motivated from the higher imperatives of saving lives. Human values over bureaucratic rules.
Although House is a fundamentally enjoyable character it is with his diagnostic approach that I most identify. That approach is not much different from what I do when troubleshooting a software application or system. My problem domain is different, malfunctioning software rather than a sick patient, but the diagnostic process is in almost all points the same: the application of the scientific method. Here is a breakdown of Dr. House's diagnostic methodology:
- Gathers a list of symptoms: just the facts. House doesn't like to talk to patients because 'they lie'.
- Brainstorm and shortlist the possible causes.
- Research environmental factors: his team is sent to investigate the patient's living environment.
- Research the shortlist of candidate complaints
- Formulate a hypothesis
- Test the hypothesis, even to the point of deliberately putting the patient in a coma!
- Evaluate the test results
- Repeat steps 5 thru 7 until a diagnosis is reached
- Treat the patient based on diagnosis
- Monitor the patient for improvement in response to treatment
- If patient does not respond repeat steps 5 thru 10
In comparison is the methodology I use for non-trivial cases of troubleshooting:
- Gather facts about the observed behaviors: replicating the behavior
- Identify likely software components that might be involved
- Consider environmental factors - dependent data sources, user conditions (browser configuration etc.)
- Do any necessary research - support forums, software documentation (IRC is great for real-time answers)
- Formulate a hypothesis
- Test the hypothesis with prototype, code or configuration changes etc.
- Evaluate the results of test scenarios
- Repeat steps 5 thru 7 until the cause of the problem is clear
- Apply a remedy (code patch, data repair etc.)
- Monitor the application in the live user environment to verify a permanent resolution
- If problems persist or new problems are exposed repeat steps 5 thru 10.
In trivial cases the diagnosis is usually reached at step two.
This approach to software diagnosis is systematic and although it might sound laborious it usually yields a more rapid problem resolution than simply jumping into the code looking for the problem. In software engineering you should always first solve the problem then apply the solution to the code. Inexperienced developers often try to solve problems in the code and that is usually the very worse place to do it.
So next time I'm at a party and an attractive woman asks me what I do I can say, "Do you like House MD? I do that with software". Let's face it, I am only in this job for the glamor.
Friday, October 19. 2007
After the release of the Eclipse PDT (PHP Development Toolkit)'s All-In-One 1.0 build, I gave it a whirl, but found to my dismay that a Subversion client isn't included in the default install, though CVS is. It took me a few tries to figure out how to get everything working well with it, so I thought I'd share my experiences and save someone else the ramp-up time.
I'll outline a couple of wrong turns here, and then describe a way I found to make it work after the jump. Note I'm not saying it's the way, not with something as configurable as Eclipse. Also, I'm coming to it as an absolute Eclipse newbie, so some of my mistakes might be obvious to a long-time user, but I assure you aren't obvious if you are new to it. First I tried making the workspace the place I'd been working previously, assuming Eclipse would recognize and import the files with a new project. Well, not so much. It seems a new project can import files, but not recognize pre-existing ones. Then I tried setting up a new project in a new workspace, and importing the project I'd checked out with Subversion on the command line. That worked better than I feared. It pulled in .svn directories and the svn client works to an extent in the new file location. However, I got strange file locks and it turns out it didn't import all the files. That's when I stopped screwing around and turned to Google.
Continue reading "HOWTO: Use Eclipse PDT with Subversion in 13 Easy Steps"
Wednesday, October 17. 2007
The short answer is, only if you never expect your site to change. But websites aren't printed brochures, and you shouldn't design or build them in the same way. Still, building a static web site traditionally has been viewed as the low-cost, and quick solution. When everyone had to chose between a static site and a custom-built site, there might have been some truth to it. But now, anyone can download from the Intertubes free, usually Open Source, content management solutions, and this has drastically altered the cost equation, to the point that static web sites are never the most cost effective solution. Don't believe me? I drew a graph to prove it:
Let's discuss Dynamic sites first, obviously they will initially cost more than either a static or pre-packaged CMS site because you'll have to define what you will build, hire programmers and designers to implement it, potentially you'll reinvent some wheels, or if you're smart try to integrate some already invented wheels. Dynamic sites can also suffer from "blank-slate" syndrome, since you're not necessarily constrained by an existing system, stakeholders can ask for exactly what they want and how they want it to work.
Next up static sites, why do they have such a steep cost curve? Maintaining and updating a static site is tedious, boring work. The kind of work that robots will be doing in the future. The cost of updating a static site depends primarily on the number of pages on your site. Changes which are trivial on another system, like updating your organizations phone number or the copyright year in your footer, may require you to edit hundreds of files. You can do things like use CSS to remove presentation from your actual HTML files or make use of Dreamweaver templates and library includes to hold reusable content like site headers and footers, but that's just automating the tedium. And God forbid something in that chain breaks and now you've got corrupted templates. Static sites also require either having in-house technical expertise to update and create pages, or hiring an external shop to do it for you.
So, what exactly did I mean by a "CMS" site? Most people have heard of Drupal, Joomla, and other CMSes. They provide a lot of functionality, or hooks to add new functionality, without having to hire programmers to build it all for you. Any CMS worth its salt has a way for your designer or webmaster to "theme" it with your design. Of course, it may not work exactly the way you want it to, or have the exact layout your designer wants, but even Free has a price.
How can a CMS be cheaper than a static site in the long run, and cost the same at the outset? Because no matter if you have a static site, customized dynamic site, or CMS based site, someone has to take the pretty Photoshop .psd file and make it into a usable set of CSS and HTML files. How long that takes is largely independent of what's driving your site. Some CMS's might be easier or harder to theme, but they're all in the same order of magnitude for effort. After the initial build out, the ongoing cost of maintaining a site is what will make up the overall total lifetime cost for operating your site.
Monday, October 15. 2007

On the heels of Kinterra's Open Connect API launch, Convio has now officially launched their Convio Open Initiative. The initiative pulls together the interoperability work they've done in the past - their API, Connectors, and Extensions (more on those below) and ties it up in an "initiative" bow.
Unlike Kinterra's SOAP-based offering, Convio's API is REST-based. This will make the toolkit more usable for developers without heavier-lifting integration experience. According the announcement the API provides:
- Create New Constituent Records – allows organizations to create new records in the Constituent 360 database
- Fetch Constituent Records - allows organizations to request XML or JSON formatted biographical data for a constituent record stored in the Constituent 360 database
- Update Constituent Records - allows organizations to create and/or update constituent records in the Constituent 360 database
- Manage Group Membership and Subscriptions - allows organizations to manage constituent group memberships (add/remove) and interest category preferences (add/remove)
There is a footnote stating that not all of the functions will be fully "supported" until the next product release sometime later this year.
In addition to the RESTful API they're providing "connectors" and "extensions".
Connectors are a set of packaged integrations for specific industry's leading database systems (Salesforce.com, Blackbaud, MPower Systems MPX and Target Software Team Approach are mentioned on their site).
Extensions are essentially plugins for the Convio product that let organizations take advantage of the leading social media and networking sites of today. Extensions include a Facebook Application; and RSS feed creator (which is only available for the Convio CMS tool);
This is a great start, and we're already eager for the next versions to expose more of the Convio-managed content like Actions, Events, and Campaigns. That next level of openness would give Convio clients the freedom to present their message and member interaction in new ways, and should drive yet another way of innovation in online constituent engagement.
( thanks to Holly at the NTEN blog for the heads up)
Friday, October 12. 2007
Worth closer inspection, today Kintera announced that they've published an open API to allow integration directly with Kintera Technology. You can view the API documentation here. Some initial thoughts:
- You need a Kintera Sphere account with the API enabled (duh).
- If you are on PHP, they recommend version 5, since PHP4 will be dead soon.
- Sample code is available for C#, Java, and PHP. Must mean that that not a lot of Kintera clients have Ruby, Python, or Perl sites.
- The API is SOAP based, which is a little heavier to program, and can be difficult to debug.
- The API has methods for describing entities (business objects), creating new records, retrieving one or more records, updating a record, and deleting a record.
- A sign that they've thought ahead, for making batch operations easy, there is a GetUpdate method to return updated records within a specified time frame.
- Seems like you'll be able to run arbitrary queries in the CRM database, and also Execute transactions.
- One potentially worrying aspect, is that the API does not apply entity access restrictions. I'm not versed in exactly what that means, but it sounds like you are connecting as the equivalent of "root" and can do almost whatever you want via the API.
- I couldn't find any mention of the API being rate limited to so-many queries or calls a day.
HT: Non-profit Tech Blog
Thursday, October 11. 2007
Have you ever written a report or paper which took forever to complete? I'm sure you have. And like most of us, a good chunk of that time was spent rewriting unsaved work. And to think, most of that time could have been saved if we simply 'Saved often' and keep versions of our work. Well this simply theory has been embraced by multiple programs that enables data versioning. As a developer, a great program to use is Subversion.
What is Subversion?
Subversion is a free/open-source version control system. That is, Subversion manages files and directories over time. A tree of files is placed into a central repository. The repository is much like an ordinary file server, except that it remembers every change ever made to your files and directories. This allows you to recover older versions of your data, or examine the history of how your data changed. In this regard, many people think of a version control system as a sort of “time machine”.
Subversion can access its repository across networks, which allows it to be used by people on different computers. At some level, the ability for various people to modify and manage the same set of data from their respective locations fosters collaboration. Progress can occur more quickly without a single conduit through which all modifications must occur. And because the work is versioned, you need not fear that quality is the trade-off for losing that conduit—if some incorrect change is made to the data, just undo that change. (Source: http://svnbook.red-bean.com)
Working with varied project requirements and changing technology, developers are always making changes and modifications. And sometimes old modifications can serve as a foundation for new modifications after they have been removed from a project. Talk about a 'head spinner'. But this has all been simplified by utilizing Subversion and some simple practices which I will share with you.
Commit Often!
Avoid: Making changes to multiple features or functions and committing them all at once.
Depending on how complex your project is, you want to try and break your changes up by feature or function. Once you have made your revisions to a particular function/feature to satisfaction, you want to commit it to the repository. Once completed, move on to the next function/feature.
The reason for this approach is to have granular flexibility in rolling back your changes without affecting multiple functions/features. There is nothing more frustrating than creating extra work for yourself after rolling back what you think is one change when in fact it is multiple changes across the entire project. You will not only find flexibility with rollbacks, but in other tools available in Subversion.
Meaningful Comments!
Avoid: Committing changes and not knowing exactly what the changes were.
The point in using Subversion is to make your life that much easier! In addition to the aforementioned practice you want to couple your 'commits' with a meaningful description so that both you and other developers can easily understand each others revisions.
Additionally, if you use a ticketing system to document bugs and modifications you may want to refer to the respective ticket ID where greater detail can be found. (A totally separate post!)
Simple practices can make all the difference in your work processes and maintaining your sanity. Although short, this post will be followed by additional posts made available about how you can effectively use Subversion.
Tuesday, October 9. 2007
Toby Ward makes a compelling argument to not worry about the graphic design of your intranet. Often, the first solid, easy to grasp version of any website will be the graphic design. Its the first one people really get, even if you've led them through paper protoypes, wireframes, or very rough html mock ups. But its dangerous and counter-productive to make design high priority because on an intranet, users are very focused on performing a task, like finding a document or filling out an expense report. Too many images, video, bells and whistles will both distract and slow the downloading and rendering of the page. It all comes back to knowing your site's audience, understanding why they come to the site, and building the site to suit them. Read Toby Ward's article for a complete list of the issues that should be considered.
That’s not to say that design (look-and-feel) doesn’t play a roll and isn’t important to users. Design is important, but it doesn’t crack the top 6 or 7 priorities. On average, based on my experience working with dozens of intranet clients, design is equivalent to between 8 – 12% of the total intranet’s value. What is really important is content (20-30%), search (15-20%), information architecture (20-30%), and governance and planning (20-30%).
Monday, October 8. 2007
The boundaries of the physical office don't mean as much as they used to. Wifi is available at nearly every coffee shop, airport, and even some parks. Along with mobility come some challenges, however, specifically when dealing with user support from afar. VNC is great in the office, but once your user steps outside the batcave, there's no telling what kind of environment they will be in. Does the firewall or access point they're behind allow VPN pass through? Can they tell you what IP they're at?
In most circumstances, the answer is hard to come by while your user is frazzled and short on time. What do you do? On the Windows side of the fence, things are greatly simplified by the folks at TeamViewer. This tidy and small app provides a way to circumvent the common problems of connectivity by assigning each side a unique ID, like a phone number. What's more, it doesn't even require an installation on either the technician or user's side. Point them to the download site, and 500k later, you have a connection that traverses NAT and firewalls without a lot of fuss. TeamViewer provides file transfer and a remote desktop control feature.
If you're supporting non-Windows clients, you can pair up Hamachi with VNC, though it should installed ahead of time. Hamachi gives the user a unique ID, just as Teamviewer does, which you can use to create a pipeline for a VNC session to use much in the same way as TeamViewer.
Wednesday, October 3. 2007
In the beginning, there were static web pages.
The geek masses cheered at the ability to put information on the web for everyone to see. More and more web pages were built, and with that, a myriad of useless information also began to pile. Search engines started emerging, with the aim of filtering valuable information from the heaps of useless data.
Then, websites started getting progressively more dynamic. Geeks wanted to jump-start their websites by allowing others to interact and participate. The average Joe wanted to be able to have a web presence and express themselves without needing to know HTML or other coding languages. The raw data kept piling.
Sometime in 2001, Jimmy Wales decided to launch a community emphasizing user contributions of structured, meaningful information. Wikipedia users classify their articles, sanity-check other articles, and relate their article to any other articles. Instead of searching through piles of articles, why not get users to incrementally improve each other's articles?
Every Wikipedia article starts off on the same page, no pun intended. To distinguish between different article types, template code is added into the article. If you wanted to add the current population for the "Roanoke, VA" article, you'd have to manually edit the "InfoBox" tag within the article's wiki source. More importantly, since the data is so loosely structured, there's no easy way to pinpoint other cities with a population similar to that of Roanoke, VA.
When information is ideally structured, much of the burden is taken off the search engine. Freebase aims at cauking Wikipedia's flaw by adding numerous "facets" to the search, as well as keeping the data in concise blocks in the database. Freebase claims to allow for deeper searches than ever possible before. Whereas Wikipedia's data structure is mainly fixed, Freebase has what is called an "Open Contribution Model". This means not only that different content types physically exist (without the META-ness) for different articles, but also that users can CREATE new content types, essentially extending the database structure. This concept of a dynamic database is something that has been virtually untapped until now.
Also, Freebase allows users to upload entire data sets, not just individual articles. Suppose I wanted to create a content type for "Squirrels who survived a rattlesnake attack", I would add fields like "Name, Animal type, Location, and Date". "Animal type" could automatically look-up the squirrel's scientific info from a separate content type, "Location" could either pull up other squirrels bitten at this location or the geographic/demographic details of this location, etc. The possibilities are limitless. Oh yeah, and there's an API and even a Query Editor, too.
To show how unbiased this database structure really is, try out this FilmSpin example. Even though it only uses 2 content types, it sleekly shows how meaningful those relationships can be among varying content types. Freebase is still in alpha, and shows great potential of taking the buzz away from Wikipedia and other sector rivals.
Tuesday, October 2. 2007
 YouTube is now offering designated " nonprofit channels" for 501(c)(3) organizations. The new service will let nonprofits have a bit more control of the channel's branding, an option to fundraise directly on the channel page with Google Checkout, and perhaps most importantly, will include nonprofit videos within the "Promoted Videos" areas throughout YouTube.
This last point could be of real value to most organizations, but YouTube has not provided any specifics on the frequency of rotation in these high-visibility areas.
Here are some example channels already using the service:
Oh. And if you're one of the first 300 organizations to signup, you get a free Casio video camera.
|
|