# Tuesday, May 06, 2008

twitterdown I don't post to Twitter all that often, but when I'm going to be at the computer for a while I will often open the timeline for people I'm following (either via the web or Twhirl) and see what people are chatting about. I looked at it in depth a few months ago as a possibility for ad-hoc chatter among my geographically distributed team (we ultimately decided to use Campfire instead). Since then, I've had occasional exchanges with people and posted the odd update to my feed.

As of this post, Twitter's down... again... it's pretty amazing that a business with this much buzz and hype around it has allowed itself to become so unstable.

The stories of its frequent downtime, complaints about scalability, and departures of technical staff are regularly cruising through my newsreader. There's even a site that tracks the various "We're down" images that they use when the site is unavailable (the one at right is from the current outage).

I can't imagine what the behind-the-scenes issues are or what sort of challenges their tech team is dealing with... but clearly there's a problem here that they need to resolve QUICKLY. You have to assume that, at some point, people will decide they've had enough and move on to alternatives like Pownce or Jaiku. Or, as Scott Hanselman suggests in this post, maybe an open and standards-based alternative pops up to fill the void.

Lots of people are looking to Twitter as an omnipresent option for quick communication of status info, marketing messages, news delivery, and as an entry point for simple API messages. Most businesses and web properties would kill for that sort of interest and traffic... to have all that opportunity pass by because of stability issues would be such a waste.

On the other hand, imagine the case studies (for both Business and CompSci)...

Technorati Tags: , ,
posted on Tuesday, May 06, 2008 9:07 PM Mountain Daylight Time  #    Comments [1]
# Sunday, March 16, 2008

silverlightwarning Regular readers of this blog will know that my background is primarily in the Microsoft development world, with the odd foray into Java (and more recently, experiments with Ruby and Processing). So when Microsoft announces some new tool or framework, I'll pay attention and see what's up.

Right now, there's a good deal of hype and excitement around Silverlight... which sounds great to me in theory, but in practice has been largely a disappointment.

And I saw that as a user, not a developer. I can't even think about using it for development at this point because, frankly... it simply doesn't run for me as a casual web user.

Rich Ziade nails some of the issues in his post from Friday, called "Microsoft-Centered Design":

So I'm perusing the various blog posts that have streamed out of the MIX 08 conference and some interesting talks are available online. So I head on over to the MIX 08 site to view some sessions and I run into this:  [image of the "You need Silverlight" placeholder] ..  Yep, I need to download Real Player, I mean Silverlight to watch these videos. Silverlight, for the less enlightened, is Microsoft's foray into streaming video, rich media and rich apps on the Web (aka Microsoft's Flash).

I agree with Rich's premise that Silverlight apps (or at least the demos we've seen so far) don't really provide much reason to use it over Flash -- a time-tested, well-supported platform for rich web apps.

But I find the problem with Silverlight to go even deeper:  For me, it simply doesn't work.

I use Firefox as my browser... and despite lots of examples and statements about Silverlight being not only cross-browser, but also cross-platform, I can't get it to run in Firefox. On any machine I've tried. To date, that's five machines. All of them are running similar setups:

  • The most recent production version of Firefox (currently 2.0.0.12), with extensions:
  • del.icio.us Bookmarks (for quick access to my bookmarks)
  • Firebug (for debugging and development)
  • Flashblock  (to block Flash content from loading until/unless I want to see it)
  • Google Toolbar  (because... well... because it's the Google toolbar)
  • Remember the Milk for Gmail   (because seeing my tasks right next to email rocks)
  • Tab Mix Plus  (because I want to choose how/when/where new tabs are opened in Firefox)
  • IE Tab (see below)

Note that what I'm NOT running is the NoScript extension, which reportedly causes problems for Silverlight in Firefox.

I can't tell you how many times on these machines I've gone to download the various versions of Silverlight and see if maybe... just maybe... THIS TIME will be different. So far, no joy.

silverlightsave The issue isn't made any easier by the various versions floating around... Silverlight 1.0, Silverlight 1.1 Alpha, some sort of refresh/CTP version for 1.1, and now Silverlight 2.0 as of Mix08. This thing's been around for just a year now and there are already more SKUs of Silverlight than there are of Windows XP.

Of course, things do appear to work fine in IE7. But I don't want to run IE7 as my browser. I've got Firefox and its extensions tweaked to be exactly the way I like it.

The only way I'm able to get Silverlight content to run inside of a Firefox window currently is via the "IE Tab" extension -- which loads the IE rendering engine inside of a Firefox tab. In doing that, though, I lose the integration with the rest of Firefox. And it's only cosmetically different from having two browsers open to begin with. I don't want that.

I would like this to work. I really would. So far, it seems that the newer Silverlight 2.0 will run inside of Firefox -- however, the vast majority of the Silverlight content out there (which, as Rich points out, could be provided in Flash without losing any functionality) is NOT targeting Silverlight 2.0. It seems to mostly be in 1.0 or 1.1.

So until Microsoft gets this working correctly in Firefox, I find myself having to make a decision every time I come across that drives-me-up-a-wall "Get Microsoft Silverlight" badge -- do I really care enough about this content to deal with the frustration and go outside my normal workflow to view it?

More often than not, the answer is "no," which is a shame because there are some interesting videos out there in Silverlight format (the screenshot above is from Jon Udell's Perspectives video audio interview on MS Robotics).

As a developer, the notion of using XAML to build applications that can be run via Silverlight as well as via a WPF rich client sounds really cool. But how can I get excited about a new developer platform that's completely broken for me as a user?

Update: In the comments, Jon Udell clarified that the Perspectives link above is audio and not video and I've since downloaded the MP3 version. The "Get Silverlight" badge made it look like a video to me and seeing that badge repeatedly without being able to get it working in Firefox prompted the post. Thanks, Jon!


posted on Sunday, March 16, 2008 9:54 PM Mountain Daylight Time  #    Comments [2]
# Saturday, March 01, 2008

ilvdata Data Visualization (or "Infoporn" as I like to call it) has been a passion of mine for many years. Most of my career as both a developer and manager has been in the development of software that visualizes large sets of data. For the most part, my work has been around energy industry data but I'm often up late into the night tinkering with data sets I find online.

Over the last couple of years, the visualization of data has taken off and become much more popular than in the past. What used to be the exclusive domain of formal textbooks and students in specialized design programs has become accessible to a wider audience. As I think about it, I suspect the reason for this growth in popularity is the convergence of several factors:

  • There is a TON of public data available online. Over the years, I've collected a variety interesting large public data sets, such as AOL search data, Enron email messages, and Netflix movie ratings. Peruse the "publicdata" tag on del.icio.us and you'll find more data than you can shake a chart at. In addition, the popularity of web services and public APIs for data has exploded in the last couple of years. These are ideal for fetching current, dynamic data including weather, stock prices, and other financial data. There are also web sites that catalog the wide variety of web service APIs available online. The popularity of online "mashups" (the combining of two or more web services to create something completely new) has grown very quickly, particularly with the arrival of online mapping services like Google Maps and Virtual Earth. These days, popular web sites that don't provide an API for programmatic access quickly catch heat for their omission.
  • Data has become "social" -- though in a "Web 2.0" world, what hasn't? Seriously, there have been some great "social data" sites cropping up over the last couple of years. These sites let anyone upload, visualize, browse, and share their data. Don't like the way some data on these sites is represented? Chart it yourself. The hallmark examples here are Swivel (blog) and Many Eyes (from IBM, also with a blog), though there are other similar sites as well.
  • Visualization tools have become more commonplace. In addition to Microsoft improving the charting tools in each new version of Excel, nearly every programming language out there has 3rd party graphics and charting libraries available for it. For many developers, adding basic charting capability to an application has become a fairly simple, plug-and-play affair. That said, it's still too easy to create charts that are ugly and do a poor job of communicating information. In the same way that the rise of desktop publishing tools in the 80's and 90's made for a lot of horrible newsletters and brochures, the increasing number of charting and visualization tools means we're seeing a lot of really bad data presentations. Go ask Edward Tufte (a "founding father" for modern data visualization) about PowerPoint or Stephen Few about BusinessObjects to see what I mean (Few refers to the charts from one Business Objects product as "data visualization Happy Meals" -- not a compliment). Still... it's an exciting time right now for this field.
  • Development tools have improved greatly in their handling of data. Most development platforms/environments have some sort of abstraction layer or available data-access tools to easy the querying and manipulation of data. For dealing with local data, it's rare to have to write new code from scratch to ingest and parse data -- most tools have libraries for standard formats like XML or CSV, as well as straightforward APIs for working with relational databases. For remote data, there are lots of tools that quickly generate a local proxy or wrapper around standard web services.
  • The development tools for creating and manipulating graphics have similarly improved. Writing code to create on-screen graphics used to be something that an elite few programmers could do -- it typically required very strong C++ skills, in-depth knowledge of complex graphics libraries, and a background in physics and 3D modeling. Now, most modern platforms have relatively approachable APIs for drawing points, lines, regions, and text on screen - as well as simplified APIs for 3D manipulation.
  • visualizingdata Also on the graphics front, there's Processing - a development environment designed and developed specifically for visualization. It's built on top of Java, but its creators (Ben Fry and Casey Reas) and collaborators have done a great job of balancing approachability (for designers or those new to programming) and power (for those who want to create advanced, interactive visualizations). If you're interested in checking out Processing (which is free and open source and a lot of fun and so you totally should), I'd recommend Fry's book, "Visualizing Data" (published last year by O'Reilly)... Jeff Atwood calls Fry "Edward Tufte armed with a compiler" and I've found the book to be an excellent walkthrough for Processing. Additionally, it's good introduction to the thought process involved with creating an effective visualization.
  • Computing power and storage are cheap and plentiful. It takes a lot of processor cycles to render graphics and a lot of storage space to keep all that data. Thankfully, even a "low-end" machine these days has a ridiculous amount of processing power and 250GB hard drives are a common starting point for hard drive sizes. I recently purchased a 750GB drive for my Windows Home Server machine and its cost was roughly $.20 per gigabyte. While marveling about that the other day, it occurred to me that my very first hard drive (a 10MB noisy beast given to me in the late 80s by a generous uncle) would be insufficient to hold even ONE raw photo from my new camera (a 12-megapixel Nikon D300). Insane. Thank you Mr. Moore and Mr. Kryder.

Given all of the above, it's a great time to be a data geek. Even if you're not interested in designing visualizations of your own, there are lots of blogs and sites that catalog the best infoporn from across the web. It's amazing to see so many projects coming out that are both informative and aesthetically pleasing. The thumbnail below is an example from this week - it's essentially an interactive "area chart over a timeline" showing the Box Office Receipts for movies from 1986 to 2007, designed and built by the New York Times data visualization team (they've been doing some amazing stuff recently).

NY Times Infographic In addition to checking out my del.icio.us "infoporn" links, you might want to look over some of the feeds I've subscribed to:

In coming posts, I'll link to some of examples of visualizations that I find to be the most impressive, informative, and even humorous.

posted on Saturday, March 01, 2008 12:35 AM Mountain Standard Time  #    Comments [0]
# Monday, February 18, 2008

2dboylogo Via the Infosthetics blog, I learned of the "Human Brain Cloud" - a massively multiplayer "word association game". It's pretty addictive in a "what will it do next" kind of way.

The idea is that you're shown words or short phrases on the screen and you want to quickly type in the first word that comes to mind - a typical word association. It showed "chess" and I typed "checkers". It showed "never cease" and I typed "to amaze". You get the idea... but be forewarned: once you start blazing through some words, it makes you want to keep going to see what it displays next.

The coolest part of the site is actually on the next tab: View the Cloud.

Here, you see a set of balls, each with a word on it, and as you type in a word the balls begin to disappear - revealing only the balls that match what you've typed. Having narrowed down to one or more manageable balls in the display, you can click on one of them to expand it into a network diagram. The ball you click then "explodes" into a set of balls that match words people typed in during the the word association process. The thicker the line connecting the two, the more common the association between the two balls (i.e., between the words on the connected balls).

sqlassocwords In the image to the right, I typed "sql" - which narrowed down to just one ball - and then clicked on it to expand the associated words. The thickest lines are to "database" and "query", followed by "my" and "server". Slick. You can follow the word association visually by clicking on any associated ball to reveal its associations... and so on. To make the display manageable, balls begin to shrink and fade out over time as you drill down into other associated words.

Aside form being a bit addictive, it's also an entertaining visualization. Pure infoporn.

It comes from "2D Boy", a two-man indie game studio whose "swanky San Francisco office is whichever free wi-fi coffee shop they wander into on a given day."

Their blog has a great entry with some funny stats and insights from the word associations people have entered (at this point, about a half million words with over 6 millions connections).

They're working on a game called "World of Goo" that (from a preview video) also looks like it'll be pretty cool.

posted on Monday, February 18, 2008 11:30 PM Mountain Standard Time  #    Comments [0]
# Sunday, January 27, 2008

GoogleAppsLogo A few months back, probably after deleting my daily allotment of 100+ spam messages per day, I decided to look into a better way of handling email. The hosting company I use for my domain (Server Intellect) provides a web-based mail client (Smarter Mail) that I often used when out and about. On my machine at home, I used Outlook 2007 to fetch that email. And while Smarter Mail's UI was fine for a web-based mail program, the spam that made it through the filters was ridiculous.

In addition to my personal email, this affected a few other family members who also use email on the domain... and let's face it, no guy wants to hear from his Mother about "how to get rid of all that male enlargement spam."

So I went in search of a better way... as a listener to Scott Hanselman's podcast (and reader of his blog), I knew that he'd recently moved his domain's mail (and other services) over to Google Apps for Domains. His recounting of the tale in the podcast sounded pretty painless, so I went to check it out.

I was very impressed with how seamless and easy the whole thing was. Google provides excellent instructions for how to make the transition, including walkthroughs for the control panels used by many web hosting companies. The process amounts to just a few steps:

  1. You prove to Google that you own the domain. The easiest way to do that is to put a file at a certain URL that contains some data they provide. You create it with a text editor, upload it to your site, and let Google know you're done. Google looks for that file and then reads the contents... if it matches what they provided, you're good to go.
  2. You decide which services you want to use -- GMail, Google Docs, Google Calendar, Start Page, and public pages -- and you can turn them on and configure them as you like. This was great because I could turn on calendar, docs, and start page right away, but figure out how I wanted to transition email later.
  3. You use Google's instructions for your hosting company's control panel to make some changes in the routing of traffic in your domain. For me, this was as simple as logging into the domain, adding some A records to indicate where traffic should go (i.e., sending it to special Google URLs where the apps live), and then hit that URL in a browser to see the result.
  4. With email, I was originally worried that there would be an awkward transition period... not at all. First, I created all of our accounts in the Google Apps interface so that there were mailboxes in place. Google even gives you a temporary URL you can use to check that mailbox before transitioning to the URL you want (e.g., mail.domain.com), as well as a temporary email address that goes to each mailbox. Google gives nice step-by-step instructions for handling mail transitions in particular.
  5. With those in hand, I logged into SmarterMail and set up Forwarding rules on each mailbox -- so that mail sent to me (for example) would automatically be forwarded to my mailbox's special email address over on Google's system. With those rules in place, I changed the MX records with my hosting company so that mail traffic would start to go to Google's servers rather than Server Intellect's.
  6. After that change is made, there's a brief transition time while records get updated and the tubes get re-routed. With the forwarding rules, though, nothing is lost or in limbo. Within hours, it seemed, everything was being processed through Google and we were good to go.

That all sounds a little more involved than it actually was... someone moderately familiar with their hosting company's control panel could get the whole thing done in a couple hours in the evening. Maybe more if you had a bunch of mailboxes to go through and set up forwarding rules on.

In addition to Scott's podcast, he also had a few posts on his blog that were helpful when I looked into this. Unlike with Scott's situation, I didn't have a bunch of email to transition UP to the Google mailboxes. I do still have a large Outlook PST file locally, but I'm not convinced I'd get a lot of value out of pushing it all up to my mailbox on the server.

For now, I'm pretty much just using GMail as intended (e.g., leave it all on the server), but I take advantage of the IMAP capability occasionally to move things into some Personal Folders that I want to archive. I do see that, over time, I'll likely start using labels and the "archive" feature of Google Mail and keep more and more info on the server... but that will be a transition that occurs naturally over time rather than jamming all of my current archives up there at once.

Others in the family are using the new setup the same way they used the old one -- use the web interface to handle mail when traveling or when using a different computer, but then let Outlook slurp it all down via POP when they're on their personal machine... but they're increasingly seeing that it's useful to leave it up on the server for convenient access.

It's been a few months since the transition... and overall, we couldn't be happier with it. The service is free, fast, and has added a lot to the way we're tracking things. My wife and I frequently share Google Docs for various things (Christmas shopping lists, chore charts, etc) and we're just starting to use the calendar to keep track of household schedules.

And that spam problem? It's pretty much licked... Google's filters are great. I think the number of spam messages I've seen in roughly three months can be counted in the single digits. I did keep an eye out on the Spam folder to watch for false positives and there were a few. But those could be counted on one hand and, more importantly, I understood why Google wanted to filter them -- mostly they were messages that mentioned poker, a pastime of mine but a frequent topic for spammers.

Bottom line:

Pros

  • Virtually no spam.
  • Couldn't be easier to setup.
  • Uptime and stability of Google services.
  • Access to Google's "search" for email.
  • Other services we can grow into.
  • Free (unless you have more advanced needs)

Cons

  • It does require familiarity with your host's control panel... but if you have one of the many standard interfaces they support, that's an easy hurdle.
  • I know people will say "use labels!" and "use search!", but I still wish Gmail had folders.
  • Some of the Google Apps For Domains services get new features and capabilities slower than their "regular" Google cousins. As Scott has pointed out, it's clear they're not running the same codebase in both places... so things like IMAP support, colored labels, and lots of iGoogle add-ins don't work in Google Apps until weeks after they're generally available elsewhere (if at all).
  • Those differences mentioned above also mean you need to be careful when looking at 3rd-party add-ins or tools. Some that work fine with regular Google tools may require hacks, or may not work at all, with the tools available via Google Apps.

Highly recommended!

 

Note:   This post is the first in a series of posts about moving more of my personal data and productivity tools on to web-based services (i.e., "the cloud"). It's a process that's largely on-going (only mail is "fully" transitioned for us), but I'm working on transitioning my tasks (which Google doesn't yet support), my calendar (both home and office), as well as personal data (important docs, photos, etc) to web-based services.

posted on Sunday, January 27, 2008 5:53 PM Mountain Standard Time  #    Comments [0]
# Wednesday, January 16, 2008

Whats It Worth? Eric Sink has a blog post about his experience in trying to get pricing information out of a vendor whose products he was looking into. Their prices weren't listed on the web site (strike 1), so he had to fill out a web form to request a price. The response he got back was a request for his phone number so that a salesperson could call him (strike 2). Specifically, they wanted to talk about his application and how he planned to use their product (strike 3).

I've run into this several times with development tools and components and it typically tells me one key thing about the vendor involved... you want to jack up the price based on my ability to pay. More succinctly, you want to find out my "price sensitivity" which is just a fancy way of saying, "What it's worth to you?"

That tells me the vendor isn't sure what their product is worth in the market. And that they don't think my time is worth much either (not to be an ass, but I'd like to avoid 30-minute phone calls when the topic could be covered in a 3-sentence email). Finally, it says that you (the vendor) want to dictate to me (the customer) the nature of our relationship.

"How I plan to use your product?" -- What if I'm a rich, whacked out philanthropist who buys software component licenses, reads the Quick-Start Guides to my kids at night, and wants to use your install media as the basis for my Chinese throwing star? What's the price then?

My experience with this is typically in dealing with the vendors that make UI components and other development tools. Doesn't matter if you're talking about Java, .NET, or anything else. One vendor I dealt with recently didn't have any pricing on their web site. Instead, you have to contact a salesperson via email and request a price. The response back was along the lines of this (paraphrased, but not by much):

Before I can give you a price, I really need to find out more about your product and your company. We like to look at ourselves as not just a tools vendor, but also as a partner in your business. Knowing more about the pricing of your products and services will help us craft a relationship that benefits you and ensures that you get the most out of our product.

Pretty amazing, huh? In truth, the conversation was more about him asking me questions than me asking him about licensing their product. He wanted to know how many licenses to our products are sold each year. How many end-users does that represent? What's the pricing of our product? What do our sales forecasts look like?

It's probably worth noting here that the vendor I'm referring to makes exactly one development tool -- a UI component for .NET. And I tried to explain it as simply as I could -- "Look, we already license UI tools from companies X, Y, and Z. I can go to their web site and immediately see how much I have to pay per-developer for their tools, and what the deployment licensing is for those tools (royalty-free distribution, named users, etc)."

But trying to get that information from this vendor was nearly impossible. In the end, I ended up on the phone with the president of their North American business, playing a game of 20-Questions. All so he can make an educated guess at how much I might be willing to pay for the use of his product.

By the way, when I finally got a proposed price (after multiple emails and a long phone call), it was about 8-10x what we were willing to pay to license the component. So much for the analysis of our price sensitivity... We went another direction.

Now, I don't even bother. If I go to a site and can't find any sort of pricing information, I move on.

posted on Wednesday, January 16, 2008 3:24 PM Mountain Standard Time  #    Comments [0]
# Monday, December 31, 2007

scratch-simpleresult Both Leon Bambrick and Jeff Atwood have posted about LOGO recently, which reminded me to talk about Scratch. It's a FREE program from MIT that's aimed at teaching kids (or anyone else, I suppose) the basics of programming. More specifically, it gets them thinking about things like logic, flow control, and handling variables. 

As a developer, I suppose it's natural to want to teach my daughters something about what I do for a living. (Note: I leave out the part about how moving into management mostly means sitting in meetings and spending more time in Outlook and Excel than in an IDE). But I do want them to grow up with strong problem-solving skills, so I've often gone out in search of good ways to teach programming concepts at a kids level. There are a number of initiatives out there, but Scratch is the one that has really taken hold for us. I've found it to be the best by far, even better than commercial products out there intended for the same purpose.

The free Scratch application is basically a workbench for creating programs using a drag-and-drop interface. You have a stage, which can be scripted to do things like clear itself, paint its background, and so on. On the stage, you drop sprites, which can be any sort of object. By default, your first object is a cartoon cat, but you can use any sort of photo, clip art, or pick from a library that is included.

For your stage and each of your objects, you have a script (or several) that can be run. This is where the genius comes in -- the script is built entirely by dragging and dropping blocks into place. No need to remember syntax or type in commands. You're essentially building a flow chart with these blocks and your "program" is executed from the first block (at the top) to the last (at the bottom). The blocks snap together as you drop them and there are good visual cues as you drag them around when and where they'll snap. If your program has multiple characters with their own script, all of those scripts run in parallel... and a single character can have multiple scripts (to support for example, moving around the stage while also waiting for some external input). The bottom screenshot gives a good example of parallel scripts.

The available blocks are grouped into categories, such as Motion, Control, Looks, Sound, Sensing, Numbers, and Pen. Each category has numerous blocks that let you control how your sprite moves, makes noise, interacts with other sprites, calculates, stores/retrieves variables, and uses its "pen". As with LOGO, the pen is the primary way of seeing what your sprite has done. You control the pen by putting it down, lifting it up, setting its color, size, and so on.

The "Control" group is where you can really do creating things as this is where flow control blocks are located. There are blocks to wait for input, "container" blocks that let you repeat other sets of blocks forever, a certain number of times, or until a condition is met. There are also If/If Else blocks and blocks to pause the script for a period of time.

scratch-simpleprogram The environment is very easy to work with and encourages experimentation. The left side is where the groups of blocks are stored, the middle is where you drag and drop your blocks, and the right side shows the sprites in your program and the stage where everything happens. It also has a "presentation mode" so the user can make their program run full-screen and show off to Mom and Dad.

I introduced my daughter to Scratch several weeks ago and it's now one of her favorite things to do on the computer. Given that she just received an OLPC, I'm glad to learn that there's an effort underway to build an OLPC compatible version of Scratch.

Initially, Scratch is great for use as an electronic Spirograph set. Kids can experiment by trying different things and take a "let's see what happens" approach to learning. The simple program to the right is what created the shape at the top of this post. Clicking on any of those numbers lets you change its value and it's easy to move the blocks around or add new blocks. You can see in this example that the orange flow-control blocks serve as containers for other blocks and that they can also be nested.

One of the first things kids learn, just as anyone else learning programming does, is that you have to be very explicit in your instructions. For example, without the "Clear" instruction in there, the stage would still have the previous shape and it'd be hard to see what your program is doing. Without telling the sprite where to start (0,0), the program would pick up wherever the sprite currently sites which is likely not what you want.

Click for larger view. Scratch also comes with many sample programs that show you just how flexible it is. Games are fairly easy to program because of Scratch's support for input handling (detecting keypresses or mouse activity) and its support for collision detection. A good example is a little racing game that features a ball you have to "drive" around a race course. The arrow keys control the ball's direction and it speeds up the longer you hold them down.

However, if your ball goes off the race course and ends up in the grass (the program has an If block to see if the sprite is touching the color green), then your speed begins to slow down significantly. The program for it (visible by clicking the screenshot to the left) is surprisingly simple and it's a fun one for kids to experiment with because they can control which keys get used, how quickly the ball moves, and what the consequences are for going off-course.

I've tried out a number of different environments for kids to create things in the computer and Scratch is easily the best of the lot. It's a commercial quality piece of software that installs quickly and works very well. The folks at MIT have also created an online community of sorts where users can share their Scratch creations. The web site also has lots of videos, reference materials, and a PDF Getting Started guide that's very kid-friendly.

(Note: I just noticed that they've released a version 1.2 maintenance update in the last couple of weeks. It looks like they've added some advanced blocks, fixed a few things, and created a more detailed PDF reference guide. I'll be upgrading shortly, but the screenshots above were created with 1.1).

If there's a kid in your life that enjoys tinkering on the computer, introduce them to Scratch. Heck, introduce yourself to Scratch... I apologize in advance for the hours you're about to lose.

Technorati Tags: , , , ,
posted on Monday, December 31, 2007 3:08 PM Mountain Standard Time  #    Comments [0]
# Monday, December 24, 2007

The XO Laptop Lots of tech geeks have heard of the One Laptop Per Child (OLPC) project founded and run by Nicholas Negroponte (MIT)... but non-techies may not be familiar with it at all.

The project began in early 2005 with the original idea being to design and build a laptop that could be used as a learning tool by kids in underdeveloped parts of the world. It wouldn't be based on Windows or Mac (due to cost and complexity), needed to be rugged (for use by kids, often in remote areas), needed to provide a self-contained collaborative learning environment (remote villages have students - but not necessarily the internet), and needed to be kid-friendly (to keep their interest and enthusiasm). The hope was that a combination of design efficiencies and large orders from governments around the world would bring the cost down to $100 (US). When first announced it was often referred to as "the $100 laptop".

They've come close... the machine cost is now under $200 (US). And while the machine wasn't originally intended to be sold to consumers in the US, it's now possible to buy one. Well, actually you have to buy TWO. For $399, you can participate in the "Give 1, Get 1" program -- one machine comes to you and another machine is sent on your behalf to another part of the world. This program started in November and continues through the end of the year. Of the $399 you spend, $200 is tax deductible and T-Mobile is throwing in a year of free HotSpot access as well... that makes it really a pretty good deal.

I've followed this initiative since it was originally announced because, like most technology people, I think getting kids familiar with the tools of technology gives them a big step up in their learning. Rather than something to be intimidated by or to see as a learning curve to ascend, a computer should be seen by today's kids as a very powerful tool to accomplish their goals and reinforce the curriculum they're already studying. With it, they can write, research, collaborate, create, publish, entertain, and communicate.

I think a kids' natural curiosity provides the desire and motivation, but lots of kids (particularly outside the US) lack access. A laptop as a learning tool is no replacement for the essentials of food, clean water, and basic healthcare -- but it is worthwhile venture.

SUGAR User Interface So I placed my order on the first day of "Give 1, Get 1" and the machine arrived last week. I've spent some time playing around with it and I think my daughter (7 years) is going to love it. She'll open it tomorrow for Christmas. The "Sugar" interface is very intuitive and kid-friendly, plus there are lots of activities and things to do on the machine. She can write a journal, research via the encyclopedia, play educational games, learn LOGO (or Python if she wants to go really wild), browse the web (with some supervision and controls), read some RSS feeds, use a calculator, draw pictures, and more.

Hardware-wise, this machine is very well thought-out. There's no internal hard drive, so it can be handled in a rough and tumble way (supposedly... we'll try to discourage that). The screen is very bright and sharp, it's got a built-in handle for lugging it around, and the keyboard has a rubbery membrane over it to prevent dirt and fluids from getting inside. Opening the laptop involves flipping up two latches and then raising the lid. When up, the latches look like antennae (and, I believe, actually ARE the wireless antennae) and when they're down, they serve to protect the USB and accessory jacks.

Needless to say, I'm pretty excited about it. Our oldest often asks to use my laptop or my wife's and now she'll have her own -- but with a twist. In my opinion, this is a perfect machine for a curious 7 year old to tinker with. Sure, it's not going to be exactly like the machines she'll use later in her life - but I don't think it needs to be.

She'll have plenty of time to worry about Excel and PowerPoint.

Technorati Tags: , , , ,
posted on Monday, December 24, 2007 10:26 PM Mountain Standard Time  #    Comments [0]
# Tuesday, October 09, 2007

missingbookmarks Lesson learned -- all that comes from Mountain View is not gold. Or stable. Or safe.

While I use del.icio.us for 99.47% of my bookmarking needs on the web, there are always a couple dozen or so URLs that I leave in Firefox's local bookmarks file. Examples are for sites that I want on the browser's toolbar, private or internal URLs that aren't public, and bookmarks that have search keywords assigned.

For a while now, I've wanted to sync up my Firefox bookmarks at home with the bookmarks on my office machine. Most of these get used on either machine and it's a hassle to remember to add those bookmarks and search shortcuts in both places.

So when I came across the Google Browser Sync extension, I thought, "this is PERFECT!"  It would sync up not only bookmarks but also settings and any open tabs. That seemed great for those times when I had something open for reading in the office, but didn't get to it. Shut it down on that machine and it would open up on my home machine later.

I installed the extension on both machines, let it sync up, and then merged the bookmarks in both locations. After that, I went through a process last night of cleaning up and re-organizing those local bookmarks. I spent over an hour getting rid of the ones that were old, cleaning out the dupes, and adding more search keywords.

Today, they're gone. On both machines. A couple of folders are completely missing. Nice, huh?

Thankfully, I found a backup of the bookmarks.html file from before I installed the extension... so while I've lost the cleanup work I did last night, I haven't completely lost the original bookmarks.

Anyway, be warned... if I'd have taken the time to browse through the Google Groups discussions for this extension, I'd have probably avoided it altogether and perhaps tried FoxMarks instead. But I figured Google's stuff is pretty solid... again, lesson learned. Thank goodness I didn't have it sync passwords and all of my other browser settings.

So... back to that cleanup effort (again).

posted on Tuesday, October 09, 2007 10:43 PM Mountain Daylight Time  #    Comments [0]
# Wednesday, August 01, 2007

Via a post the other day from Lifehacker, I've been checking out a new site called XTimeline at http://www.xtimeline.com. The site allows you to create web-based timelines based on data you provide, using a couple of different file formats (CSV or RSS), or by entering events on the timeline by hand. The coolest option is to provide an RSS feed and it creates a timeline with points along the line for each item in your feed. Once you create an account and log in, you can create your own timelines, share them with others (or make them private), embed them into your own site, and so on.

xtimelinesample

The image above is based on the data from a Yahoo Pipes RSS feed I created a while back. It's a feed that pulls together items from this blog, my del.icio.us bookmarks, and other online accounts I have. It's not very interesting or voluminous, but it did highlight how easy it is to create a timeline. The only thing that wasn't immediately intuitive was that there was an extra steps to "add events from RSS", wherein it takes the published date for each item out of the feed.

In addition to creating timelines from RSS feeds, you can upload data in CSV format, browse through a ton of public timeliness others have created, identify favorite timelines, rate them, tag timelines with keywords, and so on. Some cool examples include a history of the internet, the history of video games, and a timeline of music in the United States (embedded as an iframe below).

Creating an account is free and requires only an email address. I don't see options around "premium" services, so aside from some subtle ads on the site, there doesn't appear to be an obvious monetization plan -- not that wikipedia has one either, right? Either way, it's a really cool site for data and infoporn geeks. They've also got a blog where the founders/developers update on site improvements and changes. In their initial announcement, they answer the "Why Timelines?" question:

Why make a site just for timelines?
Making a dynamic timeline widget isn't enough -- you need to have a place to create, store, and share them with other people.  We like to think of xtimeline as a cross between wikipedia and youtube.  Like all user-generated content sites, you can upload your own thoughts, media, and opinions.  Eventually, we think some timelines will become well-known enough to be online references.

I really dig seeing cool visualization tools like this, especially when (just like Swivel and Many Eyes before) they make it so easy to explore and create new views of data. Well done!

posted on Wednesday, August 01, 2007 3:57 PM Mountain Daylight Time  #    Comments [0]
# Saturday, July 28, 2007

recycle A chain of blog posts came through my reader this week that discussed the value, or lack thereof, in "code reuse" for most development teams. First, some background...

It looks like the original article was "Internal Code Reuse Considered Dangerous" by Dennis Forbes (great blog, btw). That article was then referenced by Carl G Lewis (cysquatch), who largely agrees with the sentiment in his "Is Your Code Worthless" post. Finally, Scott Reynolds referenced Carl's blog post in a follow-up the other day, wherein Scott suggests that "Code Reuse Is Not the Villain".

Still with me? Good.

As I worked my way back in time (Dennis' original post is from 2005), it occurred to me that this line of trackbacks is a bit like the "telephone game" that we played as kids. As each person responded to the previous person, the meaning of the story changed in subtle (but important) ways.

In deciphering this, I hope it goes without saying that "code reuse" as a practice is a worthwhile goal to keep in mind. It's not always achievable, nor even desirable, but certainly it's something that good developers keep in mind as they work.

That said, Dennis begins by arguing against the management notion that code reuse saves money by "codifying the abilities of the team" -- thereby making the team easier to replace or downsize. Ouch.

Code in the library is considered an asset, and managers and owners like the idea that, while developing product A, as a side effect they're accumulating this great repository of generalized code which they'll be able to use for a completely different product - let's call it product B. Soon the domain knowledge of their developers won't matter (and thus they'll be expendable), because everything is encapsulated in common code: They've codified the abilities of their team.

I'm not sure how any worthwhile manager could get from Point A (the practice of "accumulating [a] great repository") to that particular Point B (where the "domain knowledge of their developers won't matter"). And in fact, Dennis' rebuttal to this point is that the opposite happens -- the more you grow internal frameworks and libraries, the more you depend on your developers. New developers, regardless of previous experience, have a substantial learning curve in front of them with any of your internal code.

And in that, I completely agree. Where I got lost in Dennis' argument was in the next portion where he appears to argue that code has no value beyond the developers writing it and the project they're writing it for. [emphasis mine]

The question every organization needs to ask itself, then, is what value they could sell their "reusable code" for - what, realistically, would competitors and new entrants in the field offer for it? The answer, in almost every case, is $0, and they wouldn't want it even at that price. There is extraordinarily little code theft in this industry (even though we're in the era of burnable DVDs and USB keys) because most code - above and beyond the industry-wide frameworks and libraries - has no value at all outside of a specific project with a specific group of developers. Trying to use it for other projects is often worse than starting with nothing at all.

This is the part that loses me completely, for two reasons:

  1. It assumes that the value of reusable code is measured by what an external entity would pay for it. I'd argue that it should be measured by its value to the company that owns it. Not just in that it saves time for the team that wrote it... but that it reduces bugs by ensuring that a bug fixed in one location is fixed for all locations. A user interface metaphor or workflow used in one place is used in multiple places. Blah, blah, blah, the usual examples... Reusing code in the correct way increases the value of a product in the eyes of customers and prospects and this has very direct value for the company's bottom line.
  2. That argument also ignores technology acquisitions. The value of Visio's code when Microsoft bought Shapeware was something (much) greater than $0. It's not as if Microsoft needed the customer base or the market share. Similarly when Google purchased Writely or when Yahoo bought del.icio.us. In each case, the acquisition was a technology purchase -- the acquirer was infinitely larger than the company being bought and wasn't already in competition with them. The purchase wasn't just for the customer list.

I actually think Dennis' point is best made in a bullet point later in the post. And the point is that code reuse merely for the purpose of code reuse is a waste of time and money. [original emphasis]

Internal code reuse for niche industries and domain specific problems can be very valuable, but code for generalized, industry-wide problems are seldom valuable unless you're truly developing it for industry-wide consumption (e.g. the .NET Framework is tremendously valuable code reuse). I have seen too many examples of large internal libraries that are largely duplications of vastly superior functionality existing in the .NET Framework or C++ Standard Template Library, or which could be better served by available professional or open source libraries. If your problem isn't domain or niche specific, but rather is industry wide, it is extremely likely that either a library encompassing it exists, or that it isn't a problem that is worthwhile generalizing

And here's where I'd agree... I, too, have seen many examples where companies simply reinvent the wheel in the name of "reuse". Hey, if it's ours then we can change it, fix it, and reuse it -- right? It's really a buy-versus-build debate. If your team is writing things like data access layers, UI controls, or validation tools in the name of "reuse", then you may as well go out to your parking lot and just light some cash on fire. At least it'd be quicker and you'll get the momentary heat and entertainment.

The above quote is what Carl's response (from last month) is based on... and while the post's title ("Is Your Code Worthless?") is plenty controversial, his purpose was really more to tell a story -- and a funny one at that. It's the story of a client company who felt that their internal code was so proprietary and so valuable that they couldn't possibly let a contractor look at it offsite. Instead, they had Carl travel 8000km to work on it at their location -- only to discover that the code was a complete disaster. What a great line...

I sat down and fired up Vim to start looking at their code and was INSTANTANEOUSLY BLINDED by the reeking bile that was pouring across my monitor.

Hilarious.

Lastly, it's worthwhile, I think, to differentiate between the development of internal business applications and developing commercial products. If you're building internal applications (e.g., payroll, HR, accounting types of systems), then managing reuse across multiple applications is probably not as important. There's still value in reuse for you, but your company doesn't lose customers if the display grid in Application A is different from the display grid in Application B. The tolerance for error is higher. With commercial products, though, it's a different story. It would be silly for the Word, Excel, and Powerpoint teams to all go create their own base UI libraries or text-formatting behavior. And the consequences of a mistake are greater and more easily measured.

I guess the point is to not get carried away with a "reuse is worthless" meme and suggest turning away from it altogether. In 16 years, I've worked on several product lines that made extensive use of shared/common libraries, to great effect and to great value for the company. Bottom line - the key is to pay attention to where building your own libraries for reuse makes sense and where you should simply reuse existing, proven libraries.

In either case, recycle the good stuff... future generations thank you. ;)

posted on Saturday, July 28, 2007 10:24 PM Mountain Daylight Time  #    Comments [0]

I've subscribed to Frans Bouma's blog for quite some time. He wrote a post earlier this week that echoed a meme floating around various development blogs and, at the end, he "tagged" anyone who was reading the post.

Let me just pass on the torch to every dear reader of this blog. So if you read this item, you are up next.

Not having been "tagged" before (it doesn't happen much when you have two readers -- and they're both just different browsers on your own machine ;-) ), I started to give it some thought.

What are the things in my life that I've just "gotta have"? The must-have gadgets and tools that I wouldn't want to do without.

I should make two very important distinctions... first is that the most important thing I have in my life is obviously my family, but they're not "things". The stuff below is a list of simple, material possessions. Secondly, let's ignore for the moment that all any of us really needs is sustenance, shelter, and safety. The point of the meme is simply to point out the gadgets, tools, or prized possessions you enjoy... so here's what I came up with.

Gadgets and Toys

Xbox 360 - While it was originally just mine, it's become something the whole family uses now. From the media center capabilities to family-friendly games on Xbox Live Arcade, there's plenty here for the non-hardcore gamer.

Nikon D70 - I wish I were better at taking photographs than I am... I do alright, but I try to avoid the Auto modes and my best pictures usually still require some trial-and-error.

Roland V-Drums - Rupturing my Achilles earlier this year was a big setback in my drumming. I'm able to do it for short periods now and it's very relaxing to put  my iPod on the 'Drums' playlist and work up a sweat.

Tivo - Once you've time-shifted television, there's no going back. And don't tell me about your Comcast or Dish Network DVR... it's not the same.

iPod - It's not my first MP3 player, but it's by far the best I've had. I just wish iTunes weren't such a P.O.S. under Windows. Mine is a 60gb iPod Photo... but I wouldn't mind moving to an 80gb 5G iPod at some point.

Software Tools

CodeRush and Refactor Pro - These tools are like crack for me. I get twitchy if I have to use a machine that doesn't have them installed. I think my team is tired of hearing me preach about how much I love using these.

SlickRun - Probably the first thing I install after Windows... there are so many ways of using it and many of the shortcuts I've defined are etched into my muscle memory.

FeedDemon - Sure, Google Reader's good... but for my money, you can't beat a well-written, fast desktop application. Plus, with the automatic syncing to NewsGator Online, I get the best of both worlds.

Reflector - I can't imagine any .NET developer not installing this on their machine right away.

SnagIt - I generate a LOT of screenshots. From graphics for our dev wiki to quick examples I attach to email messages, a picture is usually the quickest way to get a point across.

I think that's it... I could come up with a lot more (and may do a list like this one at some point -- if only as a Google-indexed reminder of the things to install), but this my current Top Ten.

(Sorry, Frans, that LLBLGen Pro isn't on that tools list yet. I've been meaning to try it out, honest! ;-)

posted on Saturday, July 28, 2007 7:54 PM Mountain Daylight Time  #    Comments [0]
# Monday, July 23, 2007

Every developer, or at least those who really love what they do, has a few side projects to work on. They're the palate-cleansers you turn to when you want to sink your coding teeth into a different problem for a while... they're your sorbet projects. 

itunesexportsolution Well, one of the side projects I've worked on this year has been iTunesExport - a .NET app that can export playlists from your iTunes library. It exports them in a variety of formats (M3U, EXT, WPL), can copy tracks to a new location, and has both GUI and command-line interfaces. I got involved earlier this year when I wanted to export playlists in a file format that it didn't yet support. I contacted Eric Daugherty, who owns and hosts the project's site, and jumped in to add the additional export type. Since then, I've added additional features and tweaks and it's been a pretty fun project to work on.

Yesterday, productivity blog LifeHacker did (another) post on it with some examples for using it. It was a cool surprise as LifeHacker is one of the feeds I subscribe to, so I came across their post randomly in my feed reading.

I added a comment to that post, but since it was my first comment to LifeHacker my registration is sitting in an approval queue somewhere and the comment's not yet visible. The other comments on that post had a number of questions about iTunesExport and I wanted to answer those and/or clarify what the tool does.

First, iTunesExport does NOT modify your tracks in any way, shape, or form. It won't convert to or from any file format and it won't strip DRM from purchased tracks. The only time it does anything with actual song bits is when you choose to copy tracks to a new location for your exported playlist(s)... and in that case, it's just doing a straight, bit-for-bit file copy.

Second, the purpose of iTunesExport is simply to let you export playlists OUT of iTunes and into a file format that can be read by another player (WinAmp, Windows Media Player, etc). In my case, I use it to make my iTunes Smart Playlists available through the Tivo Home Media interface on our television. With this in mind, we're very careful to NOT modify the iTunes library XML file. We're simply reading the playlists/songs out of it and then writing another file in the format you want. So the exporter doesn't do anything to play count, last played, or any other data in the iTunes library.

Finally, Eric and I are always interested in hearing suggestions and feedback for the app. Some of the recent changes/fixes, especially around internationalization and Unicode,  have come via testing and feedback from others.  Those are always the things that are most fun to work on because you know someone can use it right away. So while I've got a few ideas for things I'd like to add (including saving/restoring your settings, improved documentation, and some better reporting/feedback on what was exported), we'd love to hear other ideas for things the tool might do... so please send those along via the project's site or through SourceForge.

posted on Monday, July 23, 2007 12:41 AM Mountain Daylight Time  #    Comments [0]
# Sunday, July 22, 2007

I'm not much into the Harry Potter phenomenon, but I am in the middle of trying to learn WPF (Windows Presentation Foundation). I'm currently tackling WPF via Adam Nathan's "WPF Unleashed" book and plan to read the Petzold WPF book next (followed, perhaps, by the Sells/Griffiths book). WPF is conceptually very different from Winforms or other UI technologies that I've used, which makes the learning curve steeper than would be normal for "just another platform update". Anyway, you may be wondering what Harry Potter has to do with WPF...

blackfamilytree Well, a month or two ago, the folks at Vertigo Software released a WPF reference sample application called Family.Show. The application is a genealogy tool that let's you manage a family tree, along with information and photos about the people in the tree. It's since been updated with more features and it's simply a great-looking application. If, like me, you're trying to learn WPF then the coolest part of Family.Show is that they've made the source available for download. Sweet.

Earlier today, Liam Molloy (of Vertigo) published a post about a family tree he created for the "Black family" from the Harry Potter series. Using Wikipedia, Liam was able to piece together a fairly large family tree for Sirius Black, including photos (of the actors/actresses from the films) and the background stories for many of the characters.

You can download Liam's data files for this family tree, load them up on your machine, and go to town with the info-browsing. Note Liam's warning at the bottom of his post -- while he made an effort to remove any spoilers for the just-released book, he says it's possible that there's still one or two in there. Not having read any of the books, I wouldn't know either way... I just think this was a very cool thing to do from a data visualization perspective.

So... whether you're into WPF or Harry Potter (or both?), you've got a reason to go check it out.

(Side Note: The only drawback I've found with the app Vertigo built for Microsoft is that the background whitepaper for it was published in the XPS file format... and even though I've got Office 2007 installed, I still had to download a separate "essentials pack" to view it. What's wrong with a simple PDF?)

posted on Sunday, July 22, 2007 10:55 PM Mountain Daylight Time  #    Comments [0]
# Friday, July 20, 2007

One of the side-effects of having surgery earlier this week is that I've had time on my hands to get some reading done. I can't lift anything heavy yet and I'm having to take some pain meds... so my options are pretty much limited to reading, watching television, playing some Xbox, and using the computer. Even that last one can be dicey as I don't want to be anywhere near important code while taking these prescriptions. 

managinghumanscover On the reading front, I started reading "Managing Humans" by Michael Lopp (also known via his nom de blog, Rands) the other day and am nearly done with it now. The subtitle of the book is "Biting and Humorous Tales of a Software Engineering Manager", which I think provides a good idea of the book's overall "vibe".

I know I've mentioned his site, Rands in Repose, a few times in previous posts and it's one of the top feeds in my subscriptions. He writes from plenty of real-world experience on managing developers, development projects, and most importantly, managing organizations on behalf of those developers and development projects.

His is one of those sites that you go to as soon as you see a new post has arrived. The writing and insights are just that good... so when I learned he was publishing a book, I knew that it'd be a must-read.

A lot of the material in the book comes from his blog, though it's been re-worked to some degree to flow better in book form. The humor, edginess, and "bite," however, all remain intact. This is NOT your typical management advice book -- it's focused squarely at people who manage development teams that are building software products.

The book is broken into three sections --

  • The Management Quiver, where each chapter discusses tools (or "arrows in your quiver") for surviving the manager-employee relationship (from either direction). Detecting agendas, handling someone in the middle of a freak-out, and saying "no".
  • The Process is the Product, where processes and approaches for getting a product out are discussed. Status reports to monitor progress, capturing the context for work being done, and the all-important version 1.0.
  • Versions of You, which contains chapters that discuss the various personality types that are common in a software team. The Organics, the Incrementalists, and the Free Electrons. If you've been a developer (or managed developers) for any period of time, you can't read through these chapters without laughing out loud at the way he describes these familiar personalities.

The chapter on saying "no" is particularly hilarious, as it describes the process by which a manager becomes a manager -- essentially, pixies arrive and provide you with an elegant top hat that has the words "I'm The Boss" emblazoned on the front. Of course, the key thing that you don't immediately recognize as a new manager is that the back of the hat reads, "For Now." And so begins the lesson about a manager NOT being infallible and truly needing a team to push back for the improvement of the process/product/company. Team members forget the "For Now" part and let the title and position of "The Boss" get in the way of fighting for good ideas.

Saying no forces an idea to defend itself with facts. It forces a manager under the influence of his top hat to stop and think. Yes, I know that top hat can be intimidating, and yeah, I know he's the guy who signs the checks, but each time you allow your manager to charge forward with unchecked blind enthusiasm, you only reinforce his perception that he's never wrong. That's a ticket straight to Crazy Town.

As the subtitle suggests, the book is aimed squarely at software engineering managers. But one of the things I really like about his style is the dual angles for the advice he provides. While he's suggesting an approach for handling a problematic situation with your manager (the President, CEO, CTO, whatever), he's also providing advice on how to not be that problematic manager as you manage your own team.

The book does so well with this multi-angle approach, that I'd also recommend it for people other than engineering managers, including developers of all levels and non-technical folks who regularly work with a development team.

posted on Friday, July 20, 2007 10:21 PM Mountain Daylight Time  #    Comments [0]

One of the cool features of FeedDemon, the news reader I use, is called "News Bins" -- it's essentially a place you can drag and drop items that come through your feeds to save or organize them for later. I used to use them essentially as "bookmark folders" for items I wanted to come back to.

In the latest version, News Bins can now be sync'd with NewsGator Online in the same was as all the rest of my feeds and folders can be. Even cooler, Nick Bradbury (the primary FeedDemon developer) set it up to create an RSS feed for any synchronized News Bin. So anything I drop in there is exposed via a syndicated feed to anyone who's interested in seeing the things I've come across.

With that, I've created a "Link Blog" and the feed for it is in the navigation items on the left. Right now, I've created only one and will use it for development-related items, plus the occasional 'general tech' tidbit.

I can see how this feature would be useful in a few ways, though... creating a link blog for "family", another one for "work", and so on. FeedDemon has keyboard shortcuts for dropping items into the feed easily so I can quickly share items that people in my family or at the office might find interesting.

Nick has a post from just after the 2.5 release that also discusses this feature and there's also a screencast with a walkthrough.

Technorati tags: , ,
posted on Friday, July 20, 2007 9:30 PM Mountain Daylight Time  #    Comments [0]
# Thursday, July 19, 2007

The last DasBlog release under ASP.NET 1.1 went out a couple of weeks ago, so I decided to give that a run. It all seemed to go well when running it locally, which was a good sign... and seems to be the standard for the last few updates I've done. Once I have it running locally, it's just a few config changes to get it going on the server. This one was just slightly different because there were some script files moved around and I initially had it running under ASP.NET 2 on my local machine. In any case, the site's using it now and no hassles.

I've been lurking on the DasBlog developer mailing list for a couple months now and there's a good deal of activity. Currently, the project's dev team is working on the initial ASP.NET 2.0 release, including support for Medium Trust. As I mentioned previously, there's also a theme contest going which should yield some cool new looks for folks to use.

I keep meaning to check out some of the "open source template" sites out there, but then I get sidetracked with other things... with this update, I'm settling for a few new navigation links and an updated blogroll.

Technorati tags: , ,
posted on Thursday, July 19, 2007 11:06 PM Mountain Daylight Time  #    Comments [0]
# Wednesday, July 11, 2007

usestairwell Christopher Hawkins has a post from last Friday wherein he describes his "dream" software projects. The funny thing is that he refers to them as "silly", but they seem like pretty real and useful projects to me. The film production system, in particular, sounds like a fun project to work on.

While I wouldn't say that mine are quite "dream" projects, there are a couple of systems I've always thought would be a lot of fun to work on.

Poker Machines for Casinos -- Partially because I enjoy playing some poker myself and partly because I think there would be some interesting problems to solve. There have been a number of products announced that bring the "automated" world of online poker into casinos, bars, or other hangouts.

Note that this is NOT video poker of the "Jacks or better" variety. In some cases, the game is still "regular" poker, but everyone around the table plays the hand via a touchscreen and there's no dealer. In other cases, it might be a small table where two people can play heads-up while they wait for a seat at a regular table or while hanging out at a bar and watching a game. There are enough differences between these "electronic tables" and regular online poker software to make it pretty interesting.

Elevator Control Systems (for high-rises) -- This is the one that usually gets a laugh when I tell people about it. But if you imagine a tall building with multiple tenant types (retail, offices, or residential apartments, etc), then there are some intriguing things to consider. How do you optimize the flow and availability of a car at any given time? If an car's at rest, do you send it to a certain floor to wait for a call? During the morning, you have one type of flow (from the ground floors up to the offices) and in the late afternoon it's the opposite. What about lunch hours? How do you handle things like redundancy or failover if a car has to be taken out of service for repair? What can you provide facilities and security with in the way of monitoring and management?

Both of these seem interesting to me as intellectual projects... but I think what intrigues me is that they both offer a lot of opportunity for data visualization and some infoporn. In both cases, you can imagine administrative/monitoring interfaces that provide all sorts of interesting views of data (historic poker hands) and state (elevator state).

I'm interested in reading what sort of "dream" projects others write about.

  Technorati: , , ,
posted on Wednesday, July 11, 2007 11:07 PM Mountain Daylight Time  #    Comments [0]
# Sunday, July 08, 2007

Ben Scheirman is running a themes design contest to get some new looks in the themes list for DasBlog. To encourage designers to submit their original designs, he and Scott Hanselman are putting up a $100 gift certificate for Amazon.com.

While I "know what I like" when it comes to design, I've got virtually no talent for creating a web theme from scratch... This could be a good opportunity for someone with talent, though, and a hundred bucks at Amazon.com? As I've said since we signed for Amazon Prime, "If I can't get it at Amazon using Prime, it's probably not worth buying..."

Speaking of DasBlog, the last ASP.NET 1.1 update went up a couple weeks ago. I'm running it on my local machine and it seems to be fine... so I'll update the server soon. On the other hand, an ASP.NET 2.0 version that supports Medium Trust is in the works. Maybe it's worth waiting... either way, I'm stoked to see all the renewed activity on the dev mailing list (where I've just lurked for a few months now).

  Technorati: , , ,
posted on Sunday, July 08, 2007 10:50 PM Mountain Daylight Time  #    Comments [0]
# Friday, July 06, 2007

I can't make it due to scheduling conflicts, but the Startup Weekend in Boulder begins tonight. The idea is for a group (a few dozen) to start with an idea this evening and work like mad until Sunday evening to turn that idea into a "thing".

I'd bet on some red and bleary eyes come Sunday night and Monday, but it should be a lot of fun and a great experience regardless of the business/product outcome.

Good luck, gang!

 

Technorati tags: , ,
posted on Friday, July 06, 2007 11:39 AM Mountain Daylight Time  #    Comments [0]
# Sunday, April 29, 2007

This post from Phil Haack points to Charles Petzold's concern that "prose is dead" in technical books. The concern was based on Jeff Atwood's comparison of two different WPF development books. Wow, how's that for name dropping? Three names in two sentences. I ought to point out that I have a great deal of respect for Charles, Jeff, and Phil and all three write blogs that are in my must-read list.

As shown in Jeff's comparison, one book (Petzold's) has large blocks of uninterrupted text and appears to be entirely monochrome, while the other book (by Adam Nathan) has smaller blocks of text and makes liberal use of color and visuals.

I agree with Phil's commentary about "visual learning," and his pointer to the excellent "Head First" books is spot-on, but I actually think there's an even more important thing to consider here. That's the subject matter... in this case, the topic of both books is the new Windows Presentation Foundation API that's a part of the .NET 3.0 release. I find Petzold's statements that "Powerpoint has won" and the "battle for the future of written communication is over" to be a bit unfair. It implies that readers are looking for visuals alone or that well-written communication is no longer important.

Anyone who has seen a WPF sample application knows that this is not the same ol' Win32 GUI toolset. In the hands of a talented designer, it's shiny. It's pretty. It glows. It makes you want to look at it... is it unreasonable to prefer a book that conveys the same feeling?

It's also worth noting that the bar for information presentation has been raised over the past few years. As computer users become more familiar with different types of data visualization, and as flashy UIs like Vista's Aero take hold, expectations for UI are higher. Even in a typical "line of business" application, it may not be enough any more to use the same old Windows UI toolkit. You could certainly argue that it's possible to build an efficient, intuitive, and fast application using the same Windows UI tools we've used for nearly 15 years. No question. But few applications compete only in their specific market or product area. Most are competing for attention with other applications on the user's machine. Or with a massive web designed, in many cases, by some very talented designers. If you want customers to enjoy using your application, as opposed to feeling like it's drudgery, spending some time (and money) on its appearance and visualization is critical.

Now replace "using your application" with "reading your book". 

I've not read either book yet (though I plan to do so shortly, thanks to the O'Reilly Safari Library subscription -- highly recommended), but I don't think it's unreasonable that Jeff (or anyone else) prefers the book that has more visuals. A book whose purpose is to introduce a "Presentation" framework probably ought to have the presentation of its content made a higher priority than would a book discussing some "under the hood" technology (say, the Windows Communication Foundation, or WCF). In a book that covers UI controls, gradients, and different layout options, I'd probably like to see... UI controls, gradients, and different layout options.

That's NOT to say that the communication of ideas and information aren't the highest priority. No amount of visual flash will makes up for poorly-written, poorly-edited, or poorly-communicated content (and that's the true evil of Powerpoint). And few are as well-regarded as Petzold when it comes to communicating difficult technical content in a way that's easy to understand and put into practice. An entire generation of Windows programmers, including myself, was "raised" on his Programming Windows titles. I'm certain that I'll find his book well-written and that it'll provide useful information on WPF.

But it's not hard to see why some would prefer a book that presents a presentation framework in a presentable way... is it?

posted on Sunday, April 29, 2007 10:47 PM Mountain Daylight Time  #    Comments [0]
# Sunday, April 22, 2007

I've been meaning to re-pave my home machine for a couple of months now. It had a ton of stuff installed, uninstalled, updated, and so on... plus, as I mentioned previously, I'd been toying with the idea of pushing it up to Vista Ultimate. Well, after getting those hardware problems taken care of, I went for it.

It's actually been a pretty smooth process, though it seems like a re-pave takes longer each time I do it. And it's not just getting all those apps installed... it's also all the little settings, utilities, checkboxes, and customizations. It really does take a while to get a new rebuild to feel "comfortable".

One thing I've done for the last few years that does make this process a LOT easier is to organize my hard drives into multiple partitions. I've typically done this with Partition Magic, though there are are other alternatives that seem to get high praise. I keep all the stuff that I don't want lost in a rebuild on that second partition (seen as a D: drive). Under WinXP, I'd move the "My Documents" location with TweakUI (Vista has this capability built-in), I make sure to put SQL Server's data location over there, and obviously any development projects. It makes it a lot easier knowing that C: can be wiped clean and rebuilt without losing the stuff I care about.

I just wish there was a way to also back up all those little settings and customizations that get made over time (e.g., my preferred layout/view for file Explorer, various registry hacks, and customized views in Outlook).

Anyway, I had this drive partitioned already from the initial XP setup... so moving to Vista was pretty easy. I'd actually like to make my C: partition a little larger (D: has lots of free space) and I was excited to learn that Vista has partition resizing/moving built-in. It's under the Computer Management MMC plugin through Control Panel->Admin Tools. It turns out, though, that Vista doesn't let you extend a bootable partition (e.g., my C: drive) -- only shrink it. I'm sure there's legacy some reason for this, but given that it's a basic capability in 3rd party tools like Partition Magic and others, it seems silly that Vista won't let me. To make matters worse, I hear stories of people using Partition Magic to create NTFS partitions and then Vista can't read them. Not cool... but space isn't that big an issue, so I'm looking at those other options.

All in all, the process went smoothly and nearly all of my hardware had drivers installed automatically. The one exception was the built-in SD card reader on this laptop. The cool thing, though, was that Vista saw the problem and notified me of a solution -- updated drivers were available through Dell's site. Everything else installed and has been working well and performance is great -- the machine definitely feels snappier than it did under WinXP.

As a reference for the scores above, the machine is a dual core Inspiron (T2500 processor at 2GHz) with 2GB of RAM, NVIDIA GeForce Go 7800 (using Microsoft's WDDM driver at 1920x1200), and a 7200rpm Seagate Momentus drive. The display performance, in particular, has been great and Aero looks gorgeous with the bright TrueLife (glossy) widescreen display.

Vista's got a ton of UI tweaks, so maneuvering around has taken a little getting used to... and I have to admit to turning off UAC. Maybe I'll turn it back on now that most everything is installed and settled, but how many "Yes, I'm sure" buttons does a guy need to click? I'm still trying to get used to the newer Explorer UI and I wish I could get the Sidebar and its gadgets to Auto-Hide (the way the Task bar can)... but I really dig the ability to quickly search the Start menu.

Overall, I still feel like I'm settling in... but all my apps and tools are installed and things seem well. Now I'm going to go watch some fancy window animations for a while.

posted on Sunday, April 22, 2007 11:50 PM Mountain Daylight Time  #    Comments [0]
# Sunday, March 18, 2007

Just over a week ago, I came across this posting on the 37Signals blog that discusses some of the resources they used to populate testing databases for their new product, Highrise. Given that this product is a contact manager, they wanted contact names with details... and lots of 'em. In the comments to that post, "Jes" mentioned yet another resource -- the "Fake Name Generator" web site. He mentioned that you get full contact details for a fake identity and that you could get up to 20,000 for free. Hmm.

This interested me because I always like getting hold of useful data to tinker with on side projects. One of my passions in development is for data visualization, or "infoporn," so the more data to look at, the better. I've downloaded data that includes the Netflix Prize data set, the Enron internal emails released by FERC, and geo-coded zipcode lists. You never know what might be useful, right?

But now you're thinking... "if those contacts are fake, then why would they be interesting?"

The reason is that the person/people behind the Fake Name Generator have gone out of their way to make it credible-looking fake data. For example,

  • The cities match the states.
  • The zip codes match the cities.
  • The area codes (mostly) match the zip codes (I found a Bakersfield area code with an LA zip code).
  • The names are more than just random letters and resemble names you'd find in any US-based list of contacts.

Having a set of data like this greatly improves the testing of code that works with contact details. Who among us developers hasn't created fake records for "Donald Duck", "John Smith", and "Joe Blow"?

My understanding is that the data is created from various legitimate sources, but the values across columns are randomized -- so that someone's real first name is used with someone else's last name, someone else's address, someone else's city, and so on. A few searches turn up other discussions of this data, including a set of contacts uploaded to Swivel.

The data is provided free for up to 20,000 fake identities, provided that you're willing to wait up to a week to download your data. If you need it sooner, you pay $10US to expedite the process.

A few other cool things about this service:

  • You can specify which columns you'd like in your data, including credit card numbers (fake - but numerically valid), SSN/National ID numbers (also fake - but numerically valid), and gender.
  • Email addresses use domains from various temporary email services (mailinator.com, mytrashmail.com, etc). Again, they validate but aren't useful as anything other than test data.
  • You can get the data in various formats, including HTML, Excel XLS, SQL script, or delimited text files.
  • You can specify the countries and name types for your data... so if you need some data that includes Swiss addresses and Hispanic name sets, you could request it.

I also found the data to be reasonably well distributed, at least in the US-centric set of data I received. For example, across 20,000 contacts, I found:

  • The bulk of addresses were in California, Texas, and New York. The fewest were in Wyoming, Delaware, and New Hampshire. I had one record whose state was 'NN' -- ??
  • Most surnames started with the letters M, S, and B. The letters with fewest surnames were X, Q, and U.
  • The zipcode with the largest set of contacts was 90017 (Los Angeles), but the Area Code with the most contacts was 703 (Virginia). As I dug in further, it seemed somewhat logical because the LA area has numerous area codes spread across it.
  • Social security numbers had starting numbers that were evenly distributed from 0 to 6 (2500-3500 each), with just 700 of them beginning with the number 7. There were none that started with the number 8 or 9. I learned on this CodeProject article that SSNs beginning with 9 are reserved for special government use (Witness Protection, I'm sure... hah!), but I'm not sure why there were none starting with an 8.

Anyway, I've been impressed. It's an interesting service and seems worth bookmarking/tagging the site for later... you never know when you'll need a bunch of bogus (but real looking!) data.

Note: I've got no affiliation with this site whatsoever, aside from requesting a set of 20K fake identities and getting an email with download details a week later.

Technorati tags: , , ,

posted on Sunday, March 18, 2007 7:22 PM Mountain Daylight Time  #    Comments [0]
# Tuesday, March 13, 2007

Jeff Atwood, of Coding Horror, is on a blogging tear lately... I don't know how he manages to knock out such frequent posts on such consistently interesting topics. Today, I read his post on building your own hardware (with an interesting intro on how Google's servers have always been custom machines).

I've modified my machines in the past, adding RAM or drives here and there, but I've never built a machine from the basic components. For the last several years, I've purchased Dell machines (often from their Outlet, with great results) and I've never had a problem with their quality (and have yet to need to customer support, knock wood). Prior to that, I'd purchased Toshibas, Microns, and beige-box generic machines from local vendors.

That said, I'm not opposed to building my own machine. I can certainly connect the parts and troubleshoot various issues. So why don't I? Because I'm scared. That's right... I'm afraid.

My primary concern with building a machine from scratch is all the fine print I see in hardware compatibility. Whenever I read detailed specs or reviews for hardware components, I get the impression that it's VERY easy to build a door-stop. Front-side bus speeds here, parity errors there, chipset compatibility back here, and so on. And tracking down those types of problems scares the bejeebus out of me. I know how to debug software. I can find and fix memory leaks. But random reboots or POST errors? Cripes, where do I begin?

Reading Jeff's post earlier today, it struck me that there ought to be a way for a guy like him, who really follows the hardware world and enjoys spec'ing out machines, to make a little cash at it. Not enough to retire to the beach and I doubt Michael Dell will lose any sleep -- but if it's easy to set up, doesn't require any support, and it's something you're already interested in... why not?

On a whim, I checked NewEgg to see if they have an affiliate program... and sure enough, they do. I think it'd be awesome for Jeff (or similar hardware guru) to spec out a few machines on his site.

My primary machines for the last couple of years have been laptops. Currently, my work machine and personal machine are both fully-loaded Dell Inspiron 9400s -- a back-breaking desktop replacement that's very fast. The two are only physically distinguishable by a little fish sticker I let my daughter put on my personal machine. And I'm generally happy with these machines...   but who has just one or two machines? Our house also has the aging "Wife Laptop" (due to be replaced with a Tablet, I think), an old file-server, and my music-and-video production machine (not to mention a couple of Linux boxes Tivos).

But... show me the list of parts to build a "Little Bang" machine, a Media Center PC, a Windows Home Server box, the end-result of the Hanselman Developer Machine, etc. I've purchased and assembled electronics kits in the past and it's great fun... mostly because the parts-list and compatibility issues are taken care of for me and I can focus on the actual building part.

You'd want to make it clear that you're NOT supporting these parts or the resulting machine. It's strictly "do it yourself" and "at your own risk"... but if it's a parts list from someone who actually groks this stuff, I'd be happy to add those parts to my NewEgg shopping cart using your affiliate links.

There's lots of precedent and you have a decent audience of gear-heads... so what do ya say, Jeff?

Please?  ;-)

Technorati tags: , , ,

posted on Tuesday, March 13, 2007 11:42 PM Mountain Daylight Time  #    Comments [2]
# Sunday, February 18, 2007

The concepts behind the new Yahoo Pipes application really impress me as a "mashups" engine (to say nothing of it generally being an amazing web-based application). I've not played with this sort of app before (are there others that do something similar?), but found it to be very intuitive and easy to work with. I did wish for a few other sources (more geo feeds) and tools (manipulating item text/descriptions on the fly).

This article on Lifehacker is a great example of a basic use for Pipes -- create a single, aggregate feed of all the feeds in your life (Flickr, blog, del.icio.us, etc). Following the directions in that article is a good way to see a basic aggregation in action. Nick Bradbury (of FeedDemon fame) built another cool example, mixing the iTunes Top 10 Songs feed with a YouTube search to find videos for those songs.

I'm hoping to spend more time with this app over the next couple of weeks. I think it's got a lot of potential for creating custom news sources... and I'm sure the coolest uses are yet to come.

posted on Sunday, February 18, 2007 10:25 PM Mountain Standard Time  #    Comments [0]
# Sunday, February 04, 2007

I finally got around to registering with "Share Your OPML" this weekend. I like the idea of being able to compare my subscriptions with others and thought it might be a cool way to learn about some new feeds. I didn't realize it before, but it turns out I currently have 354 feeds... which is nowhere near the list of "most prolific subscribers" (rick pogg -- 8,210 feeds?!?).

To me, the coolest feature on the site is the "Subscriptions Like Mine" option -- it essentially compares my subscriptions to the subscriptions of others on the site. The more shared feeds there are, the greater the "strength" number for ranking similarity... which is nice because I can see a highly-ranked user's feeds and pick up some additional subscriptions that are likely to be of interest. This feature and the "Who Subscribes To..." feature had me clicking around and exploring feeds for quite some time.

I did run into a couple of issues with the site, but nothing too worrisome. First, there are two options for providing your OPML subscriptions to the site -- upload an .OPML file to the site or provide the URL for a file elsewhere. I tried to go the URL route, but that didn't work -- just a blank page after submitting the URL. Not a big deal, though I do think pointing to an URL makes it easier to keep my list of subscriptions up to date.

The second thing I ran into was a blank page when trying to view the subscriptions for some of the top names on the "prolific subscribers" list. I'm sure it has to do with the volume of feeds, though I was able to get at pages for subscribers with over 3000 feeds (yikes!).

Some other features I'd like to see are a sense of activity (how many people use the site? how many total feeds?), timeliness (how often are new users joining the site? when was a user's feed list last updated?), and some UI niceties like sorting (based on feed/subscriber counts, etc). Based on the "Community Weblog" and developer-oriented mailing list, it's hard to tell how much new activity there is around the site.

Getting an OPML file for my subscriptions was pretty easy with FeedDemon. Simply choose the "Export Feeds" option under the File menu and select which feed folders to include. I then hand-edited the file to remove a few feeds that are personal/internal feeds and would just clutter up the public subscriptions.

In doing this, it occurred to me that a cool feature for FeedDemon would be to auto-export and upload an OPML file from time to time. I probably add/remove 5-10 feeds each week (and suspect that my total subscription list stays in the 350 range). If FeedDemon could be told to export an OPML with a certain name and upload it to a certain location on a daily/weekly/monthly basis, that'd work very well with the SYO site (assuming the "enter an URL" option were to work correctly). Many bloggers provide an OPML file for their subscriptions directly on their blog, so this would have value beyond just the people using SYO.

On the other hand, with NewsGator Online, maybe the ideal solution is for NGOS users to have a unique URL that would provide a dynamic OPML and per-feed options for being included/excluded from the public OPML. Looks like the NGOS "Locations" option may get me close... I'll have to research that some more soon.

In the meantime, give Share Your OPML a shot... you're likely to come up with a few new feeds for your aggregator.

posted on Sunday, February 04, 2007 11:25 PM Mountain Standard Time  #    Comments [1]
# Thursday, January 25, 2007

A few Microsoft folks have blogged about their first ever Amazon.com orders and that got me curious about my first order. I had no idea that the "My Account" page had an archive of orders going back that far, so I went to check it out. On the "My Account" page, simply change the "View by Order" dropdown list to "Complete order history sorted by year" and click the Go button. The resulting page has the most recent orders on it, but another dropdown list will contain an item for each year going back to your first.

Turns out that I've been an Amazon.com customer for nearly 10 years! On February 24, 1997, I ordered the first volume of "Pattern Languages of Program Design", by Coplien and Schmidt (act now, only 2 in stock!). I later purchased other volumes, though not all five that are listed for sale on the site.

Looks like my largest order was in early 2001, when I often used Amazon.com to purchase software tools and books for the team I was managing at the time. An order containing multiple JBuilder 5.0 upgrades was $4,225 (!). For a time in 2000 and 2001, I was purchasing a lot of things for the office through Amazon.com. They had great prices, quick shipping, and it was more convenient than the PO-based system we had previously used for many things.

It also surprised me how many books (mostly Java and process related) were purchased for the team around that time. It looks like we got just about every Java book published for a while there... I still think well-written development books are a cost-effective learning tool -- provided that you're able to learn from a book format. Many people aren't... and need a lecture or "show me" approach to learning.

It's been a while since I purchased a tech book, though, as I think O'Reilly's Safari service is a great value for us book-learner types. Their new "Library" offering gives you nearly unrestricted, electronic access to a ton of books. They also include a lot of books from non O'Reilly publishers, including Addison-Wesley which publishes some great .NET books. If you absolutely need paper from time to time, the service includes "download tokens" that let you get chapters in PDF format for printing and offline viewing.

That hasn't completely curtailed our use of Amazon.com, though. We became members of their "Prime" program late last year, which gives you free 2-day shipping and cheap overnight shipping for about $80/year. If you have lots of family/friends that live in other parts of the country and use Amazon.com a lot, it's a great value. It paid for itself pretty quickly over the holidays. And with free 2-day shipping, it means that Amazon is the first place we go now for many household things we need. No shipping fees, no tax, decent prices.

The only downside I've found with Amazon Prime is that not every item is "eligible" for Prime. Many of the items on the site are actually sold and shipped by 3rd-party vendors... but only items where Amazon.com is the seller are eligible. And while each product page tells you whether or not the item is eligible, it'd be great if they provided an option to search only eligible products. Maybe it's there and I just haven't found it... but overall, we're still happy with the service.

Technorati tags: , , ,
posted on Thursday, January 25, 2007 8:28 AM Mountain Standard Time  #    Comments [0]
# Tuesday, January 23, 2007

I've got an open position on my team for an experienced ASP.NET/C# developer in Boulder, Colorado... if you've got experience building production-quality, commercial web applications, get in touch with us. Even better if you share our interest in data visualization and analysis. So on the off chance someone sees this in an aggregated feed or via Technorati, here's the ad:
--------------------------

Title: Software Engineer
Business Unit: Global Energy Intelligence
Reports To: Vice President, Engineering
Location: Boulder, CO

Global Energy Intelligence, a leading provider of energy information solutions, is seeking an experienced Software Engineer to join our commercial development team and be a part of our aggressive growth.

The ideal candidate:

  • is a C#/.NET developer with proven experience building production, commercial-quality applications.
  • is comfortable with advanced SQL syntax and SQL Server.
  • has a thorough understanding of OOA/OOD concepts.
  • is flexible and open to new ideas or change.
  • has some passion and drive to excel in their career.
  • has strong development experience building dynamic, data-driven ASP.NET web applications (though Winforms experience is a plus).
  • is self-directed, organized, and extremely attentive to details.
  • recognizes the value in agile, iterative development processes.
  • communicates well with technical and non-technical peers alike.

Global Energy Intelligence is made up of experienced professionals whose sole focus is making a positive impact in the energy intelligence and information solutions industry. We pride ourselves on getting the job done for our customers and using the latest technology to do it. We strive to build software in a way that's delivered quickly, highly-reusable, and low-maintenance. We have a generous benefits package, including company-subsidized medical/dental coverage, flexible spending accounts, and a 401k plan. We also offer a casual work environment and a flexible paid-time-off structure.

 

If you're an experienced developer looking for new challenges and the above qualifications align with your skills, we want to hear from you. If you know the difference between a 'programmer' and a 'software developer', we want to hear from you. If you're in the top 20% of your current team and you're tired of carrying the other 80%, we want to hear from you. If you learn new things, build new software, write quality code, and constantly refactor for improvement, all because you HAVE to -- because you can't NOT spend time on those things -- then we want to hear from you.

 

We're building an all-star team. Lazy, uninspired, dead-weight developers need not apply.

 

This is a full-time employment position. Local candidates are preferred. No relocation is provided. No contractors. No agencies. No recruiters. No phone calls. No lightweights. No exceptions.

 

To apply for this position, please send your resume via email to jobs@globalenergy.com with "Boulder SW Engineer" in the subject.

 

Technorati tags: , , ,
posted on Tuesday, January 23, 2007 8:08 AM Mountain Standard Time  #    Comments [0]
# Wednesday, January 17, 2007

Four successful Colorado entrepreneurs launched the TechStars program this week in Boulder. This initiative will take ten new startup teams (of up to 3 people) and provide a "summer camp" environment to help get their ideas and businesses off the ground -- that is, if summer camp includes some initial funding, access to a variety of experienced mentors, hosting and legal services, and a summer full of educational sessions.

While TechStars doesn't require that the teams be from the Denver/Boulder area, they do expect the teams to spend the bulk of the summer here (based on the FAQ). With its "college town" status and mountain scenery making it hard to leave, Boulder has long been a thriving place for entrepreneurs and small businesses... and this program looks like a great way to jump-start some new additions to the startup community. I also like that the application process is informal and accessible. No need for a formal business plan or pitch session -- just a strong idea and willingness to make a run at it this summer.

Anyway, it sounds a great opportunity for some enterprising folks with creative product ideas. I look forward to watching the TechStars blog for updates as the program gets started.

 

posted on Wednesday, January 17, 2007 11:02 PM Mountain Standard Time  #    Comments [0]
# Sunday, August 27, 2006

Just a test to verify the configuration for Windows Live Writer. So far, the auto-formatting and styles appears to work fine. Just need to test uploading and formatting of an image.

And a map:

 

posted on Sunday, August 27, 2006 9:46 AM Mountain Daylight Time  #    Comments [0]
# Tuesday, June 27, 2006

A couple years ago, Ted Neward compared the state of ORM tools and technologies in computer science to the Vietnam conflict. It was distasteful then, but I suppose it had the intended effect of most provacative statements – it got attention.

Given the distastefulness of the analogy, I’d hoped it would go away but Ted has now decided to update it and give a history lesson of the Vietnam conflict along the way.

Turns out that elucidation doesn’t change anything… it’s still distasteful.

Exactly how many lives have been lost and/or forever altered by Object/Relational Mapping?

posted on Tuesday, June 27, 2006 11:40 AM Mountain Daylight Time  #    Comments [0]
# Thursday, April 06, 2006

The New York Times had an article yesterday entitled “Software Out There,” which discussed the whole “programmable web” movement that’s sprung up over the last couple of years. The author says that the internet is entering its “Lego” era.

It was actually a semi-interesting article, but I wish I could read an article in a major paper just once without cringing at the leaps of faith and hyperbole made by the author. Is it so hard to get an expert to look over an article before publication? The key example from this NYT article is this section (mid-way through Page 2):

Mr. Ozzie, who used the Firefox browser (an open-source rival to Internet Explorer) during his demonstration, said, "I'm pretty pumped up with the potential for R.S.S. to be the DNA for wiring the Web."

He was referring to Really Simple Syndication, an increasingly popular, free standard used for Internet publishing. Mr. Ozzie's statement was remarkable for a chief technical officer whose company has just spent years and hundreds of millions of dollars investing in a proprietary alternative referred to as .Net.

At what point did .NET become a “proprietary alternative” to RSS or any other “standard for internet publishing”? Or vice versa?

But hey, why pass up the opportunity to put out something that seems semi-scandalous (“Imagine, a CTO for Microsoft using Firefox! Suggesting RSS as an alternative to .NET!”).

posted on Thursday, April 06, 2006 8:02 AM Mountain Daylight Time  #    Comments [0]
# Monday, March 27, 2006

The NewsGator world is really evolving quickly. I’ve followed the company since it was just Greg Reinacker writing the NewsGator Outlook add-in… reading feeds in Outlook wasn’t my preferred style of working and I ended up going with FeedDemon very early in its life. Still, Greg’s company is here in the Denver area and they’re a .NET shop so it’s always been interesting to follow. Things got pretty exciting when Brad Feld’s Mobius Venture (also local) invested and then NewsGator acquired FeedDemon and brought in its author, Nick Bradbury.

Over the weekend, Nick announced that they’ve hit the 2.0 milestone with FeedDemon. It’s a major update and congratulations to Nick on getting through it… I’ve been testing the FD pre-releases on a secondary home machine since the original 1.6 process started and it’s improved substantially over time. It’s been a long process, but I think the results are worth it. The new treeview for feeds is great, but the most welcome feature will definitely be synchronization with NewsGator Online. I was skeptical at first whether or not this would be something I’d use, especially early on when it was “subscription service or nothing”. But I said then that “I’ll give this stuff a try” and I have. Now, after working with it for a while and “finally seeing the light”, I’m happy to say that I’m hooked. With this feature, I’ll have full synchronization between my home/weekend machine and my machine in the office. When I’m not at either machine, I’ve got the NewsGator web-based reader as well (which, btw, has improved quite a bit since that skeptical blog post last year).

To improve things even more, NewsGator recently acquired the SmartRead application and brought in its developer, Kevin Cawley. Kevin and I have actually worked together in the past and he’s an all-star mobile developer. He really “gets” the mobile/handheld form factor and I’m certain he’ll do great things under the NewsGator banner. I’m pretty amped about having that “full synchronization” extend right out to my phone, so he’d better do great things! ;-)

Anyway, congrats to everyone at NewsGator for the exciting steps they’re taking.

posted on Monday, March 27, 2006 12:11 PM Mountain Daylight Time  #    Comments [0]
# Saturday, March 25, 2006

Like many other developers, I’ve fallen into (and occasionally out of) David Allen’s “Getting Things Done” (GTD) way of working over the last 18 months or so. It started with the book, and then later the e-book, but more than either of those, I’ve found that quick and handy shortcuts keep me on track.

One of the key elements of GTD is that you put your trust in some external system to keep track of all the “stuff” you need to do. This gets it out of your head, where it’s nagging at you and consuming bandwidth. Obviously, having some effective shortcuts for putting tasks into your system quickly is very useful. Most of the shortcuts revolve around dealing with Outlook, which I use to organize everything in my work life and a whole lot of things outside of work.

For example, I use the heck out of Bayden SlickRun on my machine. As quick-launch utilities go, it’s by far my favorite. It’s lightweight, takes very little system resources, and can be configured to perform a variety of creative tasks. Some of the GTD-related shortcuts I use include:

  • nm – To create a new message. This shortcut simply calls outlook.exe with “/c ipm.note” as a command line parameter. Even with Outlook minimized, this will open a new message window.
  • nt – Probably the most used shortcut, this creates a new task by passing “/c ipm.task” to the command line.
  • na – Creates a new appointment with “/c ipm.appointment”.
  • nc – Creates a new contact with “/c ipm.contact”.
  • nn – Creates a new note with “/c ipm.stickynote”.

These get more use when I’m out of the office with my laptop. When I’m in the office, I use a Microsoft Natural Keyboard 4000, which has several shortcut keys across the top (above the function keys). Once you install the Intellitype software for the keyboard, you can set those keys to do whatever you want. In my case, they create new messages, appointments, tasks, notes, and launch Visual Studio — all one touch away.

One of the key elements of GTD is the idea of context — that certain types of tasks can best (or only) be accomplished in certain situations. Various GTD discussions groups frequently have on-going discussions for right/wrong/best context, but it just boils down to how each person works. One example frequently given is @errands or @phone, where you might categorize tasks that can be done while you’re out running errands or while planning to make phone calls. Neither of these work well for me, as I don’t spend a lot of time running errands or on the phone.

On the other hand, I have @computer which has tasks that can be performed whenever I’m at a computer (home or office) — web sites to look at and that sort of thing. I also have @development, which has tasks that are specific to development. That is, I have Visual Studio, SQL Enterprise Mgr, Vault, and my other tools open… so now I can start digging into those tasks. I also like @Home, which is handy for storing the things I want to do around the house (or more commonly, the things I don’t want to do but need to get done anyway).

The e-book mentioned above also has the suggestion that you create categories for people you regularly work with. I’ve found this to be helpful for our management meetings at work. Because many of the people I work with travel regularly, I add reminders of things I want to mention/ask the next time they’re in town and we meet. For many topics, that approach works better than sending out email messages that will just be a part of the flood when they plug into their hotel room.

Once you get used to the keyboard shortcuts for asks, you can add items to your list as soon as they come up — thereby freeing you up to stay focused on the task at hand. When editing a task, type the task title, hit ALT+G to open the categories list, type the first couple of characters of the category you want, SPACE to select it, ENTER to close the window, and ALT+S to save the task — after a while, it becomes second nature and takes seconds to add a new task.

More recently, I’ve added ClearContext to the mix. This is an addin for Outlook that makes organizing your Inbox very easy and efficient. It analyzes your email patterns and can move/highlight the messages you receive based on sender, topic, priority, etc. There are a number of other productivity boosters that, as you learn them and make them habits, can quickly add up. I really like the ‘task’, ‘delegate’ and ‘defer’ options, which let you turn a message into a task for yourself, delegate it as a task for someone else, or simply hide it away until a later date. When you first install it, you don’t notice much beyond a few new toolbars here and there. But as you read through the guide and get a handle on its features, you realize there’s a lot under the hood. They just released their latest version with these features and their ‘basic’ version can now be used for free. If you spend much of your day organizing or managing projects in Outlook, give their demo a try.

 

posted on Saturday, March 25, 2006 9:00 AM Mountain Daylight Time  #    Comments [1]
# Wednesday, March 15, 2006

I had bookmarked this a while back and came across it recently when clearing things out that are now on del.icio.us.

It’s a hilarious send-up of the many management and market consultants that swarm around charging ungodly rates to put together quadrant charts and product positioning diagrams.

My favorite line has to be “When one of our new-age marketing gurus or design experts or consultants has an idea, the rest of us look at him or her with serious expressions and write stuff down on paper”.

Huh Corp

 

PS: A few things struck me really funny during this post. First is that when I did the Google Image searches on “quadrant charts” and “product positioning”, some of the images that came up were from real-world Huh Corps… Also, many of the images that came up when searching on “product positioning” were in fact quadrant charts. Second is that the Huh Corp site has Google Adsense on it which, due to their satirical use of buzzwords, ends up showing ads for more real-world Huh Corps. Awesome.

posted on Wednesday, March 15, 2006 4:57 PM Mountain Daylight Time  #    Comments [0]
# Tuesday, February 21, 2006

Mitch Denny has a good post entitled “Day Programmer vs. Night Programmer”… he makes the case that there are two different types of developers. The “day” programmer who works his/her 8–5 shift and then checks out, versus the “night” programmer who needs more than that from his/her job. The comments to Mitch’s blog post are also insightful, with one person observing that the post won’t likely reach a “day” programmer (who, by definition, isn’t likely to spend time reading up on blogs and staying current in the development world).

My experience is that it boils down to passion for what you do and that’s a very hard thing to find.

I’ve worked with many “day programmers” in the past and am certain that they’re the majority. Most people (in all walks of life) are inherently lazy and want to do the bare minimum required to get through their tasks and collect a paycheck. When the clock strikes 5pm, it’s yabba-dabba-doo right out the door. The notion of spending time outside of those hours to learn new skills, improve the skills they have, or otherwise invest in their abilities is completely foreign. These are people who like the idea of moving ahead in their career, but won’t put in the time and effort to make it happen.

At work, I’ve had some open positions for a while and have a reputation with HR for taking a long time to fill them. I take some ribbing about it, but everyone agrees that “hiring right” is far more important than “hiring fast”. Hiring right means finding those who are passionate about what they do, who are engaged by their job, and who want to excel. As a hiring manager, this is exactly the type of person you want to find and keep. That’s not easy, but you’ll get far better work from a small team of top-notch “night” developers than you will from a legion of average “day” developers — where “better” is defined by speed, quality, reusability, maintenance costs, and other common metrics.

When talking with others about this phenomenon, I use an analogy comparing a small, highly-skilled “special forces” team (self-directed, very focused, and creative when solving problems) to a large squad of recent boot camp graduates (requiring constant management, very specific direction, and not looking to be creative). Interestingly, Mitch refers to this in his blog post when remarking that “day programmers are mostly led [by others] and will seldom lead,” but that “night programmers mostly lead [others]”.

On finding them… At one point, I’d hoped that posting an ad specifically calling for passionate developers would help weed out the “just a job, any job will do” type of submissions. You can still find that ad on this page (second listing at this writing). Unfortunately, while the tone of the ad hits the mark, it doesn’t serve to weed out unqualified applicants. It’s too easy to send an email with an attached resume.

The bigger issue in hiring the “passionate developer” is that these aren’t people who are typically looking for a job. And when the time comes to look around, they’ll usually find a job through word of mouth. Recruiters can sometimes help on this front (at least in terms of weeding out the deluge of resumes that come in from most ads), but a hiring manager will almost always have the best luck with referrals — from other passionate developers.

On keeping them… If the job they have isn’t stirring their passion, or if they’re not feeling rewarded for what they bring to the table, “night programmers” don’t turn into “day programmers”. Instead, they will go someplace else, where they DO feel excited and rewarded. How people feel rewarded is a topic for another day, but the bottom line is that it will vary for everyone. For some, it’s base pay. For others, it’s access to tools and great hardware. For still others, it’s just interesting problems to solve. Usually, it’s some combination of things and knowing what it is for each person on your “special forces” team is absolutely critical to long-term success.

This is an issue I’ve discussed here in the past, but there are some other great bloggers out there that post regularly on hiring, managing, motivating, and inspiring a development team. In addition to Mitch’s blog, check out Christopher Hawkins, Rands in Repose, and Software by Rob (his recent “How to Piss Off Your Software Developers” article is excellent).

posted on Tuesday, February 21, 2006 2:35 PM Mountain Standard Time  #    Comments [0]
# Sunday, February 19, 2006

Jeff Atwood had a good post this past week, entitled “Fear of Writing.” As I read, it really resonated with me and my desire to blog more often.

I’ve got a bunch of notes/URLs set aside as potential blog topics and have been saving these for well over a year. (At some point, I’ll have to clean them up because I’m sure many are now well past their “sell by” date.)

So if I have all these things that I think are noteworthy, why can’t I bring myself to blog more often? I think the reasons boil down to two things:

  1. Making it a habit. To get good, you need practice. Practice is repetition. Repetition forms habits. Right now, I’m simply not in the habit of writing up a few posts a week. I have to set reminders to myself. I know it’s something I want to do, so I think the reason it’s not yet a habit brings me to reason #2:
  2. That fear thing. The issue here is the fear of writing something that’s simply not worth reading. I think writing up a good post requires some up front work — to organize the thoughts, the research and links, the writing, and the editing. And anything less has the potential to pollute the bandwidth.

I’ve written a fair amount before, including many magazine articles and a monthly “Best Practices” column. I know it’s something I enjoy… but writing for a blog is different than writing for a magazine or a full online article. It’s a smaller scale. It’s typically much shorter. It should be more frequent. It’s far more casual and it’s supposed to be a conversation — a single voice in a larger community.

With magazine articles, it was a larger task  (thus requiring more preparation) and a looking deadline made the commitment easy. But once it was done, it’s over. Only occasionally would I hear from someone who’d read the article… and when I did, it was months after I’d written it (most magazines have a 3–4 month lead time).

A blog post is a smaller task, but the feedback (good or bad) is more immediate. Someone can comment or send email within minutes of me clicking the “Post” button. This tight feedback loop is the part of blogging that I think is so cool, but it also instills the fear — what if it sucks? What if I got it wrong? What if I hit “Post” too soon?

I suppose admitting the fear is the first step to overcoming it… so, my name is Jeff and I have a fear of blog posts.

posted on Sunday, February 19, 2006 11:10 PM Mountain Standard Time  #    Comments [0]
# Sunday, February 12, 2006

I had occasion to use Scott Willeke’s “Less MSIerables” tool this morning. I had download some code samples to check out and they’d been posted as an MSI package. While I like that format for installing apps and utilities I will keep around, it’s overkill for things like code samples or sample projects — things I don’t need cluttering up the Add/Remove Programs dialog and am likely to look at quickly and then delete.

It worked like a champ when pointed to an MSI file and made it easy to choose which files I extract. The registry key option (Allowing you to right-click an MSI and choose “Extract”) didn’t always work for me, but running the app itself and selecting an MSI isn’t too big a deal.

Well done… thanks, Scott!

posted on Sunday, February 12, 2006 1:28 PM Mountain Standard Time  #    Comments [0]
# Friday, January 13, 2006

Within the last couple of weeks, I’ve started to use the del.icio.us service more and more. It’s called a “social bookmarking” service… and while brief, it’s not the best way to describe it. A (wordier) description would be “an online service that lets you bookmark sites and assign descriptive tags to those sites.” The “social” angle comes up in that your bookmarks are shared by other users of the service (they also provide some “antisocial” settings).

A tag is essentially a keyword that you define and you can use multiple tags for a single bookmark. If you’re familiar with Flickr for photos, it’s a similar service for bookmarks. Not coincidentally, both Flickr and del.icio.us have been purchased by Yahoo — Yahoo’s loving tags these days.

When I first checked it out last year, I thought it was a cool idea but I’ve got over a thousand bookmarks in Firefox. I’m fairly anal about categorizing them into folders and the thought of going through all of that to assign tags and descriptions wasn’t appealing. On the other hand, synchronizing those between machines and different browsers can be a hassle… and they’re not accessible from other machines. Enter the “del.icio.us Loader for Firefox” by Julian Bez. With this tool, you upload your Firefox bookmarks.html file, assign some tags, and run it. It will show you all the bookmarks it found in the file and let you visit each, add/remove tags, etc. I found that splitting my bookmarks.html file into multiple .html files made this process easier. It took some tweaking, but it was worth it when it came time to assign tags.

So now I can go to my del.icio.us page from anywhere (as can anyone else) and get at my bookmarks: http://del.icio.us/jdonnici

If I want to quickly get at all items that I tagged with a certain word, I just use this format: del.icio.us/jdonnici/[tag_name]. Like this or this.

If I want to see everyone’s bookmarks for a certain tag, I use this format: del.icio.us/tag/[tag_name]. Like this or this.

Tags can be concatenated together with the “+” plus sign like this: http://del.icio.us/jdonnici/dotnet+sqlserver 

Finally, I can subscribe to various del.icio.us feeds in my aggregator, including a specific tag or a specific user. This makes it easy to see the things that other people are finding interesting. There are lots of other tools that I’ve yet to tinker with, including an “Inbox” for tags and the ability to tag something as being “for” another user (presumably making it show up in their inbox). I can also go to the main site page and see both “recent” and “popular” bookmarks.

For Firefox, I’m also finding the del.icio.us Firefox toolbar extension to be invaluable. It puts a shortcut on your toolbar to your tags, as well as a shortcut that opens a tagging window for the current page you’re on. Clicking that lets you tag the page and even shows you suggested tags based on what others have used for that same page.

As I said, I’m just getting started but I do see how this could be a MUCH better way of managing bookmarks and coming back to useful content than the old bookmarks file and/or Favorites directory. It takes some work up front if you have a lot of bookmarks… and I can see how keeping your tags clean and consistent is pretty important (the site provides some tools for removing and renaming tags). But it’s free and seems very much worth the effort.

posted on Friday, January 13, 2006 10:45 AM Mountain Standard Time  #    Comments [1]
# Saturday, December 10, 2005
When confirming the URL for Business 2.0 magazine for my last post, I noticed in the Google results that they have a blog. I like the magazine a lot, so hopefully the feed will be valuable as well.
posted on Saturday, December 10, 2005 8:46 PM Mountain Standard Time  #    Comments [0]

A recent issue of Business 2.0 magazine has a feature with a number of top executives and business world celebrities (Balmer, Zander, Cuban, etc) providing advice and insight. Most of them are the typical “power of positive thinking” type of thing, but a couple of them were really pretty good:

Never write when you can talk. Never talk when you can nod. And never put anything in an e-mail. — Eliot Spitzer (NY Attorney General)

I really like this one because all subtlety is lost in email or IM. It’s so easy to fire back a quick response without reading it from the recipient’s perspective… and without the benefit of tone-of-voice or facial expressions, statements that were meant to sound neutral can seem overly direct or even derisive (I think this is especially true for tech professionals, many of whom are either very direct to begin with or not always strong on social subtlety).

Sometimes, you just have to pick up a phone or walk down the hall to make your point — in addition to making sure that the message is received the way it’s intended, it’s also often faster. For all the convenience of email and IM, the lack of subtlety and clarity often means it takes three and four replies to get a point across. So what might be a five minute conversation in person takes an afternoon to resolve via back-and-forth messages.

When you get out of bed in the morning and think about what you want to do that day, ask yourself whether you’d like others to read about it on the front page of tomorrow’s newspaper. — Warren Buffet

This one struck me because it’s so easy to go through the day bouncing from one task to the next without thinking about the big picture or how the outcome of those tasks is received. If you’re planning your day with accountability to a larger audience in mind, you’re more likely to focus on the right thing instead of just the next thing in front of you. It’s not hard to imagine that larger audience — your company’s management, its shareholders, your customers, your family, etc.

 

posted on Saturday, December 10, 2005 8:41 PM Mountain Standard Time  #    Comments [0]
# Saturday, November 26, 2005

I got around to installing the latest CodeRush and Refactor Pro this morning and was pleasantly surprised… the install recognizes that I had both VS.NET 2003 and VS.NET 2005 installed and offers to register the add-ins with both IDEs. I was expecting to need two installs, each specific to a different version of the IDE (seems most control libraries are going this route right now).

Even cooler was that the settings and preferences I set in 2005 were used for the 2003 install as well. Given the ton of options CR and R! make available, it was nice not to have to wade through all the preferences twice! Well done, DevExpress!

 

posted on Saturday, November 26, 2005 8:15 AM Mountain Standard Time  #    Comments [0]
# Friday, July 08, 2005

I’ve been a FeedDemon user since it was in beta and immediately purchased a license once Nick Bradbury enabled online sales. I’ve since been a happy customer and would pay for any major upgrade down the road.

Unfortunately, Nick’s company was recently acquired by NewsGator, which makes an Outlook AddIn RSS reader by the same name. I looked at NewsGator originally (before jumping on the FeedDemon beta), but decided the Outlook integration wasn’t for me. Last year, NewsGator made some of its Outlook-based customers unhappy by going to a subscription model… and I was glad I hadn’t gone that route. 

What was previously a standalone product that worked well now had all sorts of ancillary “stuff” decorating it… they have a web edition, something called “smart feeds”, something else called “industry intelligence feeds”, some “premium” content, syncing capability, NewsGator Online, NewsGator Mobile, NewsGator Etch-A-Sketch, etc. If you’re using all that stuff, there’s no question that paying for a service that centralizes and synchronizes your RSS experience has immense value.

But what if you just want the plain-old, standalone Outlook AddIn? Can’t have it. It’s combined with these extra options into a few Consumer-or-Business bundles — only available via recurring subscription. Hmm… Glad I’m using FeedDemon, I thought at the time.

Until today, when I see that FeedDemon’s going pretty much the same route. So now the NewsGator VC team has a new plan for more renewable revenue. Oh boy.

Going forward, I have to pay an annual fee [2] to use a product that requires no on-going commitment or service from the vendor. And if I don’t pay the fee, it stops working. But, they say, I’ll get updates for a year. Sure… but there’s no commitment that I’ll see N new features added within 12 months. Or that the new features added will be compelling to me. Still, I’m forced to pay the subscription if I want to keep using the basic functionality I need.

So why do I have an issue with this subscription model? Because my basic needs don’t require any on-going service from the vendor. I’ve purchased a license to use an application. It doesn’t cost the vendor anything to support my use of that application, whether I use it once a month or spend my entire day in it. There are no servers to maintain. There is no staff choosing the latest and greatest data for me.

With a few exceptions [1], services and content should be sold as subscriptionsthey provide on-going value.

Standalone applications, on the other hand, are pretty much the same on day 365 as they were on day 1. As such, they should be sold as version specific, one-time-fee, licenses.

If NewsGator released a new FeedDemon 2.0, and if it had some decent features I’d use, I’d pay an upgrade cost. But once I’ve made that purchase, supporting me as a customer doesn’t cost NewsGator a dime. If I’m not using the web edition, synchronization, custom feeds, etc, all of which would require someone to support server-based services, why am I now going to be paying for those on an on-going basis?

Given that the RSS reader space is overflowing with options, more are on the way, and many of those options are either free or open source, why would a vendor make getting at their popular commercial product less flexible?

My suggestion to Nick, Greg, and the NewsGator crew is to make the licensing as simple as possible.

  • If the widget(s) you’re purchasing from us can be used standalone without any of our service offerings, it’s licensed as a product. If we put out a new version and you like it, you pay an upgrade cost.
  • If the widget(s) you’re purchasing from us require any sort of on-going service, you’re going to pay a recurring subscription fee. Stop paying the fee and you no longer get the service. Email feeds, synchronization, premium content, and so on.

Look at the popular services around us… using the Netflix (content) service has on-going costs (shipping, server-based account management, etc), so I pay a recurring fee to them. Listening to satellite radio (content) requires an on-going signal and infrastructure maintenance, so I pay a recurring fee to XM Radio. Playing online games requires an on-going connection (service) and is heavily server-based, so I pay a recurring fee to Xbox Live.

Look at the standalone products around us… We bought our cars and don’t pay Honda or GM an on-going fee. The cars do today what they did when we bought them. I bought my computer and don’t pay Dell an on-going fee. It does today what it did when I bought it. I bought Microsoft Office and don’t pay Redmond an on-going fee. It does today what it did when I bought it.

Why would I want to start renting a standalone software application now?

Now the caveat:

One of the “benefits” announced with NewsGator’s acquisition of FeedDemon was that licensed FeedDemon customers will get access to NewsGator’s “Business Standard” services for two years. I do think that’s fair and I’m happy to give this stuff a try. I’ve even created a NewsGator Consumer Standard (free, web-only, like Bloglines) in advance to check it out (I think the UI for reading is clunkier than Bloglines, but it’s passable). 

When the time comes that using FeedDemon costs me extra money, I’ll have to look long and hard at how I’m consuming and using RSS feeds. Maybe at that point, I’ll have fallen in love with the service-based capabilities… in which case, I’ll gladly pay the annual service fee. If not, someone else will get my business.

Going this route is a big risk for Nick and for the NewsGator crew. Nick, in particular, has some exposure here… he’s the popular developer of several popular applications. His user base has, in a period of two months, been told that they WILL be moving toward the NewsGator system and they WILL be moving toward a recurring fee structure. 

NewsGator is betting that the existing FeedDemon customer base will fall in love with the server-based capabilities. On the other hand, any existing FeedDemon customer who just wants the basic client app that he/she has today will get a service bill at some point. On that day, RSS Bandit, Bloglines, and other readers are going to start to look pretty attractive.

UPDATE: Per Jack’s comment, it looks like they’re doing the right thing by existing FeedDemon customers. According to Nick’s blog entry today, the FeedDemon application won’t stop working once the subscription expires. The service-oriented features (synchronization, in particular) will likely stop, but that’s to be expected. I still think it’d be nice for customers who don’t need the service options at all to be able to buy a one-time, version-specific license for either FeedDemon or the NewsGator Outlook edition. Still, this is a huge step in the right direction for existing customers and a great example of a vendor listening, and quickly responding, to their customers. Well done.

[1] The exceptions I can think of are products that are likely to require heavy ongoing maintenance or support. High-complexity and/or mission critical applications. For example, we pay for several licenses to the .NET Subscription Service from Developer Express. We do this for two reasons… first, it’s high-complexity and mission-critical for us. Second, I know right up front that I’ll be making regular use of the vendor’s support staff. Build a feature-rich grid control from scratch and there are bound to be glitches and bugs. Those bugs hurt us and hurt our customers, so I’m happy to pay for support that lets us complain and get a fix or workaround quickly. I’m also happy to use that support when we have questions about how to use these controls to their fullest. Further, if we don’t renew our subscription, we lose upgrades and support — but NOT the products we originally licensed. I love their stuff and it’s worth every penny. 

posted on Friday, July 08, 2005 5:16 AM Mountain Daylight Time  #    Comments [0]
# Sunday, July 03, 2005

Steve Makofsky (who works on the MS Longhorn team) has a post today about the difference between programmers and software developers. Like Steve, I think Eric Sink’s article on hiring does a good job of capturing the intricacies of hiring developers for a small ISV. Steve’s addition that developers “do what they have to do to ship” is about as succinct, and accurate, a summary as you can get.

I’ve felt this way for a while and try to write our open-position ads to reflect it… Here’s an opening I posted last week. If you’re in the area and fit the bill, send a resume in via Monster.

I also really enjoy the small-team, ISV experience where a developer who’s passionate about their job can work with a similarly inspired product team… and quickly get cool solutions in front of customers. No red tape, no meetings about meetings, no need to painstakingly document each pixel in advance. Just solid idea, design, and implementation.

posted on Sunday, July 03, 2005 10:44 AM Mountain Daylight Time  #    Comments [0]
# Tuesday, June 28, 2005

With the purchase of Keyhole (URL is now redirected) a year or so ago, Google picked up an application that lets you literally “fly” from one place to the next. You can zoom and pan, like with most mapping applications, but you could then enter a “destination” address and the software would zoom back, slide over, and then zoom in to your destination — giving the sense of flying.

Today, they released Google Earth, which raises the bar even further. For starters, the base version is free (Keyhole used to be about $30 for the personal version). They have a “Plus” version, which adds GPS support, basic importing, and some drawing tools, all for $20. For $400 (and up), they have Pro and Enterprise options aimed at business uses.

This version has the ability to view layers, such as restaurants, ATM machines, lodging, and so on. They even give you layers for crime statistics, census data, and congressional districts. You can turn on off roads, political boundaries, and terrain. As you’re viewing the imagery, roads and highways are overlayed on top of the images, which makes it easy to get your bearings (much easier than Google Maps’ satellite view).

Streets are displayed above the image No overlay makes it hard to get oriented
Street names overlayed on the aerial imagery make it easier to navigate Where the hell am I?

The interface is very polished (more so than Keyhole was) and all navigation is smoothly animated (via DirectX). You can rotate, zoom, place pushpins (like bookmarks), print, email, and so on. Perhaps most impressive is that you can tilt the perspective so that the view appears to spread out in front of you (and you see the horizon). I also like how the UI tells you the current altitude of the “eye” — that is, the zoom level you’re currently at is translated into ft about the earth’s surface (see below).

Well, well worth a download. Just plan on a productivity hit while you explore.

Google Earth's Navigation UI

 

 

 

 

 

posted on Tuesday, June 28, 2005 5:36 AM Mountain Daylight Time  #    Comments [0]
# Saturday, June 11, 2005

There’s an interesting discussion going on in the comments of Eric Wise’s blog about interface implementations versus type inheritance. I respectfully disagree with rlewallen’s post that an interface implementation serves as a "has a" relationship -- and most OO literature would disagree with that notion as well. "Has a" implies a composite relationship where a whole is made up of parts -- An Order object "has a" OrderDetails object. An Invoice object "has a" Customer object. That an interface "has" properties and methods" isn't the same thing, as any type "has" members -- class, interface, struct, and so on.

An interface defines an "is a" relationship... SqlConnection "is a" disposable object (e.g. implements IDisposable). A collection "is a" enumerable object (e.g. implements IEnumerable). Your Customer "is a" comparable object if it implements IComparable.

In terms of when to use one or the other, there are a couple of thoughts that come to mind for me.

First… My feeling is that inheritance is widely overused and that it often paints developers into a corner. Deep hierarchies tend to propagate themselves in that specialization rules out wide reuse… so when the developer needs something that’s “close to, but not quite” an existing class, they’re typically going to have to subclass again. This isn’t a .NET specific thing at all, as I saw it a lot in my Java days and in other OO languages (Delphi, VFP, and even PHP where OO isn’t enforced). Note that I’ve worked with C++ as well, but am not a fan of multiple inheritance environments. In general, I think developers are better served with composite (“has a”) relationships over inheritance. Make small building blocks and then “compose” them to get big components.

The key question is “when do I use an interface versus a implement base class?”. Years ago, someone (and I’ve long since forgotten who the author was) explained somewhere that an interface makes sense when a type “is also something else”. That is, a type that implements IComparable might also be a Customer, a string, an Invoice, and so on — but the manner of comparing them is very different. So while I know I want to compare two Customer types or two Invoice types, I really don’t want to assume anything about how they’re compared.

A type that implements IDisposable might be a SQL connection, a file handle, a graphics object, and so on. If all of these things had to inherit from either a “disposable” implementation, you’d have some unwieldy class hierarchies — and ugly code as the implementation for disposing of these things is very different. So if there’s no shared functionality (which would imply using a base class that provides it), then an interface lets you talk to widely different objects using the interface contract. The example I often use is:

A Car, Truck, and Boat might all be subclasses of the MotorizedVehicle base class. You have shared implementations here, dealing with starting an engine, basic navigation, and other functions related to a mototized vehicle. However, the MotorizedVehicle base class might implement the IDriveable interface – providing Steer, Accelerate, Decelerate, etc. While you could avoid the interface and declare those members on the base class, using IDriveable lets you implement behavior for your Bicycle, Scooter, and other non-motorized types that can be driven.

posted on Saturday, June 11, 2005 4:57 AM Mountain Daylight Time  #    Comments [0]
# Monday, November 22, 2004

Christopher Hawkins addresses a post from Joel On Software's discussion groups. The author isn't happy with his job because he's involved with technical sales, building proposals, and other non-coding activities.

I tend to agree with Christopher's response on this. As nice as it might be some days to just put on some music and sling code, that task doesn't have the value in the market that it used to. Can you find that job? Sure, but there are fewer of them and the pay won't be what it could be if you're adding value elsewhere in the process also.

I liken to to mowing the lawn or raking leaves. I actually find those tasks to be enjoyable and relaxing (though not exactly stimulating). But how much are those tasks worth if I'm paying someone else to do them? Not much. On the other hand, what if you're a landscape designer who can come up with the whole yard's design, coordinate with various vendors to get the materials, and then execute on the design as part of a team? You've got more value and maybe every now and then you can pick up the rake. Meanwhile, your employer can find just about anyone to push the mower or rake the leaves.

Note that this is not about the complexity or difficulty of yardwork versus writing code. It's about adding value to an entire process, instead of being one cog in one particular wheel in one part of the whole device.

And mostly, it's about employability. Add value in a way that someone else (and these days, someone somewhere else) can't and your job is no longer just a commodity. Show that you're a key part of the whole process. Get involved in figuring out what's being built. Get involved in the architecture and design work. Get involved in the sales support process. Be the "go-to" person.

I can't remember where I read it, but someone earlier this year put it well in a blog post (paraphrasing from memory): Those programmers who want to sit in a cube, limiting themselves to just writing code, and waiting for a complete spec doc to get tossed over the wall, are going to be in for a surprise. They may come in and find that the doc was shipped overseas instead.

posted on Monday, November 22, 2004 3:41 AM Mountain Standard Time  #    Comments [0]
# Tuesday, October 19, 2004

Ed Yourdon has an op-ed piece in SD Times that essentially tells IT professionals to cowboy up and stop the whining. Ask textile or auto workers from the 80s how effective politicians, unions, and trade organizations are in preventing globalization for commodity work.

I've said it before, but adding value is the only way to create job security -- go beyond being a "coding commodity". Be indispensable. Like it or not, plain old "gimme the specs and I'll code it" programmers are a dime-a-dozen.

Speaking of which, if you're up to it, we are hiring.

posted on Tuesday, October 19, 2004 5:19 AM Mountain Daylight Time  #    Comments [0]
# Sunday, August 22, 2004

Dave Donaldson for President! ;)

This is something I struggle with at work. It's frustrating when colleagues doesn't understand "the why," and even more so when you sense that they don't really care to. It's even more fun when you ask why something was done a certain way and are told "I saw it was done that way in XYZ component, so I copied that code here."

Ever since reading Steve McConnell's Cargo Cult Software Engineering, this is an issue that really resonates with me. You can wave sticks around all you like, but if there aren't any planes on the way, then you're just getting exercise. Not knowing "why" something works (or doesn't) means you're just going through the motions. As McConnell quotes in the article, Einstein said the definition of insanity is doing the same thing over and over again, but expecting different results. Shouldn't take Einstein to see that if you're responsible for building something (anything?), the "why" for the choices you make is more important than "how" they're implemented. Especially with software, where there are usually many ways to accomplish a given task -- if you don't know the "why", then how do you know which method is best?

I'm imagining a conversation with the architect designing my house: Architect: "So then, Jeff, we're going to put a beam here through the middle of this room." Me: "Having a beam there would suck... why do we need it?"  Architect: "Well, that's how it's been in other houses I've designed and that's just how I learned to do it." Me: "Hit the bricks."

Which leads to the "adding value" rant... Dave also mentioned those who just want to get the bare minimum done and go home. If that's your goal, you're not adding value to your organization. These days, "writing code" isn't, by itself, enough to add value. There are people on the other side of the world happy to do that for a fraction of what someone here makes. So how do you add value? My opinion is that you do it by working with everyone in the organization to serve the customer, no matter what it takes. Work with the product people as they figure out what the product should be and how it should evolve. Work with the sales people who know what potential customers are looking for. Work with the support people whose phones ring when the product falls short. Work with the management team to understand the overall business' needs and direction. Be flexible. Be proactive. Be innovative. As cliched as it may sounds, work to see the "big picture".

Anyway, Dave, thanks for a good post. I've subscribed!

posted on Sunday, August 22, 2004 4:45 PM Mountain Daylight Time  #    Comments [0]
# Sunday, July 11, 2004

The more of his "Business of Software" articles I read, the clearer it is that Eric Sink just "gets it". I've read the BoS series on MSDN from the start, as well as his various weblog posts, and it's clear that he's spent a lot of time pondering what makes development really work. I also like that his advice obviously comes from someone who's been "in the trenches", understands real-world commercial development, and lives it each day. The series on the "22 Immutable Laws of Marketing" is a great example of his ability to break down software-business issues for the pocket-protector crowd.

This latest MSDN article is a good summary of things to look for when hiring developers into your team. What I really like is how he refers to "shrinkwrap qualities" -- those qualities that differentiate a good programmer from a good commercial-product developer.

My own experience is that there are lots of developers who pay lip service to OO design, architectural consistency, reuse, current documentation of all kinds, and so on -- but not all developers maintain that discipline day-in and day-out. And an even smaller percentage of those have the "shrinkwrap qualities" -- the ever-present understanding that what they're writing will eventually be in the hands of a paying customer. And while a well-designed, elegantly implemented software product is important (especially for the on-going maintenance and evolution of the product/product line), the end-user just wants an application that helps them get their job done and make their life easier.

Go forth and subscribe.

posted on Sunday, July 11, 2004 1:37 PM Mountain Daylight Time  #    Comments [0]
# Saturday, July 10, 2004

Andy Hunt and Dave Thomas, authors of The Pragmatic Programmer, did an interview with Artima last year and somehow I missed it until this afternoon. Great stuff here, but the part I enjoyed most was right up front when they talk about craftsmanship and how easy it is to fall into a trap of "I work on this piece and only this piece" on large projects. They refer to a quarry worker's creed -- We who cut mere stones must always be envisioning cathedrals.

The idea, of course, is that even those who work on small pieces of a much larger puzzle have to have the big picture in mind. Without that, the result is a finished project that lacks an overall, complete vision. Ok, so your part of the application is the database design, or the exception management, or the communications layer -- all are parts of a larger work that couldn't be built by any one person. Work on the stones but think of the cathedral. Take pride in your gargoyle.

The interview is well worth a read.

posted on Saturday, July 10, 2004 11:08 AM Mountain Daylight Time  #    Comments [0]
# Thursday, June 17, 2004

I just came across the blog of Alan Cameron Wills and had to subscribe in my feed reader. His first post, back in April, covers a development topic that is near and dear to me -- de-coupling components so that the parts of an application can be viewed independently. If you've done it well, adding/changing components to the overall system is trivial.

In the past, I've used the phrase "build a platform" to describe the approach, but the idea is the same -- rather than try to eat an elephant all at once (tackle a big project), take it in smaller bites (break the big project into small projects). View the app as a platform on which you can build components and capabilities.

Alan focuses his blog topic on the independence of those smaller projects (and says it all with far more clarity than I could). When you view a big project as a set of independent, smaller projects, it's easier to add other small projects (new components) later. If you go in with that thinking up front, your architecture is far more "pluggable" than if you view it as one big application and just start tackling it "a form/function/feature" at a time.

Good reading.

posted on Thursday, June 17, 2004 3:39 AM Mountain Daylight Time  #    Comments [0]
# Wednesday, June 02, 2004
This little utility lets you paste a code snippet into an editor and it generates the HTML to display that code in roughly the same way as VS.NET. Don't like the default styles? Well, the download includes source! (Note: LGPL license)
posted on Wednesday, June 02, 2004 4:20 PM Mountain Daylight Time  #    Comments [0]
# Friday, May 28, 2004

Some cool new add-ins being bounced around the .NET world this week...

Alex Papadimoulis has a "SmartPaste" add-in that adds the ability to paste text from the clipboard as a region, a string, into comments, etc.

Gaston Milano added some new options to the context menu in VS.NET's file tabs.

Other stuff I've got running:

VSMouseBindings -- Surfing code with the trackbal's back/forward buttons. Solves the problem I posted about last week...

VS Window Manager -- Save/Restore your various window layouts. Especially useful if you go from dual displays to single displays with a laptop.

CodeRush -- It's been a couple of weeks now, but this one deserves its own post.

posted on Friday, May 28, 2004 9:09 AM Mountain Daylight Time  #    Comments [0]