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.

Technorati tags: ,