Category Archives: General

Misc. GAE Examples

Some other amusing little hacks on Google App Engine.

I like LunchStr, for coordinating the office lunch expedition.

Dot and Simple Sketch reminds me of the sheep market, talent scraping example; which is recursive of course since google app engine is a fine example of developer network as talent scrapper.

Of course you have to have your standard little apps. Tinyurl clones: grulx.com, Links’R’US, and hurl.

There are some slightly larger applications.

And some larger ones, like a chat rooms provider.
One of the app team’s example apps makes Google an OpenId provider, app here – it’s only version 1, which is lame, even useless.

Most of the really complex stuff is still Google authored. Their directory is filling up fast, including some spam entries. They already have preferential attachment bias in their ranking.

Finally a complain! The user nicknames appearing all over these application are actually revealing people’s email addresses, just add @gmail.com. Feel free to star this defect complaining about how all these sweet little applications are revealing user-email addresses unnecessarily. (Did somebody say oauth?)

Sprunge – Neat toys showing up in Google App Engine

Some fun things are popping up in Google App Engine.

I like sprunge (discuss) a tool for command line jockeys.  By example:

$ echo Hi there | sprunge
http://sprunge.us/eUdF
$ curl http://sprunge.us/eUdF
Hi there
$ uuencode foo.jpg < ost.jpg | sprunge
http://sprunge.us/WJHN
$ ls foo.jpg
ls: foo.jpg: No such file or directory
$ curl http://sprunge.us/WJHN | uudecode
% Total      % Received % Xferd  Average Speed    Time      Time        Time  Current
Dload  Upload    Total    Spent      Left  Speed
100  116k  100  116k      0        0  59640          0  0:00:02  0:00:02 –:–:– 68675
$ ls -l foo.jpg ost.jpg
-rw-r–r–  1 bhyde  wheel  86669 Apr 22 08:34 foo.jpg
-rw-r–r–  1 bhyde  wheel  86669 Apr 22 08:31 ost.jpg
$ cat ~/bin/sprunge
#!/bin/sh
exec curl -F ‘sprunge=< -' http://sprunge.us

Using uuencode made me happy!

Google App Engine

It’s fun observing what people are using Google App Engine for.

Sprunge.us provides a pastebin service which you use from the command line.  For example I put this script in my PATH:

#!/bin/sh
exec curl -F ‘sprunge=< -' http://sprunge.us'

At that point you can post things by doing

#!/bin/sh
exec curl -F ‘sprunge=<-' http://sprunge.us http://sprunge.us/

Not too hot, not too cold.

upset.pngThis posting by Bob Wyman is most excellent, do read it.

Platforms, it is often argued, create innovation.  They do that by creating large option spaces where third parties can bring their domain knowledge to bear.  It’s an efficient way to structure the search because domain knowledge is sticky, otherwise the platform vendor would do the search in-house.  The value created is then split between the platform vendor, the developer, and the end user who get’s his problem solved.

Developers select platforms for numerous reasons.  Developers, for example, switched their attentions from Microsoft toward the LAMP stack for lots of reasons.  Including the fresh option space the LAMP stack created, the impression that the value split around the LAMP stack would leave more on the table for them, and the discovery that Microsoft (“cut off their air supply”) couldn’t be trusted.

Much innovation that happens on top of a platform is too fine grain to be converted into value for the innovator beyond the intrinsic pleasures of inventing, having fun, and the extrinsic pleasure of solving the problem at hand.  For all of those the platform(s) involved can roll up the innovations into to the greater good – of the platform or the society, it varies.

Innovation comes in all scales.  Some of the smaller stuff is, well, just hacking.  Hackers, innovators, developers, entrepreneurs might be names for various scales.  Bob’s posting is more about entrepreneurs.  he highlights a kind of chilling effect that comes as you atomize the options on the platform.  It makes the platform stronger, empowers it’s winner take all nature.  More hacks to roll up to it’s greater good.

That in turn reduces the number of platforms, which drives away the entrepreneurs.  Since they are in it more for the exit strategy.  Fewer platforms means greater pricing power for the platform and lower valuations for the startups. He takes a swag at how one might go about managing that risk, i.e. how you might “reducing the anti-innovative power of the platforms.”

Note that, platforms as anti-innovative is the opposite of the usual story we tell about platforms.  Neat and right on.

Misc Freebsd Notes

Random things from the recent past, for the record.

The setup I described some time ago for taking regular snapshots of the file system corrupted my file system in obnoxious ways.  This is appears to be a known problem for some other folks.  Doing repeated fsck didn’t resolve the problem; deleting all files from the snapshots and then doing the fscks did.  I’ve turned it off; which is a bummer.

I have this “HP Media Center PC”, a “HP Pavillion a1125c”, inherited from an elderly friend who was clearing out assorted junk.  Rumor is it was the victum of a power surge via the Ethernet; and the Ethernet certainly doesn’t work.  I stuck a cheap Ethernet card in it.  I’ve no idea who to blame for the resulting “elm kernel: dc0: watchdog timeout” messages in /var/log/messages.
I setup Music Player Daemon on a machine, which is very nice.  I then setup Firefly so the same collection can be played from the Macs around the house.  It’s nice too.  Avahi provides the mDNS support to make that visible to iTunes.  Avahi complains (a lot) about “avahi-daemon[1224]: No slot available for legacy unicast reflection, dropping query packet.”  I haven’t puzzled out how to make it happy.

I setup netatalk so as to get an Apple File Protocol deamon (afpd) that would let the family add things to the Music Library.  The deamon, afpd, complains when launched “main: atp_open: Can’t assign requested address,” this message went away when I disabled the old Apple datagram protocol support, via -noddp.  Now it only emits that error message occationally, I have no idea why.  It is also complaining about “bad function 4C”, but that appears to be a known problem with Leopard’s AFP implementation having as yet undocumented additions.

This machine has sound hardware who’s vendor, it appears, hasn’t let the open source community have at it.  So I had to install something called Open Sound System (sic).  It took me a while to figure out that i needed to use ossmix to turn up the default volume: e.g. “ossmix connector.green.green 80:80” to get the stereo mix to 80% on both left and right channels of the green colored connector on the back of the machine.
I came into a Seagate FreeAgent Pro 750Gig usb drive; which I’ve been hoping to use with Bacula.  Sadly it doesn’t play nice with the HP a1125c; the BIOS hangs on boot if the usb drive is plugged in.  Otherwise it works fine.
I also came into a Apple Time Capsule, which is very nice.  It has a USB connector, so I put the 750Gig USB drive on it.  That requires reformating it to something The time capsule wants to mount.  The time capsule makes it’s drives visible via AFP, and SMB.  There doesn’t appear to be a way to mount AFP file systems on FreeBSD, netatalk can provide them but not mount them.

Freebsd has mount_smbfs built in so I went down that path.  The auto mounter (amd) has a not unusual feature where it takes file names like /net//foo/bar and squeezes out the duplicate slashes.  In spite of clear instructions in the documentation I was unable to get amd to mount my SMB file path, since they start with two slashs.  So instead I have amd mount the drive via a script, and that script names the drive.  The man page for amd.conf was key to seeing how to get enough logging to see what wasn’t working.

The 750gig drive is enthusiastic about putting it’s self to sleep.  That might be why I’m getting assorted time outs at this point.  But then again it might because the time capsule is busy doing other things.  I’m also getting “kernel: smb_iod_recvall: drop resp with mid 4858” errors in my logs.

This machine’s logs are getting to be a mess.  That’s a dangerous situation since it leads to ignoring other errors.  For example looking I see a few of these “arplookup 169.254.211.90 failed: host is not on local network.”  Hm.    I may need to dust off some old code I’ve got for log file analysis and monitoring.

If I was a better person I’d add lots and lots of links to this posting.

Jott

hismastersvoice.png

Ok, Jott is very cool, but boy do we need oauth!  They are sucking up quite a few account credentials!

I seem to remember it was circa 1972 that people first confidently predicted we would have speaker independent speech recognition.

Thirty five years latter, looks like it’s arrived.    I remain hopeful that given another 30 years we can get the internet identity problem solved, cleaning up the mess created in the mean time maybe difficult.

Sausage Making

I enjoy bantering, Its a New Yorker’s pleasure. It doesn’t go over well in Boston. Puritans and Academics, what can you do?

I buy my sausage from a butcher in the North End. The North End is a rare urban neighborhood, at least in the US. Dense, old, somewhat unchanged by time. Jane Jacob’s argued that it had survived because it was walled off. Walled off from capital and walled off from the rest of the city by a butt ugly raised superhighway. She made that arguement as part of suggesting that one of the forces that kills urban neighborhoods is fast money.

They have torn down the ugly super highway, and money is flowing fast into the North End. The good liquor store has shut down, a bank will step into it’s shoes. Across the way the amazingly small two story pub where two dollar beers were sold to next to the vegetable market has been bought and a posh faux Irish bar has taken it’s place. Condo’s are going on top.

I joke with my butcher that the sausages are loosing their flavor now that his supply of road construction waste has dried up. He assures me he’s got a stockpile in the back; but I doubt it. I point out that the cat that sleeps on the freezer appears to be getting fat.

How the sausage is made is a surprisingly fascinating topic. When you buy stuff it’s full of ingredients who’s provenance you can’t hope to fully know. And there are always surprises. The securities you bought turn out to be full of badly originated mortgages. The blood thinner dad’s taking turns out to kill him, and the press discovers that poor families in China scrape sausage casings to gather a key ingredient.

Markets, firms, and societies solve the inherent quality control problem that arises from are long and confusing supply chains with various quality control schemes. My butcher has a variance from the health inspector pinned up on his wall. His tiny store is too small to conform to regulations about how far this should be from that. I don’t doubt his cat is, officially, a problem too. I was fascinated by how far the US’s drug administration’s reach goes, i.e. all the way back into the homes of those families in China.

That the world is all about sausage is delightfully frame busting. For example consider web sites. Back in the day we assembled the web pages on the server; using PHP or Perl for example. Talk about sausage!

PHP is case study in sausage making. PHP’s vitality comes from how wonderfully easy it is to paste together all kinds of bits and pieces; particularly C code libraries. It’s a wonderful – almost all bubblegum and bailing twine holding together this vast array of really nice C libraries. The only problem is quality, those libraries aren’t particularly secure. Expose those libraries on the open internet and your moments away from a security breach.

These days we don’t make the sausage on the server any more. We mix the final page up only at the last possible moment, in the browser, using Javascript. These days many suppliers can feed into the final product. I can recall a time when web masters would forswear that kind of thing, since they didn’t want their uptime dependent on 3rd parties. No doubt some Luddites still say that. But I don’t see how that attitude can stand. It’s like trying to live an entirely self reliant existence, growing your own food, cutting your own firewood. Romantic but impractical. So this is a very different dynamic; one where the quality of your suppliers becomes much more nuanced. I’m finding it fascinating to try and think through it’s implications. For example, just to pick one, how can you possibly archive pages like these?

Job Blogging

First off, you all, should go read Stefano’s posting about how he’s also on the job market.

I originally firmed up the rule about never ever posting about my job because I found that my coworkers would always assume that what ever I posted it was about them. Such is the human mind. I’ve backed off that rule only slightly over the years, so that now the rule is that I absolutely label such postings right up front.

So this posting is job related.

As you may or may not know for the last few years I’ve been doing project management for the Simile project at MIT, a wide ranging effort to puzzle out what the heck we are going to do about the emerging mess of heterogeneous organically produced metadata. It’s interesting work with a bridge to the traditional well regulated and standardized metadata you’ve all experienced in library or product catalogs.

We have done some amazingly cool stuff. We have dozens of code bases; just to pick two of the lesser known examples. Ryan Lee‘s Appalachian shows how you might solve the phishing problem inherent in OpenID. Stefano‘s Gadget is indispensable when ever a few megabytes of XML appears on your doorstep.
We are wrapping up this round of Simile. I’m looking for what I’ll be doing next, hint, hint.
Also, don’t miss David Huynh‘s recently released cool plug-in for Thunderbird. Let’s be clear that only the very brave write Thunderbird plug-ins! It provides some really sweet browsing additions over your email; watch the video!