Dec 21

Tweeting my Christmas letter

Personal with tags: 1 Comment »

It is the season where you actually get snail mail other than bills that don’t let you say “only electronic please”, and junk coupons for crap you don’t need. The thought of doing a holiday letter didn’t do anything for me this year. The only people that don’t know what I have been up to at a high level…. well…. if they don’t know, why do we care so much to tell them? They are the people we never see!

What would be a more modern holiday letter? I was going to do a video montage of the years events, but that is going to be too much work for now. Maybe a roundup of my blog posts? So 2006.

I know. A dump of my tweets! They are a little sporadic, as there were times where I came and went from Twitter, but this surely tells you what kind of year I had:


  • I am tempted to create a web based Wii game called “The Wee Game” that involves urination. The more you drink, the harder it is to aim? about 10 hours ago
  • @tobiaspeggs your mouth feels like Ghandi’s flip flops huh 03:21 PM December 19, 2007
  • Ning has got some really nice offices. Oh, and the people are nice too. Catching up with BrianM was a lot of fun. 02:59 PM December 19, 2007
  • “Standards are the a key foundation for innovation”. I think you can at least take out the “the” :) 02:35 PM December 19, 2007
  • It was fun walking through passport control and having the guy look at my “viva la stewart” t-shirt and think it was Che. Then he laughed. 11:19 AM December 19, 2007
  • Feeling some partners 02:03 PM December 18, 2007
  • I love hearing the first thing that comes out of Sam’s mouth in the morning. This morning = “Green dinosaur cookie?” (he had one yesterday). 04:27 PM December 17, 2007
  • Should Twitter change: “Foo Bar is twittering: …” to “Foo Bar twitters: …” or twittered. Or, just get rid of the thing! 04:07 PM December 17, 2007
  • It is fun watching people on FB not quite learning that the ‘is’ is gone yet. “Bob total git” 03:27 PM December 17, 2007
  • It looks like Salesforce is going to announce something big in January. The platform keeps growing. 01:38 PM December 17, 2007
  • It is strange to look at LinkedIn and see “people who have looked at your profile”, and know based on the metadata that your exgf is looking 01:17 PM December 17, 2007
  • I hate it when you have a 7 letter word with nowhere to put it on Scrabulous. It makes me not want to go :) 10:59 AM December 17, 2007
  • “After using AS3 going back to JavaScript just seems so hacky. I don’t get the joy.” Poor Ryan. Butch up my friend, and Functional zen time. 09:21 AM December 17, 2007
  • Extras was more sad and painful than funny, although not in a bad way. It felt very similar to Ben Elton’s Dead Famous showing we r screwed. 08:49 AM December 17, 2007
  • can’t wait to see the Extra special xmas season finale on HBO tonight! 07:29 PM December 16, 2007
  • I have been asked to become a birth videographer (HD of course). 07:28 PM December 16, 2007
  • going to be a lot happier when GWT-Ext supports Ext 2.0 03:35 PM December 13, 2007
  • drinking an “Atlassian” belgium beer, watching the Posse 06:38 AM December 13, 2007
  • It is funny to read between the lines as Tim talks around Android and Eclipse 02:45 AM December 13, 2007
  • Oh man, I really dislike SYS-CON. They are so greasy. 01:34 PM December 12, 2007
  • The “2G Experience”? That sounds like a legacy mobile conference. 09:25 AM December 11, 2007
  • Did Microsoft really use the term “browser remodulating” in their Volta docs? Wow. 11:02 AM December 10, 2007
  • When everyone buys, you sell. Maybe I should create a product that goes out of its way to be “closed”. A “Proud to be closed” button, etc et 10:04 AM December 06, 2007
  • Go on, make a chart 09:39 AM December 06, 2007
  • Many remote Googlers seem to be flying to Mountain View at this time of year… I am sure it isn’t the weather ;) 02:20 PM December 05, 2007
  • @ryanstewart with the OAuth spec you will get some nice sleep on the flight ;) 02:18 PM December 05, 2007in reply to ryanstewart
  • launching the new Google Mac open source page 08:34 PM December 04, 2007
  • so happy that the Spice Girls are back in business and wishes he could have gone to their first concert today 12:19 PM December 03, 2007


  • checking the new Web 2.0 relaunch 11:04 PM November 30, 2007
  • Ads in PDF too? (…) 11:08 PM November 28, 2007
  • getting high school kids to write open source code ( 11:15 PM November 27, 2007
  • getting high school kids to write open source code 05:12 PM November 27, 2007
  • finally back in the office with a huge sleep deficit 08:42 AM November 27, 2007
  • talking to the new Almaer’s that we found in Belgium. I am known as the “ubiquitous” one since I have a few hits on Google 12:59 PM November 23, 2007
  • sad that Soccer A.M. just isn’t the same, even with an Essex boy. 01:50 AM November 17, 2007
  • building a microformat for transcriptions 02:51 PM November 15, 2007
  • going to visit Danny boy as he tries to woo the California babes with his Anglo-Israeli accent 02:11 PM November 14, 2007
  • hosting Steve Souders of Yahoo! as he gives a tech talk at Google. 03:10 PM November 13, 2007
  • pricing out a trip to Dalvik 10:18 AM November 13, 2007
  • wondering if he could create an application for Android that is so good that it wins the entire $10 million dollar fund? :) 09:16 AM November 12, 2007
  • 03:28 AM November 12, 2007
  • editing a video of Joe 10:54 PM November 11, 2007
  • getting DOS’d by (deny from 12:54 PM November 10, 2007
  • putting the finishing touches on 12:22 PM November 10, 2007
  • laughing at how Emily Almaer is being recruited by Microsoft. 08:40 AM November 09, 2007
  • impressed at how classy the dreamforce team is 04:26 PM November 08, 2007
  • impressed at how classy the dreamforce team is. 03:11 PM November 08, 2007
  • walking like an open, social, Android with well oiled Gears. 12:45 PM November 07, 2007
  • is well aware that y = mx + c is much better than y = mx + b. I mean. _C_onstant. 09:00 PM November 06, 2007
  • enjoying Opera 9.5 alpha. Man it is fast. 02:07 PM November 06, 2007
  • sure that he has travelled too much when he thought that his 4 hour flight today felt like it went by too quickly 11:28 PM November 05, 2007
  • amazing how good Sam was travelling today, even with United trying their hardest 09:40 PM November 05, 2007
  • finally back in San Francisco 08:26 PM November 05, 2007
  • excited about Android, but wants the SDK to get out right away! I guess November 12th is soon ;) 10:44 AM November 05, 2007
  • watching his sister-in-law have make up texts with her new iPhone 08:36 PM November 04, 2007
  • using one of his three Gillete Mach Super Power Fusions razors. 3 at 3 locations so he doesn’t have to travel with them 10:45 PM November 03, 2007
  • using the convenient to pay for his “citation” 09:46 PM November 02, 2007
  • watching his car get towed. 03:20 PM November 02, 2007
  • OpenlySocial 11:49 PM November 01, 2007


  • wondering if it is bad that the earth moved for my wife last night yet I didn’t feel a thing ;) 09:11 PM October 31, 2007
  • sitting through his first earthquake without apparantely noticing it. 10:18 PM October 30, 2007
  • looking forward to taking Sam to the Google Halloween party for kids! 03:02 PM October 30, 2007
  • is surprised that Spaces doesn’t allow him to set different backgrounds for each space. Are you kidding me? 02:58 PM October 29, 2007
  • wish he could play the harmonica as well as Vader (×6h?yt 10:27 AM October 29, 2007
  • realising that Cover Flow for directories can sometimes feel like old school voice mail. Give me back random access! 07:25 PM October 28, 2007
  • finishing up the last day of The Ajax Experience, and flying home to a Leopard 09:13 AM October 26, 2007
  • is researching YouTube videos for tomorrow morning 07:35 PM October 25, 2007
  • watching Stu refactotum his JavaScript 06:21 AM October 25, 2007
  • is experiencing Ajax. 06:36 PM October 24, 2007
  • looking forward to Alex and Joe give their keynote tonite at TAE 11:42 AM October 24, 2007
  • interested in watching Stu make fun of peoples JavaScript code in his Refactoring talk 11:22 AM October 24, 2007
  • listening to the CTO of MapQuest talking about how uses Dojo and DWR 07:01 AM October 24, 2007
  • hanging in the Seaport hotel (The Ajax Experience) with a fixed AC vent in the room… finally 07:59 PM October 23, 2007
  • is amazed to see a dog in a diaper, and then watching someone change it. 12:09 PM October 23, 2007
  • feeling pretty sad for anyone who has to play Scrabalous in “practice mode” (aka no friends mode) 09:07 PM October 22, 2007
  • wondering how many people watching poker on ESPN actually buy the “Faith based music” in the commercial breaks. 08:40 PM October 22, 2007
  • not a fan of how Twitter seems to have just added “twittering: ” to its Facebook updates, which is getting annoying 08:19 PM October 22, 2007
  • hoping that “API in a box” parody that he showed in his talk didn’t offend anyone! 03:35 PM October 22, 2007
  • done with his first talk, and is already hoarse. I also was made to sweat as my machine tanked 10 minuts before the presentation! 11:16 AM October 22, 2007
  • heading to the conference center to speak at the Colorado Software Summit 07:30 AM October 22, 2007
  • in Denver for a few days before going to Boston looking forward to Red Sox vs. Rockies 08:58 PM October 21, 2007
  • in Denver, looking forward to Red Sox vs. Rockies 08:57 PM October 21, 2007
  • never one to enjoy having to drive in the I-70 blizzard. Thank god I made it. 08:24 PM October 21, 2007
  • waiting to fly to Colorado from SFO… into the snow! 11:59 AM October 21, 2007
  • hoping that England can stay close, and that Jonny gets the ball at the end. 01:01 PM October 20, 2007
  • starting to worry about his body clock. 02:19 AM October 20, 2007
  • running to Fry’s to get a darn power supply 03:19 PM October 19, 2007
  • waiting on testing for a new release to go out. 11:46 AM October 19, 2007
  • is in a meeting at Google about TAE, which is kinda funny 09:52 AM October 19, 2007
  • reading a politically correct feminist nursery rythmes book. “all of the women and all of the men, happily put humpty together again” 09:00 AM October 17, 2007
  • finally cancelled his TiVo account. If HD was cheaper they would have a chance… 02:46 PM October 15, 2007
  • talking to a chick who just had a dream about Gears. We won! 09:15 AM October 15, 2007
  • finding pictures with hot women and where you can’t see the guy… and then tags the guy as a friend to get them in trouble! 03:03 PM October 12, 2007
  • done recording a kiwi on the set of a Tiki Bar with a US flag 01:59 PM October 12, 2007
  • in a YouTube war with Madeline. 11:21 AM October 12, 2007
  • watching Ajax and OSGi combine 10:40 AM October 12, 2007
  • flipped through the newly Rails-ed 09:11 AM October 12, 2007
  • creating lots of tasks whilst being offline 04:53 PM October 11, 2007
  • stopping his form from submitting. 03:55 PM October 11, 2007
  • wishes the database would tell him the it doesn’t support BOOL when table creation happens 02:47 PM October 11, 2007
  • remembering that htmlspecialchars() is a good thing. 11:48 AM October 11, 2007
  • loving how noone knows how the link tag works for CSS and wonders why they didn’t just <style src=”…”> instead! 09:39 AM October 11, 2007
  • “John Resig removed “perl” from his interests.” Mwhahaha 10:28 AM October 08, 2007
  • Considerate of Paul Graham to tell a London crowd that you have to be in Silicon Valley (…) 09:35 AM October 04, 2007
  • going even more “meta” with 10:35 AM October 01, 2007 from Facebook
  • @tobiaspeggs want to take the jacket to get a gorgeous curry? ;) 10:33 AM October 01, 2007 from Facebook in reply to tobiaspeggs


  • “for the @ hold ctrl+alt+2″ | good ole european keyboards. at least ¤ and æ are easy 02:06 AM September 13, 2007
  • Wondering if there will be another squating avenue via Facebook application URLs (names are not unique… but URLs). 01:15 PM September 06, 2007


  • is looking for Face ‘IM 11:28 AM August 28, 2007
  • looking Face ‘IM 11:22 AM August 28, 2007
  • chorttling at an email with: “Subject: OpenAjax Alliance: A Remarkable First Year” 12:54 PM August 27, 2007
  • changing his mind… maybe this week it will be AJAX. It’s cool to change it whenever I feel like it right? 11:48 AM August 24, 2007
  • changing his stock ticker to RUBY. 11:23 AM August 24, 2007
  • still laughing at the SUNW -> JAVA conversion. 03:27 PM August 23, 2007
  • uploading more videos to 02:57 PM August 23, 2007
  • heading over to the Zoho offices to chat about Gearing up. 01:44 PM August 22, 2007
  • making a promise to himself that his meeting schedule is usable in a multi-week view! 02:43 PM August 21, 2007
  • checking out Zoho offline 10:29 AM August 21, 2007
  • using MoodBlast to set my status all over the shop! 09:17 AM August 20, 2007
  • noticing that having a cigar with your kids around isn’t so cool. 09:38 PM August 19, 2007
  • Using moodswing to update all friggin status messages from QuickSilver. yay! 10:58 PM August 18, 2007
  • feeling moody 10:57 PM August 18, 2007
  • It is great to be able to order “movies” to Chambers bill :) 12:50 AM July 13, 2007


  • I love how 10 guys walk in with video equipment and get 3 rooms for 2 hours. They gave us a funny look. 11:21 PM July 12, 2007
  • It was so hot on the Vancouver rooftop that Mike D was sweating like a scouser in Dixons 12:04 AM July 12, 2007
  • “Which was the first application to use Ajax?” It was interesting to hear Gmail, Google Maps, Suggest instead of MS Outlook Web Access. 08:22 PM July 11, 2007
  • I wouldn’t like to see Adobe vs. Google in a Guitar Hero showdown. They breathe this stuff (although I have held my own… but only on mediu 08:21 PM July 11, 2007
  • Vancouver seems like a great city. I wish I could spend more time here. 05:35 PM July 11, 2007
  • building a porn application that uses the new onpinch event for the iPhone ;) 09:17 AM July 09, 2007
  • watching Aaron Boodman tinkering with Gearpad via his blog 08:37 PM July 07, 2007
  • enjoying Live Earth and hopes that it stays Live for a long time to come… 08:34 PM July 07, 2007
  • … and now the pizza line seems to be even longer. 06:24 PM July 06, 2007
  • @iPhoneDevCamp: The line was longer for iPhoneDevCamp than the Apple Store for the iPHone itself ;) 06:05 PM July 06, 2007in reply to iPhoneDevCamp
  • iPhone Remoting (…). Thanks to Mr. Quicksilver and fellow Googler. 12:53 PM July 05, 2007
  • wondering if it is ironic that iPhoneDev Barcamp is at Adobe :) 10:57 AM July 05, 2007
  • turning on the Pro features on his FeedBurner feeds, as they are now free 10:57 AM July 03, 2007
  • still wondering how the butterfles feel about their big show at the wedding 09:22 AM July 03, 2007
  • laughing at how Ben watches X-Mailer to call people on their iPhone 09:10 AM July 02, 2007


  • still so torn on the iPhone. 10:39 AM June 29, 2007
  • is wondering how a smart guy can choose 01:41 PM June 28, 2007
  • is wishing that the iPhone had a decent network and the Gmail client. 09:49 AM June 28, 2007
  • Back in the Googleplex after what feels like a long time 09:43 AM June 28, 2007
  • Back in California and not all summer sun is equal: boulder == bake, midwest == boil, cali == fresh. Good to be back. 04:27 PM June 27, 2007
  • Blogging about Facebook’s chance to take over the social world fro … 11:04 PM June 26, 2007 from Facebook
  • Copying the contents of a remote file into my OSX clipboard: ssh myserver -x “cat myfile” | pbcopy (via Abe) 09:40 PM June 26, 2007
  • Is the iPhone SDK like the Sopranos finale? It makes sense in theory, but it is a cop out? 02:34 PM June 25, 2007
  • Late Night Cocoa is actually a good podcast (sometimes hard to find). Nice to hear Wil, Gus and co talking about the “SDK” 02:33 PM June 25, 2007
  • Met a kid named “abcde” pronounced “Abecity”. Wow. 12:59 PM June 25, 2007
  • Thank god this was fixed in Rails: irb(main):002:0> ‘cow’.pluralize => “kine” 12:04 PM June 25, 2007
  • People still think that an IQ test is important? 11:41 AM June 25, 2007
  • Getting a new key for my keyboard at the Apple Store: “Ready for the 29th? No way.” 10:40 AM June 25, 2007
  • “Personally, I’m disappointed by the lack of GPS. Everyone laments the lack of 3G, but Cingular has awful 3G coverage as it is.” I agree. 10:23 PM June 24, 2007
  • Reading about my grandad in the paper 09:28 PM June 24, 2007
  • Thiery Henry is gone to Spain. The prem is losing a great one. 12:20 PM June 23, 2007
  •…: More like 1:5. Of course, it depends on what the PM does. 11:37 AM June 23, 2007
  • Is it just me, or when you have kids do you wish you had a HOLD button for the laptop? 03:18 PM June 22, 2007
  • blackberry forums has a captcha for a SEARCH on a forum? lovely 08:05 AM June 22, 2007
  • How can the blackberry still NOT allow you to use the network time??? It boggles the mind. 08:01 AM June 22, 2007
  • You know you have hit the big time when you are in the “Madison Who’s Who” ;) 08:15 AM June 20, 2007
  • I am looking forward to Hani releasing a useful service for the open source community ;) 07:06 AM June 20, 2007
  • I love it when they put “Alamer” as my name so they can’t find me on a flight 07:35 AM June 19, 2007 from txt
  • Avis scores points again as they get in our car and drive us to the terminal as Sam is sleeping. No bus. 07:16 AM June 19, 2007 from txt
  • Hanging out at the Google Boulder office. Being right on Pearl Street is fun. It’s a shame Maps thinks it is down the road. 09:07 AM June 18, 2007
  • Having dinner with em, sam, madeline at the walnut brewery 05:24 PM June 17, 2007 from txt
  • Rule of google: find a friend who gets peer massage bonuses but who doesn’t like massages 02:36 PM June 17, 2007 from txt
  • Getting a fathers day massage at essentials in boulder 02:35 PM June 17, 2007 from txt
  • What a way to get your name out there (http://www.iphonenewyorkcit…) 08:52 AM June 15, 2007
  • Safari Benchmarks….… 08:11 AM June 15, 2007
  • @tobiaspeggs: time to get a mac my friend. 04:32 PM June 14, 2007in reply to tobiaspeggs
  • Watch driving directions as they happen (….) 03:45 PM June 14, 2007
  • Getting school’d at GeoSense ( 11:01 AM June 14, 2007
  • wow’in a coworker with the power of vi: “d)” ‘woooah, it deleted just to the end of the paragraph!’ 10:17 AM June 14, 2007
  • simple gspreadsheeting 02:16 PM June 13, 2007
  • Meta Twitter: 01:48 PM June 13, 2007
  • Custom search engines that work out where to search are cool. All on the fly:… 11:04 AM June 13, 2007
  • We need to hire Dilbert at Google: 10:26 AM June 13, 2007
  • Google Base with Gears ( 05:09 PM June 12, 2007
  • “TwitterIM is under maintenance at the moment. Please check back later.” Days? Really? 04:56 PM June 12, 2007
  • Can never get enough chaos theory (…) 04:25 PM June 12, 2007
  • Hmm <a ref=”enclosure” href=”path/to/foo.mp3″> wasn’t picked up by FeedBurner 08:33 AM June 12, 2007
  • “TwitterIM is under maintenance at the moment. Please check back later.” All day. 10:02 PM June 11, 2007
  • Getting cookies and milk in honour of mormanism, as we get ready for “Big Love” season two. 08:59 PM June 11, 2007
  • repeat: always do this – for (var x in o) { if (o.hasOwnProperty(x)) { … } } 08:26 PM June 11, 2007
  • Building an offline base example app that shows that it isn’t all about offline, and it is all about black! 08:24 PM June 11, 2007
  • Breaking APIs sucks. How many times do I run into the same issue with MySQL client libs vs. server versions wrt passwords. Grr. 08:24 PM June 11, 2007
  • Nice how Twitter took down search/import and they just tell you to use other services. 04:59 PM June 11, 2007
  • You may have noticed that we removed the search box (in favor of providing a more intuitive one) and the import address book link (in favor … 04:59 PM June 11, 2007
  • safari 3 on leopard…now runs on xp/vista 11:11 AM June 11, 2007
  • Leopard shipping in October. Basic version, $129. Premium version, $129. Business version, $129, Enterprise version $129. .. 11:09 AM June 11, 2007
  • “Leopard shipping in October. Basic version, $129. Premium version, $129. Business version, $129, Enterprise version $129. Ultimate version, … 11:09 AM June 11, 2007
  • Kudos to me.dium 09:39 AM June 11, 2007
  • Come on guys….. surprise us unlike the sopranos: 09:36 AM June 11, 2007
  • worst finale ever? 11:46 PM June 10, 2007
  • Congratulations to the JRuby team for pushing out 1.0. A huge milestone of cos. 06:30 PM June 10, 2007
  • “Kaya: a new scripted drama”: You know it is sad when you have to tell people that a show isn’t “real” 11:05 PM June 09, 2007
  • “Flight of the Conchords” looks freaking awesome. HBO really needs it after the Sopronos goes away. Gotta love Kiwi comedians. 10:29 PM June 09, 2007
  • “Tonight is going to be a real date night. To prove it, I will order a pay per view movie, not a free one on HBO On Demand” 10:26 PM June 09, 2007
  • Geek quote of the day: “Your boss quit? That is like your process ID being reset to init’s (1)” 10:26 PM June 09, 2007
  • “I am scared of PacMan. Would you like to get chased by ghosts?” 10:26 PM June 09, 2007


  • Enjoying being able to talk about the Google Developer Day! 10:48 AM April 11, 2007

Speaking of “Christmas” letter vs. holiday letter vs. winter solstice letter vs. Kwanza letter….. the Wisconsin state government managed to waste two weeks in a special session deciding whether they could rename the tree a “christmas tree”, and it came through. Thank god they spend our tax dollars on the tough decision. I hated it when it was a holiday tree.

Oh, and then there is the HILARIOUS story happening over in Green Bay. Go festivus pole!

Dec 21

Gears Future APIs: Location API

Gears, Mobile with tags: , 7 Comments »

I have spoken at a bunch of conferences in Europe this quarter. From the Future of Web Apps, and @mediaAjax in London, to JavaZone and JavaPolis in Oslo and Belgium. When I speak about Gears there, I get a lot of questions about Mobile Gears.

A lot of the features of Gears arguably make even MORE sense on a mobile device. Allowing Web developers to build applications for phones has taken off well thanks to the iPhone. Gears can help out in these high latency devices.

One very handy API to have would be a Location API (although it would be useful in other contexts too):

The purpose of this API is to provide means to fetch the location of a device running a Web browser with Gears.

The Location API is an abstraction for the various LBS APIs that currently exist on mobile platforms (GPS-based, network/cellid-based). The API consists of the Location class, which encapsulates various location attributes (latitude, longitude, etc), and also provides the means to query the platform for a location fix. This API also adds a new event type that is fired every time the location changes. Location implementations can be straightforward mappings to native LBS APIs (e.g the S60 Location Acquisition API) or have a more complex design that combines several location providers (e.g a GPS-based provider and a cell id-based provider) and returns the location from the most accurate provider at any given time.

Here is the API as a code example using it:

// Getting the object
var location = google.gears.factory.create( "beta.location", "1.0" );
// Setting up a callback to handle "location changed" events
location.onlocationstatechanged = function() {
   switch (this.state) {
     case 1:
     case 2:
      case 3:
          SetStatusText("Location accuracy:", this.accuracy);
          MoveMap(this.latitude, this.longitude);
      case 5:
         alert("Unknown state!");
// Initiate a fix. This leads to the onlocationstatechanged event handler being called exactly once for each
// of the "connecting" and "acquiring" states and one or more times for the "fixed" state (for the initial
// fix and every time the location changes, after that).
location.startLocationUpdates(); // async call, initiates fix (powers up GPS if needed, etc)
// Getting the last known location
if (location.latitude != -1 &&
    location.timeUTC > threshold) {  // the location info is valid and not very old
  Foo(location.latitude, location.longitude);
// Cancel the request. This leads to the onlocationstatechanged event handler being called for
// the "canceled" state. This call will power down the GPS HW / close HTTP connection
// (depending on the location providers that were in use).

I can imagine the fun games that I could write here, let alone the interesting business apps that could take the location context into consideration.

Other Future APIs

Disclaimer: This is early days, and who knows what the final API will look like, or if it will even make it. Do you have ideas for cool Gears that make the Web better? Let us know!.

Dec 20

Firefox Universal Uploader

Tech, Web Browsing with tags: , 1 Comment »

I do a lot of uploading to sites such as YouTube, and the Web interface leaves a lot to be desired for bulk manipulation. Watching the uploading rotating image on YouTube makes me want to scream sometimes (no feedback, unlike Vimeo and FB).

A fellow Googler and all around good guy, Matt Waddell, pointed me to Firefox Universal Uploader, a Firefox add on that supports:

  • Picasa
  • YouTube
  • Flickr
  • Facebook
  • Webshots
  • OmniDrive
  • SmugMug


  • It shows the local folders and remote folders which enables you to upload files by single click.
  • You can upload any number of files at a time.
  • You can upload files to multiple websites using a single interface (using only one extension).
  • Ability to add multiple accounts and upload files to each account independently.
  • Site specific features are also included and will be improved in the coming versions. eg. giving public/private access to files.

Firefox Uploader

Dec 20

Gears Future APIs: Desktop Shortcut API

Gears, Google, Tech with tags: 18 Comments »

Google Gears Desktop API

A common task you see people using AIR and Prism for, is just a wrapper around a Web application that you use all the time such as Gmail, or your Web based calendar or what have you. It would be nice to be able to automate the creation of a shortcut in a very simple way. This is where the Shortcut API comes into play.

The current thinking is that there will be other desktop-y features that people may want to tie into, so the shortcut API sits inside a Desktop module.

It looks like this:

var desktop = google.gears.factory.create('beta.desktop');
desktop.createShortcut("Test Application",
                       "An application at",
                       {"16x16": "",
                        "32x32": "",
                        "48x48": "",
                        "128x128": ""});

Maybe you would use this as an install step. Maybe you give people the ability to export files in some way. What would you like to see here? This is still early stage, and we are thinking about features you would like to add. For example, the ability to say “open this Web application without the URL bar and other browser chrome”.

Other Future APIs

Disclaimer: This is early days, and who knows what the final API will look like, and how far it goes. Do you have ideas for cool Gears that make the Web better? Let us know!.

Dec 20

ChartMaker: Ext 2 UI on top of the Google Chart API

Ajax, Tech with tags: , , 5 Comments »

I had an 11 hour flight from London to SFO. What was I going to do? I had a couple of books with me. The in-flight movies were average, and even in business class they didn’t have the on-demand system, so if you missed the start you had to wait for the next go around. I poked around in a DVD store and couldn’t find anything to interest me, so I ended up grabbing ‘Heroes’ since I had never seen it. I was put off by the “Save the cheerleader, save the world” commercials, but figured if it was half decent then there was a lot of material (e.g. time) to cover.

So, I popped in the DVD, and whilst I watched, I opened up Firefox and Textmate.

I have been wanting to play around with the new Ext 2.0 release, and also with the GWT-Ext package. Unfortunately, that module isn’t using Ext 2.0 quite yet (almost!), so I decided to do a first rev of the tool with straight Ext 2.

I found the new Google Chart API to be a little addicting, and some people have asked if there was a tool for people to create charts, instead of having to munge with URLs.

A common use case is to dynamically generate the charts on the fly, and then it makes sense to just build the URls and you are done. But, what if you wanted to sit back and just throw out a chart or two?

This is where ChartMaker (code) comes in.

The tool has you fill out core information about the graph or chart that you want to create (e.g. size and title), you then choose the type of chart in the tabs, and you fill out the data needed for that type of chart. You can click on the “seed data” button to see sample data, and when you are done tweaking it, you click on “GET CHART”. That action causes a preview to be loaded below, and you get given the URL in a text box that you can copy and paste.

It is a little rough around the edges in that I wanted to let you tab though fields and have an easy way to add rows of data (instead of just using a crude textarea). I also need to make it so that all of the data can be expressed through the UI (e.g. marker types, colors, fills, etc) which isn’t the case now.

I really enjoyed Ext 2. They did a great job, and with more documentation and such to come, I think it is a great library for building these desktop-like environments.

The UI was basically defined via:

init: function() {
  var header  = headerSection();
  var center  = centerSection();
  var preview = previewSection();
  var viewport = new Ext.Viewport({
    layout: 'border',
    items: [header, center, preview]

Then each section used the “region” metadata to tell the system where to place it. You are also able to do things like tell the system you can be moved around, collapsible, and more.

So, the result of a few hours with Ext 2 with no access to the online docs and you get this:

Dec 19

Gears Future APIs: Image Manipulation API

Ajax, Gears, Google, Tech 10 Comments »

I said in my recent post on Gears being about more than offline that I would talk about some fun future APIs.

The Gears project is open source, and is really being held out in the open, which means that you can check it out and contribute. We want Gears to be community open source, as opposed to just using open source as the way code gets out there. There is a big difference. Poke around the Wiki to see more.

Back to the API. The Image Manipulation API provides a way to manipulate images though client-side JavaScript:

This is a module to give Javascript a way to resize, crop and compose images together on the client side. This will allow, for example, images to be resized into a web-friendly format before being uploaded to a photo album. Another use is for composition of images together as an efficient alternative to server-side composition or CSS layering. Yet another use is for basic photo editing – a user can edit a photo with instantly applied changes before uploading it to the server.

The module is fairly simple, and has the following API:

var image = google.gears.factory.create('beta.image', '1.0');
void open(blob)
Blob blob(type)
void resize(width, height)
void crop(x, y, width, height)
int width()
int height()
void rotate(degrees)
void flipHorizontal()
void flipVertical()
void drawImage(image, x, y)
void close()

Having this functionality available natively in the browser would be very cool indeed, and could open up the doors for some interesting ideas.

Other Future APIs

Disclaimer: This is early days, and who knows what the final API will look like, and how far it goes. Do you have ideas for cool Gears that make the Web better? Let us know!.

UPDATE: Ray Cromwell of Timepedia thinks that we should be more ambitious. There are some great thoughts in there, and this is the type of feedback that we really look forward too. We haven’t even begun here, so feedback now will hope us having something a lot better when all is said and done..

Dec 18

Ajax Feed Partner Bar

Ajax, Google, JavaScript, Tech with tags: , 5 Comments »

The Google Ajax API team has given us some new magic to sprinkle on our sites. This time we have a PartnerBar, which is “a control designed to enable contextual cross linking and promotion of sites within or across network. You configure the control with an array of Partner objects which include a feed url, partner name, etc. and the PartnerBar takes care of the rest.”

Here is an example:

It is very simple indeed to setup. The bulk of my bar is in the JavaScript:

google.setOnLoadCallback(function() {
var partners = [
          feed: "",
          moreTitle: "More Ajaxian news",
          link: "",
          logo: "logo-aj.png",
          classSuffix: "extra"
          feed: "",
          moreTitle: "More devphone news",
          link: "",
          logo: "logo-dp.png",
          classSuffix: "extra"
          feed: "",
          moreTitle: "More Google Code",
          link: "",
          logo: "logo-gc.png",
          classSuffix: "extra"
      var options = {
        linkTarget: google.feeds.LINK_TARGET_BLANK,
        numEntries: 3
      new PartnerBar("partnerbar", partners, options);

There are many options for you to tweak your bar. You can use CSS to entirely change the look, and you can even do really smart things, such as grab the image for the particular section dynamically. You do this by configuring a resolver callback, such as this one that grabs the image from the RSS feed itself:

// tie the option to the resolver: { logoResolver : logoResolverCallback, ... }
function logoResolverCallback(partner) {
  var url = "";
  var n = partner.result.xmlDocument.getElementsByTagName("rss")[0];
  if (n) {
    n = n.getElementsByTagName("channel")[0];
    if (n) {
      n = n.getElementsByTagName("image")[0];
      url = n.getElementsByTagName("url")[0].firstChild.nodeValue;
  return url;

You can also see this running on Entertainment Weekly’s online presence. It is nice to see that this came out of Mark and his team working with EW.

Dec 18

Randall Munroe of XKCD at Google

Tech with tags: , 1 Comment »

I have been to my fair share of Google Talks. From geeks to authors to presidental candidates (some all of the above).

Randall Munroe of XKCD came recently, and everyone was so jazzed. When you watch this, you can feel the vibe in the crowd. People were going to laugh at him even if Randall said nothing. I learnt how important a warm room is here. He had people in the palm of his hand before he even began.

Dec 17

“Guess who’s back, back again.”

Ajax with tags: , No Comments »

Marc is too young to sit back and play golf (XBox 360 that is), and he has put his hat back in the ring. Well, maybe not his entire hat, but rather a small part of his Beret. He is now an advisor at Appcelerator, an RIA company that came out of the consulting world:

So let’s go, I will be helping with as much visibility as I can bring them, mainly PR and this blog. They will need visibility. I am helping with messaging a bit, I am helping with the business model a bit but really all I do is listen to them and what they do and then repeat to them what they told me.

That has worked already. I did a quick search and we have never covered them on Ajaxian. Marc himself says that the market is crowded. This is a different time compared to EJBoss, when he was the first real guy on the block. Having to spin Appcelerator as some sort of better open source is going to be harder. It is one thing to compare to Adobe and Microsoft, but there are many others who have been fighting the good fight wrt open source and the Open Web as a whole.

Welcome back Marc. I hope to not see any astroturf on Ajaxian (water under the bridge) ;)

Dec 17

Google Gears: Upgrading from a 1950’s Chevy in Cuba

Gears, Google, Tech, Web Browsing 2 Comments »

Upgrading the Web with Gears

For obvious reasons, people are often assuming that Google Gears == Offline. To me, this isn’t the case. Gears happens to have three initial APIs (LocalServer, Database, WorkerPool) that can lend themselves to offline work. However, some people are grokking that WorkerPool and even Database are very useful even if your application never goes offline.

Segue: I am really excited to have Brad Neuberg of Dojo, Rojo, and other non-ojo projects fame, working with me at Google. It is a real pleasure to see the group growing, with great new hires such as Joe Gregorio, and others that haven’t made it official yet :)

I was having a chat about Gears with Brad, and he was talking about how he saw it as a way to update the Web in place. He got it.

Let’s use a really corny analogy that breaks down. We get to drive a few makes of cars (browsers) on the (information) highway. When we want new features, we have to wait for a new model to come out, and recently it feels like Cuba. The top selling car is a 1950’s Chevy. As drivers that are passionate about the driving experience, the Gears team is trying give everyone a foundation to replace the engine, even as you drive.

The goal is to give you the foundation. If it happens through other work too (e.g. other manufacturers step up to the plate), we think that is great. We want to make sure that every car on the road has a base platform to keep the highway performing well though, so we are hear to back you all up, and to keep innovation going.

Alex Russell is talking about innovation as he aims to stop us from going into pure standards hell. We are lucky that with HTML 5, we are pushing forward again. The devil is in the details though, and I am waiting to see what cars come out in 2008. If you are left with an old clanger, we are here to help though.

To make this more obvious, I will start posting about some of the exciting APIs that may be coming!