Archive for the “Legacy Blog” Category
I had to really lay into this movie in my Amazon.com review. I tend to write reviews for products that I’m impressed with and just keep quite on products that don’t really impress. This movie, however, was the exception. It got such good reviews on Amazon that I felt compelled to give it a look. The Internet Movie Database (IMDB) had some of the best information on this flick outside of Amazon. It didn’t make the mainstream movie reviews sites like Rottentomatoes.com since it never made it to the box office. 2 stars was probably a bit harsh, 2.5 would have been more appropriate. I felt the genuine need to remove this movie from the 5 star plateau though as this is genuinely deceitful. My Amazon review follows:

I really live or die by Amazon reviews. 99% of the time, they are spot on. I felt like I was burned a bit by the reviews on this one.
I should have been a bit suspicious when a movie that never even made it to the box office (mainstream, independent, or otherwise) was holding down a 5 star rating on Amazon. Some of the sites that I normally rely on for movie ratings didn’t even cover this movie since it didn’t get a lot of press and didn’t get any reviews by national or regional critics.
The majority of reviews that I read seemed held back on information so as not to give the “plot turns” away. Let me lay it out for you, there are no real plot turns so don’t hold your breath waiting for any. Once you get past the opening scenes and understand the premise of the film, it quickly degrades into a typical Hollywood action / adventure type flick. That said, this is no worse than a lot of the trash that Hollywood releases to fill the theaters during the peak summer movie months. In some cases (pick most any action film on installment 3 or greater), it’s actually better.
“Already Dead” is a 2-3 star movie that might be worth the low price you pay for the rental at Unboxed or your local retail outlet. Don’t go in expecting too much though. There’s a reason this didn’t get picked up for mainstream distribution.
No Comments »
Having non-static machine keys when hosting on IIS is just one of those things that’s just bound to cause trouble eventually. This holds true equally for single server hosting environments and load balanced web farm environments. Especially if your goal is to shield your users from any knowledge of IIS lifecycle activities (e.g. application pool recycles), the use of static machine keys is to be strongly recommended. The implications of static versus dynamic keys are enumerated for several different hosting situations below:

- Single Machine – Most of the recommendations around machine keys involve synchronizing machine keys across multiple machines. There is, however, value in setting static machine keys for a single machine, single worker process environment. Quite simply, if machine keys are not static, the generation of a dynamic machine key for an IIS reboot or application pool recycle will cause any machine key related elements (e.g. view state) rendered before the event to be invalid. This will likely result in exceptions that will impact normal user processing.
- Single Machine / Web Garden – The introduction of the Web Garden option to IIS can be viewed as the “poor man’s load balancing”. This option provides for a simple round robin routing across multiple worker processes, usually with each process owing affinity to a particular processor. Due to the simple load balancing approach taken, there is no option for web gardens but to synchronize machine keys. This is of course, unless you’ve managed to make your application completely stateless, in which case (congratulations) none of this advice applies to you.
- Multiple Machines / Web Farms – The applicability of static machine keys to a web farm environment applies, theoretically, only to web gardens in which the load balancing approach does not guarantee server affinity. Once again, to avoid impacting user processing during load balance machine failover or due to recycles or reboots, I’d always recommend using static machine keys. Even when these areas are not concerns, I’ve found other troubles just seem to arise when you can’t guarantee static machine keys across machines. For web events regarding cryptographic exceptions or viewstate verification issues, I’ve found it best to start troubleshooting with synchronizing machine keys and then working down from there.
The definitive guide to configuring machine keys in ASP.NET 2.0, including .NET code for generating the keys, can be found here. Microsoft has never revisited their ruling that machine key issues can arise outside of web farms. Once again, if you’re observing cryptographic or viewstate errors, I’d advise that you start with static machine keys. If compiling and running Microsoft’s code to generate a machine key is asking too much, this online program will generate a key for you.
Finally, I’ve been asked a couple of times about the downsides of sharing static machine keys across machines. This depends upon what you use the machine key for. In most cases, I wouldn’t advise that you use the machine key for anything more than viewstate encoding. In this case, a machine key compromise will mean that someone can theoretically hack your viewstate. If they got your machine key, it also means that they have access to your web.config file, in which case you usually have bigger concerns than viewstate hacking.
No Comments »
I’ve been contemplating the move towards a self-hosted Subversion repository for quite a while. My earlier attempts worked but left me with a lot of inconvenient and sometimes quirky side effects. These experiences always led me back to hosting Subversion on Linux, which is really where it works most naturally. Recently, however, I decided to retry my luck with Subversion hosting on Windows and I made the call to go with a “package” instead of doing the Apache / Subversion integration myself.

The tool that I went with, VisualSVN, is a Windows version of Subversion that targets primarily Microsoft developers using VisualStudio as their development platform. Matter of fact, the Subversion server package is freely distributed and the actual product that is sold is the Visual Studio plugin that allows you to tap into Subversion from Visual Studio. With a 30 day trial period and $49 price tag, I decided that it couldn’t hurt to try it out. My findings are below:
- VisualSVN Server – The VisualSVN server, as mentioned earlier is a freely distributed product. You can get this piece of software whether or not you ultimately decide to buy and use the Subversion Visual Studio plugin. The server runs exclusively over HTTP / HTTPS (using OpenSSL) and does not support Subversion’s binary protocol or running Subversion over SSH. Obviously, this means that Apache is in play. A version of Apache is included in the distribution. Initial configuration of the server is very easy, the setup instructions describe the extent of it. As I blogged about previously, this changes a bit if you try to get Apache and IIS to run side-by-side. In this case, you need to be very explicit and tell the very greedy IIS to stop listening on other IP addresses so that port 80 can be shared by IIS and Apache. I included links to the Microsoft article in my earlier post. In this case, you’ll want to use httpcfg delete iplisten -i xxx.xxx.xxx.xxx to stop IIS from listening on the port Apache is running on.
The folks who designed VisualSVN added some cool management functionality that shields the administrator from lower level Subversion commands. Implemented as a Windows MMC snap-in, Subversion repository administration be performed right alongside other server management tasks. The MMC enables one step creation of repositories (with or without the standard Subversion folder structure), creation of users and groups, and assignment of user privileges to repository actions.
- VisualSVN Visual Studio Plugin – As useful as the server is, the real product is the VisualStudio plugin. The most recent version of this plugin works on VisualStudio 2008 so I thought I’d install it and give it a whirl. Installation is fairly easy. Both TortoiseSVN and the VisualSVN plugin must be installed. I don’t know exactly how VisualSVN communicates with Tortoise but it seems to make sense to leverage an existing Windows Subversion library rather than building everything from scratch. Using both the plugin and Tortoise gives you two ways to work with Subversion. In my experience with other Java IDE plugins (Netbeans and Elcipse), this is sometimes necessary to get around the shortcomings of the browser plugin.
Adding a project to VisualSVN using the plugin is, as it well should be, a relatively easy task. VisualSVN has some intelligence built in above and beyond the basicTortoiseSVN libraries. In my case, the plugin didn’t add my Visual Studio settings, binaries, or a bunch of MP3 and JPEG photos that represent content and really didn’t belong under source control. Other than that, a lot of the processing is just handed over to TortoiseSVN. The SVN UI presented by the plugin should all be pretty familiar to you if you’ve ever used TortoiseSVN before.
This looks to be my keeper for Subversion hosting. Now I need to port over my existing repositories into the VisualSVN server.
No Comments »
After a long hiatus, I just got done working my way through a 6 month photo backlog, arranging and backing up photos and picking the best ones out for uploading to Flickr. You can find the new photos in the photo section of my blog. I was working my way through videos as well and preparing to convert some of these to Flash for uploading. If you look at the videos section of my blog, you’ll notice that there are no new videos. So what happened?
Although I’m really happy with On2 Technologies Flash encoding software, the process of importing and transcoding video is time consuming and CPU intensive. Then there’s the entire upload and markup creation process, which is a royal pain that I should have long since automated away – but I haven’t. What I’d really like is a process similar to the one that I have with Flickr: I upload photos using a OS-specific program (uploadr) and they just appear on my blog. I’ve known that this process needs to be replaced for a while, I’ve just been hesitant to pull the trigger. Enter Smugmug…
Smugmug, the family owned photo service that leans heavily on Amazon’s S3 service for file storage, announced last week a significant upgrade to their video hosting capabilities by supporting the H.264 video format. Right now, Apple’s QuickTime plugin provides the best support for H.264 but Adobe’s newest version of Flash will also be supporting H.264. If Microsoft wants to remain competitive with Silverlight, they’ll be following suit as well. So what does this mean? This means that Smugmug will automatically transcode your uploaded video. Depending upon your membership level, video can be encoded at DVD resolution (960×540, for power users) or HD (1280×720, for pro users). You upload it and Smugmug transcodes and hosts it, providing unlimited bandwidth and storage space. Since seeing is believing, click on the image below to see a sample SmugMug Thanksgiving video and tell me you wouldn’t like to have online video of this quality.

If you’re going video, you’ve got to go big and at $150/year, Smugmug carries with it a fairly large price tag. However, when I factor in that I can cancel my Flickr subscription, stop upgrading my Flash encoder, decrease my bandwidth utilization on my hosting service, and have a hassle free upload and transcode experience… in HD, I’m sold. As an added bonus, Smugmug has just added an adaptive imaging sizing capability they call “SmugMungous” that automatically selects the right size picture for your screen. To get the full effect, this needs to be tried on a fairly large monitor. And by the way, you can point to your smugmug gallery using a custom domain or sub-domain and you can share video updates as an iTunes Podcast that friends and family can subscribe to.
SmugMug is just one more piece in my grand attempt to upgrade my life to HD. We went with HD TV almost 3 years ago now and it’s hard looking at a normal signal now, especially on a large 16:9 screen. I’m strongly considering Smugmug for its HD capabilities but this is going to cause me to reexamine two other areas of my life that need HD upgrading: my HD recording capability and HD playback capability. I’m waiting for Santa Claus to drop an HD TiVo down the chimney. The $1000 dollar price tag for the original Series3 TiVo was a pill I couldn’t bring myself to swallow, no matter how much I love TiVo. AT $300 and almost all of the features of the Series3, the HD TiVo got my attention. I’m also looking at an HD camcorder, an essential item if I’m serious about the Smugmug thing.
That’s a lot of upgrading to do. Still, there are several areas that I’m not upgrading. I’m waiting for the Blu-ray / HD DVD war to show some signs of abating but this is definitely a medium worth revisiting in 2008. HD Radio – now I just don’t get this one!
No Comments »
Another in the installment of Rails on Windows “gotchas”, there are some things to be wary of when working with the Simple_Captcha plugin in the Windows environment. In terms of basic background, the Simple_Captcha plugin facilitates the integration of CAPTCHA (Computer Automated Public Turing test to tell Computers and Humans Apart) image recognition tests, like the example below, into a Rails application. Facilitates is perhaps not a strong enough term. The plugin makes CAPTCHA integration dirt simple.

The Simple_Captcha plugin uses RMagick for generation of the CAPTCHA recognition images, allowing for various image styles and distortion levels. The CAPTCHA can be integrated via the controller (this one is dirt simple) or via the model (this one is just silly simple). You can find out more about these and various other integration options on the plugin’s page.
If you’re doing Rails development on the Windows platform and are not feeling especially masochistic, the rmagick-win32 gem, which is bundled with a copy of the ImageMagick Windows installer, is really the only way to use RMagick. For a long while, the 1.13.0 rmagick-win32 gem was the standard. However, this gem is likely to cause you issues and you should really upgrade your gem to the 1.14.1 gem or greater. These gems are fixed to work with RubyGems 0.9.4, which is the most recent version of this gem as of this blog post. If you don’t perform this update, you’re likely to see ImageMagick issues bubble up at runtime.
On Windows, these runtime errors frequently manifest themselves as ‘cur_image’ issues. Several of these issues have been reported on the plugin’s page. My post on 10/6 covered fixing these issues by upgrading your RMagick gem. Please don’t downgrade other gems, as suggested in some other posts; this will only make your life more miserable in the future.
All-in-all, the RMagick Windows gem is an excellent way to make powerful image processing capabilities available to all, including those unfortunate enough to be stuck on a Rails on Windows development platform. The plugins built on top of RMagick such as Simple_Captcha and Attachment_Fu are incredibly powerful and remain very simple by leveraging RMagick’s capabilities. Just beware if you’re developing on Windows, a little bit of tweaking and debugging may be necessary to get these plugins to work as advertised.
No Comments »
During a discussion the other day, I found myself repeatedly asking the question of how many organizations could make the leap from an organization dabbling in services (SOA believers) to an organization living SOA and benefiting from services (SOA achievers). I kept referring to the SOA chasm, this nearly insurmountable gap that needs to be crossed to move from an SOA believer to an SOA achiever. The image below is my visualization of this gap.

Why is it so hard to make it from one side to the other? It’s because this leap requires an organization to rethink everything; fundamentally changing the way they fund, govern, build, and host their applications. If you’re wondering what an SOA achiever looks like, check out this article on the Amazon.com architecture. Note the stat near the top of the page – between 100 and 150 services are accessed to build a page. These guys have made the leap.
I’ve heard a lot of contentions that the move to an SOA represents an evolution, not a revolution. I think this is true for only so long. An organization can incrementally improve their capabilities as an SOA believer but once they reach the end of the SOA believer cliff, it’s an all-or-nothing proposition. When an organization has completed the construction of their utility services and the time comes to tackle the core business entities, functions, and processes, it’s the SOA moment of truth. That quote from the Matrix before Neo tries to jump the chasm between two buildings rings in my head, “You have to let it all go, Neo; fear, doubt, disbelief. Free your mind!”
No Comments »
Tad Anderson posted about the release of an SOA-related e-book from Microsoft concerning Service Oriented Architecture (SOA). This is one area in which Microsoft has remained notably quiet compared with competing enterprise software vendors such as IBM and Sun. As Tad points out in his post, Microsoft has made some forays into SOA publications and they have been pretty readable.
Their most recent publication, SOA in the Real World (mirrored here), is one of the better pieces of SOA writing that I’ve encountered, vendor-specific or otherwise. It uses Microsoft technologies to illustrate certain principles but it manages to maintain a largely implementation-agnostic viewpoint. The e-book has multiple authors but it was edited together in a very seamless way, which is not always the easiest thing to pull off.

The e-book appears to have been pulled together by Microsoft’s Architectural Resource Center (ARC). No authors are listed specifically and the ARC branding is new, somewhat resembling the branding used for Microsoft’s Architecture Journal. The publication includes a pretty sound enterprise SOA approach, detailed explanations of how some of the major pieces of a SOA come together and a description of how Microsoft’s technologies fit in the mix. Whether one architect’s opinion or the Microsoft party line, there are some insightful and succinct explanations provided, such as the differences between Workflow Foundation and BizTalk when it comes to implementing workflow.
This book is a great read for anyone looking for a solid introduction to SOA and could well be the definitive read for anyone dealing with SOA and Microsoft technologies.
No Comments »
I’ve had some really good experiences with some of the iTunes Original collections, which include a mix of pre-existing songs, original versions of hits and artist narrations. I’ve especially enjoyed the iTunes Originals with Rob Thomas. This weekend, I picked up my first iTunes Exclusive Live Sessions mix. The Live Sessions series at 5 or 6 songs per collection offers only about half the music of your average Original collection but, as the title indicates, it’s all live music.
Since I’ve downloaded the Five for Fighting Live Session from iTunes, I have not been able to get the music off of my mind. I’ve been listening to Five for Fighting since their first CD, which accompanied my wife and I on a memorable trip down the US West Coast. Even if you can’t associate the Five for Fighting name with a particular song, it’s fairly likely that you’ve heard their music since it gets a good amount of radio play and has found favor with a number of TV commercial producers.

Granted, you are not going to get any original music here but what you do get is Five for Fighting’s best material done live in a pure acoustic (piano and guitar) format. The album is tight and the recording quality is superb. Artist narration, storytelling, and interludes are edited out except for one story about the writing of the song Two Lights which really accentuates that piece. At about $5 for the collection, you really can’t go wrong with this one whether you are an old fan or someone simply looking to pick up some great music to listen to.
No Comments »
As soon as you’ve spent some time dealing with Rails, you’re bound to hear the fact quoted that the entire Core Rails Team does their work on Macs. There are likely several reasons for this: (1) these folks really like Macs (you can’t fault them for that); (2) they’re getting kickbacks to use Powerbooks (could be; not likely though); or (3) Rails is fun, and using Windows puts a bit of damper on that fun. I think the last answer is the most likely even though I’d like to think that Steve Jobs has some skin in the Rails game.

What you’ll also hear and experience when dealing with Rails is that it’s “opinionated software”, which it is. It just so turns out that the prevailing Rails opinions tend to align more closely with the UNIX-derivative camp (like Mac’s OS-X) than with the Windows camp. There’s a price to pay for working against the prevailing opinions and using a Windows environment to do your development. In most cases, the community that supports Rails has done a great job to make sure that this cost is very miniscule. However, once in a while, when you’re working with a Ruby Gem or Rails Plugin that is outside the core framework, you’ll hit the opinionated software wall head-on.
This is not meant to be a critique of Rails or the concept of opinionated software. Rather, the things that make Rails and some of these Gems and Plugins so special is that they leverage existing capabilities of the underlying operating system (that’s Rail’s DRY principle in action) such as the UNIX symlink command that powers Capistrano. These capabilities are difficult or impossible to replicate across operating systems; leaving the Windows-based developer with three choices: buy a Mac; install Linux, or hack your way through.
In the first of x installations of my experiences with Rails on Windows, I’ll touch on some of the learning points I had with Capistrano. As a refresher, or for the completely uninitiated, Capistrano is, in the simplest sense, a Rails deployment utility. It provides a collection of tasks that anyone with experience in deploying Web applications will immediately recognize as extremely useful. Tasks like automated deployments, checking the differences between your most recent source and the existing deployment, temporarily disabling an application and putting up a maintenance page, performing database migrations, and rolling back your application to previously deployed versions can each be performed using a single Capistrano command. Like many things Rails, the obvious utility of such functionality may lead you to wonder why a tool like this wasn’t invented much sooner and used universally.
Capistrano is quite overt about being opinionated software, going as far as to clearly document the assumptions it makes. Amongst these assumptions is that you are deploying to a POSIX-compliant UNIX shell (sorry, no Windows), you are using Subversion for source control, and that all your passwords (i.e. production server and Subversion) are synchronized. Once again, following the Rails convention, some things that Capistrano assumes are overridable. Other things, however, are not. Some of the learning points I touch on below are directly related to Windows; others are not.
- You’re going to need the full Subversion binaries. If you, like me, had gotten by using various Subversion clients (e.g. TortiseSVN and Subclipse), the gig is up. You’re going to need Subversion anyway if you ever plan to run EdgeRails
- Some installation instructions for Capistrano will specify that you should –include the termios Gem when installing Capistrano. Normally, termios removes the need to display and manually enter your password during the execution of Capistrano tasks. However, since the termios Ruby Gem is simply a wrapper around the POSIX termios command, this won’t fly with Windows. Solution: don’t include a termios dependency and get used to entering your password each time you invoke Capistrano from Windows.
- If your Capistrano install fails with a Zlib::BufError, don’t fret it. Try updating your gems (gem update –-system). This seems to be a fairly common occurrence with Windows. I’ve heard of folks having to update gems multiple times for this to take.
- Another must for Capistrano deployment, and one that escapes folks who have spent life in the Windows world, is the need to chmod files so that they have the appropriate permissions set. This is especially true for the Ruby and FCGI dispatch files (if you’re using FCGI). Ideally, you should create your Rails projects on the UNIX box you plan on deploying to, check it into Subversion, and then begin work on your Windows development machine from there. This helps to avoid a host of issues such as chmod problems and bad shebang lines that routinely plague Windows users.
- Select a hosting provider that has one or more sample Capistrano deployment files available or that have customized the standard Shovel file for their environment. You’ll still have to do some tweaking but this will help save a good deal of time. Suffice it to say that if your hosting provider doesn’t know how Capistrano works, turn and run… fast.
- If you maintain critical files outside of Subversion such as your database.yml or if you have multiple copies of the same file (e.g. different environment.rb files for staging and production deployments), the simple Ruby put command goes a long way. For example:
put(File.read('config/database.yml'),"#{deploy_to}/current/config/database.yml", :mode => 0444)
put(File.read('config/environment.staging.rb'),"#{deploy_to}/current/config/environment.rb", :mode => 0664)
There are plenty of purists out there that have invented all sorts of ways to get unversioned files onto your productions server if need be. I don’t see the need for such complexity, especially if only one or two people have been granted deployment rights with Capistrano.
No Comments »
I feel as if someone tacked a “show me your enterprise service bus” sign onto my back and I’ve been walking around blissfully unaware of this fact for months now. Client presentations, vendor presentations, casual conversations – everyone wants to show off their visuals of an ESB, SOA, and next generation architectures. Thank goodness there’s no fine print on my sign restricting me from asking tough (and not so tough) questions.
- So how do I avoid vendor lock in?
- Do we really need SOAP?
- Grid computing… show me some client references!
- JSR 168 portals… yawn.
To escalate the situation, I came up with my own next generation architecture diagram and talked it through with a bunch of my peers. People liked it at first because of all the nice icons. They really loved it when the answer to any of the hard questions was “let me show you how this works, do you have a Web browser handy?” I’ve included the diagram below for your enjoyment and jotted down some quick write-ups with the obligatory links so that you can see, understand, and convince yourself of the reality of these tools.

- Ruby on Rails – Although there are tons of free services and a number of high quality paid services that can be leveraged to enhance applications on the Web, it’s hard to go very far without having some dedicated computing power. Using Ruby on Rails and MySql will get you the maximum bang for your buck (that’s no bucks for those who are counting). While you’re riding the Rails, make sure to take advantage of Ruby gems and Rails plugins.
- Web Service APIs – Lots of folks talk about enterprise applications that invoke common APIs to store documents, images, or access business services. For most, it’s talk of a far off and distant future. Would you like to see how this works today? Check out box.net, flickr, and salesforce.com for file, image, and business Web Service APIs in action.
- Yahoo Pipes – The minibus within the bus, Yahoo pipes provide a visual environment for aggregating, manipulating, and mashing up data and producing value-added output. Good mashup implementation but the interactive visual editor gets most of the attention – rightfully so. Imagine your business users mashing up business data to solve problems in new and creative ways that your analysts and developers never imagined.
- Google Base – A loosely organized, metadata-driven, data store available through Google. Data is accessible via an HTTP API with either Atom or JSON feeds.
- Open ID – Rather than supported a single point of control system for authentication, like Microsoft’s Passport, OpenID is a decentralized system that relies upon distributed identity stores and, for the most part, ownership of a particular URI. The system is lightweight yet still manages to provide for the distribution of basic profile information in addition to straight authentication. With more and more sites adopting this service, adoption is likely to steadily increase over the next several years.
- Amazon Web Services – Despite the lack of any hard-and-fast SLAs on their services, developers are increasingly leveraging the AWS platform for production applications. Their Elastic Compute Cloud (EC2) provides the average developer access to a significant grid computing array. Their Simple Storage Service (S3) and Simple Queue Service (SQS) provide access to globally distributed storage and messaging services, respectively. All of this is based upon a very fair “pay as you go” model that requires you to only pay for what you use and scale up and down without the usual provisioning and financial burdens.
- Sugar CRM – For one, I like Sugar’s tagline “Commercial Open Source”. A PHP-based CRM alternative to products like Siebel and Salesforce.com, Sugar is gaining pretty significant traction in the marketplace and is proving to be the first lucrative open source business application. The software has a good look and feel to it and their distribution options will likely set the standard for all other open source business software. You can opt for off-site dedicated hosting (on-demand), fully configured appliance-based distribution, or host-it-yourself (with or without a support contract).
- Bit Torrent – Peer-to-peer file sharing technologies have yet to find their place in the enterprise. On the open Internet, though, such technologies are said to account for as much as 40% of global Internet traffic. As desktop search technologies mature, sharing of decentralized data is going to be the best way to get at all of the knowledge otherwise hidden within the enterprise.
- Google Gears – If you don’t have the time or inclination to build offline clients to support your disconnected users, how about just making your Web app “disconnectable”? Gone are the cross platform, DLL, and distribution issues. Your Web app can sense when it’s lost network connectivity and go into disconnected mode. A great idea that will likely only gain limited traction in the enterprise.
- Netvibes Universal Widget API (UWA) – JSR 168 (or is it 286 now) compliant portlets seem so passé. With widget-based start pages becoming the norm and Windows and Apple both integrating widgets as integral parts of the future desktops, “write once, run anywhere” were just a matter of time.
- Microsoft Virtual Earth – I’ve blogged about this before and even did a quick Webcast. Take the hottest Web 2.0 visualization technique (AJAX maps), add birds-eye views in 2D and realistic 3D virtual earth renderings that run in-browser for both IE and Firefox and you’ve got Virtual Earth. It simply must be experienced to be believed.
- Simile Timeline– An equally interesting visualization technique but one that’s got significantly less press is the Simile Timeline AJAX widget for bringing time-based information to life.
No Comments »
|