The thoughts and ramblings of a person who likes to explore new and interesting software (mostly development tools).

Sunday, May 4, 2008

Postful API in action

Hey guys,

I posted last week about Postful - the handy service that sends real mail on your behalf. They also have a handy API that enables you to automate their service.

I could imagine products or services that work with receipts or financial data might be interested in integrating Postful. At .99 cents for a domestic letter and $1.49 for a letter to Canada, Postful seems like a great deal.

I put together some videos on how to use their API. I've been doing a lot of Php, Python, etc lately, so I went back to traditional C# and Visual Basic this time.

This first video shows how to do a simple query to see what orders you have with Postful. Each email you send them is processed the next day as real mail, so you have a chance to cancel an order before it is sent out.



This second video shows how to send an email with Postful. I'm using Visual Studio 2008, so this is also an opportunity to show off how the new LINQ for XML features work. We can embed XML directly as a literal in the source code.



And lastly, this third video shows how a very simple example of integrating Postful with Word 2007 using Visual Studio Tools for Office.




Thanks!

Eric.

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.