Discussion, code samples and video demos of new technologies; including Web 2.0 startups, Google AppEngine, Ruby on Rails, PHP, Visual Studio Team System, Team Foundation Server and .NET.

Friday, April 25, 2008

Bridging 2 worlds

Hey guys,

I've always liked services or products that try to close the so-called digital divide between the people who use technology regularly and those who do not.

My dad is one who falls into the latter category. Ironically, he was in a Masters of Computer Science program at the University of Waterloo in the 1970's. This was well before Waterloo became a favorite recruiting ground for Microsoft. I faintly remember boxes and boxes of punch cards we had at home :)

Anyways, today my dad feels like that the Internet is too insecure, so he isn't online. That makes communication a bit of a burden between us.

I found something really interesting today that I think is going to help us talk, so I wanted to share it.

The service is called www.postful.com. After you sign up, you can send them an email with an address in the subject line (you can create favorites as well). When they get your email, they print it out and send a physical mail on your behalf.

They also have an API to allow you to integrate this into other applications as well.

Even if you don't have an Luddites in your family, this could be a really useful service. There are still times when you need to send a real mail message. If you're like most people I know, you don't usually have stamps and envelopes ready. Postful charges .99 cents for each message you send; that seems like a pretty good deal to me.

Thanks!

Eric.

Wednesday, April 23, 2008

SproutBuilder, Google Docs and Facebook...

Hey guys,

There is a really interesting new service called SproutBuilder (http://sproutbuilder.com/) that was profiled on TechCrunch the other day.

Their service helps you create living content as Flash-based widgets. Their user experience is based around a RIA that is essentially an IDE.

The Sprout folks have built some interesting partnerships, so they integrate with Google Docs and Facebook.

Have a peek at my video below to see how you can use Sprout, Google Docs and Facebook to build an application. The '3 things' that I mention in the video is based on Guy Kawasaki's book - Art of the Start. There is an exercise towards the end of the book where you are asked to write down 3 things that you want people to remember about you after you pass on.



A bigger version of that same video can be found at
http://www.screencast.com/t/zFd6VsmgR1


Thanks!

Eric.

Bling is cheaper than you might think…

Hey guys,

A gold-plated iPod is not for everyone obviously, but for those who are interested, a company called Computer Choppers was profiled in a bunch of publications recently. They made a big splash for offer gold plated MacBook Air computers. At first blush, I would have thought the price for such a thing would be absolutely astronomical, but I contacted them and was pretty surprised. I won't share their prices, but I'll say that they are more within reach than one might think. So, if the regular iPod or MacBook just won't do, you might want to give them a shout, you might be surprised too.

Thanks!

Eric.

Tuesday, April 22, 2008

Good things come in small packages

Hey guys,

Tonight, I was working on a project and was pretty amazed at some of the guidance and sample code that is available for Visual Studio, .NET 3.5 and ASP.NET. If you work with any of these technologies, it is definitely worth your time to go and check out the guidance bundles at:

http://www.codeplex.com/websf/Wiki/View.aspx?title=bundles&referringTitle=Home

Thanks!

Eric.

Wednesday, April 16, 2008

DeepTime – My First Google AppEngine Application

Hey guys,

If you get the chance, please check out my first Google AppEngine application.

http://dtime.appspot.com/


It is a work in progress, but basically it is a simple time tracking application. I would love to hear any feedback you might have.

Thanks!

Eric.

Tuesday, April 15, 2008

Google AppEngine Data model

Hey guys,

I've done a little experimenting with the data model that is part of Google AppEngine so far I've been pretty impressed. As you probably know, the underlying storage is done with Google's BigTable.

From a programming model perspective, they have done a really nice job of making it easy to work with BigTable. For example, the following declaration will create your table and columns.


There are a couple of really interesting featuring in that simple bit of code. First, notice that my string property description does not have a size associated with it. The StringProperty data type is good for data under 500K. They have a TextProperty for anything bigger than that. All of their data types are described here. The noticeable one that I'm not using here is their key property; this enables you to reference another table (or class, same thing really).

Also notice the required = True statements. When these are added, the constructor for your class, TimeEntry, in this case is parameterized with these values. This is an easy way to do some validation. Since these fields are required, you can't construct an instance of this class unless you specify these values.

Getting at your data is really simple. They support a structured query language called GQL (Google Query Language), or you can use methods. I like the latter method. The following code will give me a list of all my DeepTimeEntry rows (or objects, same thing really) that match the user that I have specified, ordered by date.


I was a bit leery of using this at first because if you read the order of the methods, it looks like you would get all the results, then filter them and then sort them. But in reading Google's documentation about this it looks like the data is not actually retrieved until you try to access it. So the underlying Google objects essentially optimize your query based on that constructs you have used. At least that is how I read the documentation – if that is not the case, I hope someone lets me know!

I won't admit how long I was stuck on this J but the whitespace around 'user = ' is important. You have to have the spaces between the 'user' and the '=' , otherwise the filter is misinterpreted. For some reason or another, that wasn't immediately obvious to me.

Saving and deleting your data is pretty trivial – you basically call put() and delete() respectively.

One thing that I could not find in the methods or query approach is a way to do a 'like' query. That seemed odd that Google wouldn't provide this.

I'm still getting used to Python, but the programming model that Google has for their data in AppEngine seems pretty easy to use; this makes AppEngine a really attractive platform choice.

Thanks!

Eric.

Sunday, April 13, 2008

Blistful blist!

Hey guys,

I thought I would write about a Seattle startup that is just around the corner from me. I think they have a fantastic idea and I've been telling as many people as I can about it.



The service is called http://www.blist.com/. It bills itself as the easiest database in the world. Think of Microsoft Access with a slick user interface and hosted in the sky. The user experience is strictly Flash and it looks great. To start, you have 3 options for creating a blist (creating one from scratch, importing a file or creat from an existing one).



From there on out, you are basically working with a table in a database. The folks at Blist have created some really thoughtful column types. Amongst the really good ones are:


- Ratings (the list of stars that you can pick)
- Checkboxes (easy way to do a boolean value)
- Documents (they support embedded documents which is really nice).

You can work with your data in one of four views. The default is the table view; the other choices are page view, calendar and chart.

One thing to look out for is that Blists are created by default as being public. That means other Blist users can see your data. That may or may not be what you really want. So far, in my limited use of Blist, I've found I'd rather just keep my data private.

The Blist folks seem really serious about getting customer feedback. I emailed them about a little glitch that I saw and they were very fast in responding. Their product manager was kind enough to grab a coffee with me to discuss my thoughts on their service.

Hosting things in the cloud seems to be all the rage right now. I've been really impressed with how easy Blist is to use. They sound like they have some really interesting features in the pipeline; check them out if you get the chance!

Thanks!

Eric.

Friday, April 11, 2008

If you don't scale, you'd better look out!

Hey guys,

A good friend of mine and former colleague at Microsoft, Ian Knox just launched a new service called SkyTap.

SkyTap combines lab automation and virtualization with an on-demand, through-the-browser delivery model.

What you get with SkyTap is the ability to pick and choose from a library of pre-built images. These images range from the basic OS (i.e. Ubuntu, CentOS, Windows, etc) to pre-configured technology stacks (i.e. MySql on CentOS, SQL Server on Windows, IIS on Windows, etc).

With literally a few clicks in your browser, you can assemble a set of machines and start them up; SkyTap manages all the hardware resources needed to run your configuration.

Load testing is a perfect usage scenario for this sort of service. You can pick out your deployment configuration - maybe a IIS on Windows and a MySql on CentOS for example and then throw together a few machines that will act as test clients. There are a number of load testing frameworks you can use - Selenium Remote Control is a great open source one; and Visual Studio Team System is a great commercial solution.

In any case, you can fire up the machines you need for your load test, get your results and then shut them down.

Because all of the machines are virtual, you can save their states; or quickly re-image them if you mess them up.

Anyways, congrats to the SkyTap team!

Thanks!

Eric.

Wednesday, April 9, 2008

Yikes ... some bumps in the road for AppEngine

Hey guys,

I noticed on TechCrunch this morning that Google pulled down the HuddleChat application from AppEngine because 37Signals felt it was too similar to their application, BaseCamp. HuddleChat was developed by Google engineers in their spare time apparently.

I'm not sure how I feel about that.

I'm actually a big fan of Basecamp. I've been a paying customer for almost 2 years now and I've really enjoyed their application. It's easy to use and the price is pretty reasonable. The company - 37signals - is also known for creating the highly popular Ruby on Rails application framework.

So, on one hand, I'm kind of glad that Google took the risk to pull down HuddleChat to avoid a conflict (real or perceived) with 37signals. That is a pretty significant thing for a monster-sized company like Google. Whether or not 37signals had a strong legal case or not, Google could have easily stretched out the legal proceedings until 37signals crumbled.

But of course, on the other hand, this could be really concerning if you extrapolate Google's actions. HuddleChat was said not to be affiliated with Google, yet they pulled it down. Obviously there was some affiliation given that the developers behind it were Google employees. But, what happens when an application is published in AppEngine that is not developed by Google engineers, but causes a conflict with another company or group? Does Google reserve the right to censor these types of applications as well?

That is probably extrapolating things way too much, but it does take a tiny bit of shine off the whole thing.

There is a Facebook group petitioning Google to bring HuddleChat back. I don't think I'll join that group right now. I'm going to wait a few days to see how Google reacts to the reaction they caused and hope for the best.


Thanks!

Eric.

Tuesday, April 8, 2008

Google AppEngine - it's their world, we're just lucky they aren't charging rent (yet)...

Hey guys,

Google joined cloud storage/application deployment players like Amazon, Heroku, Zoho, Rollbase, Force.com (Salesforce.com) and others with the announcement of their AppEngine last night.

AppEngine is pretty damn cool :)

It is basically a platform/hosting environment for you to build applications on. As a platform, it provides:

- storage (using their BigTable database)
- web templates (a bunch are supported, the main one appears to be DJango)
- user management (using Google accounts)
- email (using Google Mail)

The promise of AppEngine is that it will scale to meet the demands of your application - both in terms of processing web requests and data storage. The belief here is that AppEngine uses some or all of the massive data centers that Google has to do this. For now, however, AppEngine accounts are limited to 500MB and what they estimate to be the ability to serve about 5 million page views per month.

So what does an AppEngine application look like? For now, it is Python. I'm not very familiar with Python. In terms of dynamic languages, I've really gotten to like Ruby and PHP. But, I know some big name sites like Pownce use Python, so I'm sure it is quite good. I believe that Google has plans to support a wider number of languages in the future.

Google has an excellent getting started tutorial that is worth doing (http://code.google.com/appengine/docs/gettingstarted/). I'll point out a few things from that tutorial that illustrate what I think is really cool about AppEngine.

The first thing is user management; not surprisingly, they give you access to Google accounts. So you automatically have user creation, password reminders, etc etc.

The following line of Python




Will generate a URL that you can use to direct a potential user to sign in with their Google Account:

That is nothing spectacular per say. Passport has been doing that for years (though I don't think you can sign up as a Passport customer anymore), and ASP.NET authentication gives you that as a drag and drop control.

But, it gets better.

The storage behind AppEngine is Google's fabled BigTable. As an aside, I don't know if it is really 'fabled', but I read a description of Google's file system described that way :)

BigTable is said to be a super-fast, super-scalable database that is built on top of the super-distributed file system that Google uses (GFS).

This files system, database (big table) and parallel processing framework (map reduce) are the 'fabled' infrastructure that Google apparently uses as its IT backbone.

Google has been kind enough to publish academic papers that detail how these systems were built. Based on these papers, the Apache Open Source Foundation has implemented their versions of them. They are Hadoop (i.e. MapReduce), Hadoop File System (i.e. GFS) and HBase (i.e. BigTable).

Combine these with a few bazillion cheap computers, and you can be your own Google infrastructure - Hoogle I suppose :) All that's left to do is collect the billions in revenue :)

Anways, back to AppEngine. So the storage. Really simple looking and really cool.

The following Python class declaration establishes your database schema and provides your access class.






Once you have that, you can run your queries. Basic ones like 'get me all of them' are part of the object model.




That one line gets me all the greetings, ordered by date. That's pretty clean and easy.

This approach is kind of like the Model View Controller approach that Ruby on Rails made so popular; but it might be even easier. With a Ruby on Rails model, you define your table and a model class. As long as you follow some really reasonable naming conventions, Ruby on Rails can work with your model. With Google's approach, you just define your class with members that become columns in BigTable and the magic happens for you. Both are clean and easy to use - all the magic of LINQ with none of the weirdo syntax (no offence LINQ!)

The AppEngine SDK comes with a development web server that you can use to do your local development and debugging. When you're ready, you can upload your application into AppEngine.

With AppEngine, you work through a web interface to create an application. Basically you are creating a unique identifier and a URL. You can use your own domain for the URL, or a default one that Google provides.

Be warned, the uploading takes a long time - about 3 minutes for my really simple application.

The AppEngine 'dashboard' seems like it would be really useful. It tracks basic usage statistics.

Obviously my hello world application has not exactly lit the world on fire like iLike or something :)










My first impression of AppEngine is really positive. Quite a compelling platform to say the least. There are a few things I'm hoping Google will add in the future.
  • As mentioned earlier, more languages! Python is actually pretty cool, but it is not everyone's cup of tea. I would love to see PHP and Ruby in the near future
  • Add more to the API. So far we have web templates, users, mail and storage. I would love to see:
    • a commerce solution with Google Checkout
    • ways of sending IM's with Google Talk
    • an enhancement to the Mail API to enable processing incoming email
    • maybe some programmatic ways of dealing with Google documents
  • When you upload an application to AppEngine, you automatically get assigned a version. I would love to see Google integrate this with some basic version control so you can revert/diff between versions.
All things said, AppEngine is really something you have to look at if you're thinking about building an application for the web.

What I'm wondering now is how some of the more developer-centric web hosting companies are going to be affected? I'm a big fan of www.dreamhost.com. For something like $10/month, you get basic hosting along with Subversion, Jabber, MySQL, Joomla and more. While they can't obviously scale to inifinity like AppEngine, they do provide a lot of good infrastructure for you right off the bat.

Anyways, time to go play with AppEngine some more...

Thanks!

Eric.