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]
 Saturday, February 23, 2008

Inspiron 531 Mid-Size Tower A couple weeks ago, I set up Windows Home Server in the house, opting to go the DIY route rather than with an out-of-the-box solution like the HP MediaSmart. I saved a bit of money in the process, though it wasn't without some issues getting started.

For a machine, I turned to the Dell Outlet site, which I've used in the past and haven't had much trouble with. I've purchased a bunch of machines via the Outlet over the years and only one has ever had issues (blogged about last year). Odds are that it would happen at some point with a non-Outlet machine at some point, so I wasn't worried about ordering another box that way.

The machine is an Inspiron 531 desktop, with 2GB of RAM and a 250GB drive in it. It also has a DVD burner, mid-sized tower case, and the standard integrated network and video (the latter isn't needed by WHS). It was $249. Dell had sent me a coupon the week I was watching the Outlet, which basically took care of the shipping and tax. I spent another $150 or so at NewEgg to add a 750GB -- Roughly $400 total for that machine with 1TB of storage. (Note: looks like the only option now is to get a 530 rather than a 531. The difference is that the 530 uses an Intel CPU while the 531 has an AMD processor).

The setup started off fine, but I ran into issues later when I had to put drivers on the machine (after installing WHS). The Inspiron had shipped with Vista Home Premium, which I didn't need, but WHS is based on Windows Server 2003. The drivers that came with the machine (and available via Dell Support) were Vista drivers and didn't fly with WHS. Some Googling and experimentation led to trying the Windows XP drivers, which seem to be working just fine. The main holdup here was the network card's driver... with no network, I had to use sneakernet to get the drivers on to the WHS box.

So I saved money over going with an off-the-shelf Home Server... but paid a DIY tax with an hour or two of setup time and tinkering around with drivers. I'm happy with that.

Once set up, the experience has been awesome. The machine is running "headless" at this point, but the client software is on a few different machines now and works great for managing the server. In a pinch, I've used Remote Desktop a couple times to look at the server's control panel.

The features I like the most:

  • Access to the file shares on the server just plain works. There's no futzing with ACLs, Windows firewall, or anything else. Each user account on the server has its own private share, there's a public share for general use, and dedicated shares for music, photos, videos, and software. An admin account can control access to those in simple fashion -- each user account gets no access, read-only, or read-write. From the client perspective, it's just \\SERVERNAME\SHARENAME and you're good to go.
  • Backup is solid and runs seamlessly... it takes a while when you initially run it (go wired for that first backup!), but after that, the incremental updates aren't really noticeable.
  • There's a Tivo add-in that hooks write into your music, photos, and videos. That adds access to our Tivo Series 2 (Home Media Option), along with the Xbox 360 Media access that just works out of the box with WHS. I don't need to publish photos and music from a spare desktop machine any more. As an added bonus, the machine's faster than that spare was so scrolling through images and music is way fast.
  • Related note... remotely installing an add-in is dead simple. Copy an MSI into a share on the server, run the remote management client, and tell it to run the MSI for the add-in. Removing an add-in later looks just as easy.
  • Remote access to the server over the internet is very cool. The WHS setup process gets you a subdomain under the homeserver.com domain and you can log into the server from any web browser to get at the files stored there. That's already proven handy when I wanted to show someone in the office a photo that we were talking about.

A few things I'd like to see improve or change:

  • I still think that Microsoft needs to make WHS available via MSDN. I've got a few different ideas for add-ins I'd like to develop, but I'm not interested in doing development and debugging on the home server that's actually in "real world" use at the house. Unless they change this decision, it'll mean I need to purchase a separate WHS license if I want to get serious about add-in development. Incidentally, they've received a LOT of feedback on the issue, but currently say it's not available on MSDN due to some "valid logistical issues"... who knows?
  • It doesn't seem like there's a real great solution yet for managing our music via an iTunes library. Aside from WHS add-ins, installing software on a WHS machine is discouraged... so iTunes has to be on a separate machine. But honestly, the only time iTunes gets used is for syncing our iPods (and related playlist management). Playback in the house is done via the Tivo or Xbox 360. So all the music is in two places now -- WHS and that spare desktop machine (with iTunes) that we plug the iPods into. I think (but am not certain) that I could have the iTunes library on that machine simply reference the files on the WHS box -- but haven't tried that route yet (mostly for fear of hosing up the iTunes metadata and "device awareness" for our iPods). Need to do more research here.
  • Obviously a big issue that MUST get addressed soon is the widely-reported corruption problem. Thankfully, we're not editing files directly on the server shares (and won't anytime soon). The editing/manipulation tends to happen on our client machines, with the results being backed-up or simply stored for shared-access on the server.

I suspect that corruption issue is THE top priority for the WHS team in Redmond... once it's resolved, my next hurdle will be to figure out the best way to set up Lightroom catalog(s?) for the 7+ years of photos we have stored. Currently, I use fairly "transient" catalogs with Lightroom since all the photo files (both RAW shots, XMP sidecars, and JPG images) are being stored up on the server. But in doing that, I miss out on many features of having everything in a catalog.

All in all, I'm very happy with the WHS experience thus far. If you can live without the option to remotely edit files (to avoid the corruption problem), I'd recommend it.

Technorati Tags: , , , , ,
posted on Saturday, February 23, 2008 11:40 PM Mountain Standard Time  #    Comments [0]
 Wednesday, January 16, 2008

msdn_masthead_ltr I'm seriously contemplating a Windows Home Server solution and am pretty much at a fork in the road. On the one side is the HP Media Smart Server (which includes hardware and the OS), while the other side is the option to buy an inexpensive machine (perhaps via Dell Outlet) and then buy the OS separately.

No decision yet, but the cost difference is negligible... so it boils down to "Do I want something that works out of the box, or is this something I'd enjoy setting up as a project of my own?" Who knows... I'm also considering just going with a more basic NAS style solution.

There are many things to like about Windows Home Server, but one feature that intrigues me is that it has an SDK for writing add-ins (via .NET). I can think of a few add-in projects that would be fun to build.

Unfortunately, the MSDN Subscriptions blog announced today that WHS will not be available to subscribers. They don't comment on why they opted not to make it available... but it's a disappointing decision regardless.

First of all, I should point out that I'm wearing two hats here... The first is as a consumer who will likely be purchasing a WHS license for use in my home (unless I go the pure-NAS route). Because MSDN makes licenses available for development purposes only, I'd be buying a WHS license either way (separately or with the HP server). The second hat is as a developer with an MSDN Subscription who appreciates that the subscription gives me access to the licenses I need to build solutions on Microsoft's platform.

I've seen arguments in MSDN forums that "home" products aren't available via MSDN Subscription. However, I can have a Vista Home or Home Premium install up and running in a couple hours or so using media and/or downloads from MSDN. So there are "home" products on MSDN.

Another argument might be that that it's not technically aimed at developers... sure, but neither is Office, Exchange, or Project -- and each of those is available because developers can build tools that supplement and enrich those products. Home Server doesn't seem any different in this regard with its much publicized add-in model.

Clearly, Microsoft's success over the years is based on the popularity of its platform with 3rd-party developers. Without a rich ecosystem of 3rd party applications and tools, particularly in the business world, would Windows have become the dominant desktop OS? With many agreeing that is the first product aimed at a potentially huge and largely untapped market (small, wireless home networks), why treat Home Server differently in this regard?

In some ways, Home Server is a solution to a problem that many of its target customers don't know they have -- lots of people have small networks at home but no idea that they should be looking into automated backups, remote access to their files, and shared storage for their growing libraries of music, photos, and other data. It's certainly possible that a 3rd-party add-in to Home Server could become the "killer app" that convinces people that it's a "must have" solution.

But if developers on the Microsoft platform don't have access to WHS in the same place they get their other development, testing, and deployment tools, why would they bother?

I must be missing something... what's the downside to Microsoft including Home Server in MSDN?

Technorati Tags: , , ,
posted on Wednesday, January 16, 2008 11:43 PM Mountain Standard Time  #    Comments [0]

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]
 Wednesday, October 10, 2007

Sara Ford (from the Visual Studio team) has been running an awesome series of daily tips for Visual Studio tweaking. The series started off as the "Visual Studio 2008 Tip of the Day," but many (most?) of her tips apply to VS.NET 2005 as well. Most of the tips explain tweaks that can be made via the Tools->Options dialog.

11pt text and 14pt members! Her tip for today is about increasing the font size in the Statement Completion window... which is the little panel that opens when you invoke Intellisense in the VS.NET code editor (either by hitting "." on a reference to get its members or via CTRL+SPACE or CTRL+J -- another recent tip).

The change is made via the "Show settings for" list in the "Fonts and Colors" portion of the Options dialog. While I'd been in there before to set my Output and Command window preferences (green on black, yo), I'd never noticed Statement Completion (and probably wouldn't have recognized it as the Intellisense members list in any case).

Very slick and I can see this making it a lot easier to find things in the list... it really makes it stand out in front of the code that's being edited.

Nice tip, Sara! Now I need to go back into that portion of Tools->Options and check out some of the other UI elements that can be tweaked in that "Show settings for" list...

posted on Wednesday, October 10, 2007 10:45 PM Mountain Daylight Time  #    Comments [1]
 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]
 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]
 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]
 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]
 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, November 22, 2006

As I mentioned over the weekend, I've transitioned over to Office 2007 and am mostly pretty happy with it. I like the Outlook To-Do Bar more and more each day.

However, I ran into a problem yesterday that I couldn't find any resolution for online and I figured it'd be worth archiving here so the Google tubes can find it later.

Basically, I opened up VS.NET 2003 yesterday and got errors from two of my add-ins. These were CodeRush (the DXCore, to be specific) and the VSWindowManager PowerToy. Both of the error messages indicated that there was a FileNotFoundException being thrown while they tried to add items to the Visual Studio menus. Only the CodeRush exception told me which file was missing and it simply said 'Office'.

Now, I had used VS.NET 2003 last Friday (our desktop product is in 1.1 for now, but our newer web product is in 2.0) and it worked fine. The file name in the exception reminded me of pretty much the only thing that had changed on the machine since then -- the Office 2007 install.

I thought it was odd that VS.NET, which doesn't require Office to be installed, would be freaked out by an Office upgrade. In any case, I fired up the VS.NET 2003 installer and chose the Repair option. It's worth noting here that the Visual Studio 2003 installer is quite possibly the slowest-running install in the history of computing. Go get lunch while it runs... when you're back, grab a book, take a walk, or paint your house. Choosing the Repair option in the installer doesn't appear to be any faster than a first-time install.

Once that was done, I reinstalled CodeRush/Refactor and the VS Window Manager just to be safe... and all is well. Since then, I heard back from the DevExpress support folks (who rock) that they've seen this issue before. The problem occurs when the Office.dll and Extensibility.dll files are removed from the machine's Global Assembly Cache (GAC). Those files are needed by Visual Studio add-ins that want to hook into the IDE.

My best guess is that the uninstall of Office 2003 removes those files from the GAC (though they may still be around somewhere else on the machine) and they're not re-registered by the Office 2007 installer. The Office 2007 install does give you the option to uninstall 2003, or you can leave it there... and I did opt to have it uninstall.

Hopefully, anyone who suddenly finds that their VS.NET 2003 install isn't loading add-ins will Google for "Visual Studio 2003 add-ins loading exceptions Office" and come across this post at some point.

posted on Wednesday, November 22, 2006 11:25 AM Mountain Standard Time  #    Comments [1]
 Sunday, October 01, 2006

I just finished upgrading to the latest release of DasBlog and all seems well. The upgrade process itself could hardly be smoother. There were just a few steps involved...

  1. Downloaded the Content, SiteConfig, and Logs folders and placed them into the local web directories.
  2. Ran the DasBlog Updater utility to cleanup the Content folder.
  3. Ran a diff on the new and old config files... moved the stuff I cared about.
  4. Pushed the new web directories up to the server.

Done in under a half hour. It went very smooth and my hats off to Scott, Omar, and the rest of the DasBlog team.

So then I went cruising around to check out some of the new stuff Scott mentioned in his release announcement. One of the things I really like is the ability to disable comments on a post older than a specified number of days. I don't get many comments and most of what does come in is comment-spam on older posts. Hopefully that setting improves things.

There are also a few more themes available than in previous versions. One of these, called Project84Grass, was designed by Jacob Hodges. I liked the general style, but opted to darken it up a bit and add my own header image. It was the first time I've gone into the DasBlog template mechanism and it was much easier than I expected. Swapped out a few images, changed up the stylesheet, and modified a manifest -- and DasBlog picked it up on refresh.

Thanks!

posted on Sunday, October 01, 2006 11:35 PM Mountain Daylight Time  #    Comments [0]
 Sunday, July 23, 2006

One of things we spent a good deal of time on Friday in the Tufte seminar was his concept of “Sparklines”. Tufte describes them as “Intense, Simple, Word-Sized Graphics”. The idea is that a small (very small) chart of information can be provided in-line with text and serve to illustrate the data behind the text. In the space consumed by just a few words, hundreds (even thousands, with sufficient resolution) of data points can be used to form a chart.

In explaining Sparklines in Beautiful Evidence, Tufte uses several examples. One of these is medical reports that typically provide a test name and then the result value as a number. What this loses, however, is the context for the measurement — is this result high or low relative to the patient’s history? Relative to the normal range?

SparklinesThe image at right shows several examples. First is the typical display for a glucose test’s result (128). The second is a sparkline example that shows the patient’s results over time. In this context, it’s clear that the result of 128 is low relative to many of the patient’s previous results. The third example places a red dot at the point of 128 (the most recent result) and then displays the result value text in red, instantly drawing a correlation between the point on the chart and the value at that point. The bottom example combines a light gray band representing the normal range. The result is a graphic that quickly provides context and history for a test result, using much less space than the text “relatively low for this patient and within normal range” would require.

So can we use Sparklines in applications? First, we certainly are allowed to use this concept. Tufte himself referred to it as an “open-source idea to be freely used”. Next, the question is, how do we use this in our applications?

In searching around for software implementations of Sparklines, I found several. There are implementations for PHP, Java, Ruby, Python, MS Office, and others. Note that the Python implementation, written by Joe Gregorio, is provided online as a “Sparkline Generator Web Application”. It’s a slick interface that lets you fill out a form to set some properties and values, and then provides the URL that would return the resulting Sparkline.

I also found a .NET implementation from Eric Bachtal. He implemented it last year as an HTTPHandler for ASP.NET applications. The results look great on a web page and the code is provided with a license to freely use, copy, modify, and so on. 

For me, I’d like the ability to use this in a couple other ways. First, I’d like a general object API that lets me set some properties (style, colors, size, etc), provide the data, and then get an Image type in return. From there, I’d like to see a control that can be used in a Winforms application — either directly on a form or within a data grid, with the ability to resize and adjust like any other UI control. While the license indicates that it’s fine, I plan to contact Eric to see if he minds me using his work to get a leg up on that effort. I’ll report back here when/if I make progress.

Definitely check out the various examples and libraries above. Each appears to be free for personal use and all but one makes the source available in some form. The MS Office product from Nicolas Bissantz requires purchasing a license for commercial use and no source is provided, but it’s also the most friendly to non-developers and several Sparklines-inspired products are available (including a cool ticker).

posted on Sunday, July 23, 2006 9:22 PM Mountain Daylight Time  #    Comments [1]
 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?