I Thought He Came With You
Does Facebook now hate MMS? For the past couple of weeks every time I tried to send a photo I got the following error message:
"You have uploaded from an unrecognized address. For instructions on how to upload photos to Facebook, go to http://www.facebook.com/mobile"
I got this sending to both mobile@facebook.com and 32665. The referenced page is no help at all, and my phone number is registered with Facebook Mobile.
It turns out that there's a new secret email address. On the Facebook site click the icon to share a photo:

Then click
Upload a Photo:

Then click
upload via email:

Your personal email address is finally revealed and can be used to send a photo via MMS.
Facebook - update your error message to point this out!
The
Ambient Orb is an LED illuminated globe designed to display subtle information - stock market prices, weather, etc. Normally the Orb is controlled via the pager network but you can buy (or build) a
developer module and connect the Orb via your serial port.

I've used my Orb via both pager and serial port for a number of applications. I've just released a library -
Ambient Orb Controller - on CodePlex that supports both methods of control. I wrote the library to make it easier for me to gin up new Orb applications. If you use an Orb let me know what you come up with. Two of my favorites are using the Orb for
continuous integration and as a
music visualizer.
Labels: .NET, orb, shapefile
Now here's a niche:

I'm occasionally jealous of an iPhone app, in this case a station finder for NPR. I hate hunting on a long drive or in a strange city. Luckily, NPR has an
API, so I've whipped up an
NPR Station Finder for Windows Mobile.
Labels: catfood
Software licensing is a tricky art - too little security and you leak revenue, too much and you leak customers. I worked on several license management systems at Ç-Dilla and Macrovision so I've spent far more time than is healthy thinking about this problem.
In general I think the best system is one that helps keep honest users honest. A speed bump that itches the conscience but doesn't get in the way of legitimate customers getting their job done.
I just migrated to a new computer and have finished several days of installing software and drivers. This is never a fun task, but I've been through it a few times and keep all my license information on a NAS drive to reduce the pain.
WinZip has a great trial model. The product is fully functional and nags you just enough that you'll eventually pay. I've been a customer for years, and as I moved to Windows 7 I emailed to ask about upgrade pricing. I got a prompt response and was up and running in no time.
I didn't need to upgrade. The old version of WinZip installed just fine using an existing license key.
ScanToPDF from O Imaging was a different story. The license is locked to a PC, and there's no way to move it automatically. You have to email them. It then gets worse - there's an "administration charge" to move a license. So as a paying customer I have to wait for the UK office to respond to email and even then I can't continue to use the product I've paid for.
I'm sure it's in the small print somewhere.
But the impact is that ScanToPDF has lost a customer, an advocate (I've suggested the product to others in the past, never again) and infuriated me enough to throw up a negative blog post. Is the administration charge really worth it?
At
Catfood I use very simple license keys locked just to an email address. I'll refund any purchase with no questions asked. I'll issue new licenses as needed to keep customers happy. I have an online service to retrieve lost keys.
The products get pirated immediately, and finding a key generator doesn't take a lot of sleuthing. I don't care about this at all, because happy customers recommend products to their friends. Pain-free licensing is absolutely key to happy customers. Don't fall into the trap of putting your energy into complicated licensing and enforcing procedures. Add a new feature instead.
I was a micro-ISV (µISV) for years before I heard of the term. It was coined by
Eric Sink to describe a one man software shop, and is now generally used for any small software company.
There isn't much market data available this far down the
long tail so I've spent some time analyzing PAD files to see if I could answer a few questions.
PAD is the
Portable Application Description specification from the Association of Shareware Professionals. It's used to describe software for submission to download sites. How useful these sites are is another question - read
Scott Kane on this if you haven't already.
I spidered all the PAD files listed in the ASP directory, downloading data on 76,066 products from 39,861 µISVs (companies / people / publishers). It's not a perfect data set as there are PADs that aren't software and µISVs that don't use PAD. I've also heard that some people are developing web apps these days. But here goes...
Where are the µISVs?
Overwhelmingly in the US. Other countries with more than a thousand listed are the UK, Russia, China, India, Canada, Germany and Australia (in descending order). Most countries have at least one µISV but the numbers fall off pretty quickly.
How much do µISVs charge for their products?
$29.95.
About a third of products are free and a third fall into 9 price points (all ending in 5). I found over a thousand different US Dollar price points overall.
The most expensive product was a $150,000
Green Living site license from South Beach Software (an order of magnitude more expensive than the runner up).
How large are µISVs products?
There's not much action past 20 MB. Most downloads are between 1-2 MB. There's an interesting little spike around 14 MB. I guess this is a popular framework, possibly Java? The largest download was almost 1.5 GB.
Are µISVs still releasing downloadable software?
This is a tough one to get at because PAD files just tell you about the most recent version, not the release history. The chart really shows a last update distribution for the products in the PAD catalog.
There's a large number of products last updated in mid-2008 with nothing comparable in 2009. Could this be a drop-off in PAD usage? A shift to web apps? Maybe final releases before the recession hit leading to less spare cycles for side projects (my µISV certainly pays for beers rather than mortgages).
How many products do µISVs publish?
This final chart shows that most µISVs have just one product. Of course in some cases there might be a brand per product and still a single entity - it's impossible to separate this out from the PAD data. The largest number of products from a single µISV is 616.
Labels: micro-ISV
I've been busy updating a couple of Catfood products.
Catfood Earth updates your desktop wallpaper to show day, night and cloud cover. It can also display earthquakes, time zones, places and US weather radar:
Catfood Follower is a Twitter tool that automatically follows people who follow you and/or removes friends who stop following you. I think it's most useful for business accounts:

With these two out the door my next project is overhauling the
Catfood website. I'm kind of dreading it, but the current architecture is over six years old and it's definitely showing its age.
Labels: catfood
I've just released a .NET library for parsing ESRI shapefiles - see
ESRI Shapefile Reader on Codeplex. The library and source code are available under the
Microsoft Public License.
A Shapefile is actually at least three files: a main file containing shape data (*.shp), an index file for locating shape records in the main file (*.shx) and a database of metadata for each shape (*.dbf) in dBASE format.
I ended up writing the library in order to convert Eric Muller's
time zone shapefile into a format I could use with
Catfood Earth. I found other libraries that could read shape data but not metadata, or provided a very thin .NET wrapper on top of unmanaged code and so I decided that a fully managed library could be useful.
The library - Catfood.Shapefile.dll - provides read-only, forward-only access to shapes and shape metadata. Currently all 2D shapes are supported: Null, Point, MultiPoint, PolyLine and Polygon. I might add additional types in the future, or if you have a pressing need it would be easy to extend the library by looking at an existing shape subclass and the
shapefile specification (PDF).
See the
Codeplex project for sample code and documentation.
Labels: .NET, C#, shapefile