This is an archive of my old blog. My blog has moved to http://wordpress.chanezon.com
Posted by pat 60 days ago
Calendars are great, but they can be viewed on other surfaces than the classic year/month/week/day views: the surface of the earth for example. GCalMap is a demo mashup that I put together for Mashup Camp, where I will be presenting it tomorrow. It allows you to visualize upcoming events from a Google Calendar on a Map.
Google Calendar exposes Calendars as feeds: go to manage calendar, find the xml icon, then replace basic by full in the url, that's your full feed. Paste your feed in the Calendar url field, then press Go. After that you can change the number of months in the future for which you want to see events, using the slider.
This is sample code, to show what can be done with Google APIs, and start exploring this direction of mixing space and time in visualization. It could use many improvements.
I use a whole salsa of tech stuff in there:
- ROME and ROME fetcher to get and parse the feed, with a half baked quickly hacked new ROME GData module to parse the Google Data Calendar format and transform it to java beans (I just implemented what I needed). One of my colleague asked me why I used ROME instead of the Google open source GData java client library. This is actually the first thing I tried, I have a sentimental attachment to ROME but we have no GData module for now, and I wanted the fastest development time. The issue was that no JSON marshalling lib could handle the objects that this lib generates to represent feeds, since they don't follow the Javabeans conventions. Since ROME Beans do, they get JSON serialization for free:-) As a side note, about all this json business: it is regrettable that Microsoft does not implement E4X in IE 7, as it is implemented in Firefox: with E4X, no need for JSON, you have an easy way to work with XML in javascript (and can wrap the xml in a javascript string served as a javascript script source in order to avoid cross site scripting limitations).
- DWR (Direct Web Remoting) to marshal the ROME Beans to JSON and access it from javascript
- Google Maps API to add it on the map
- and a Slider from webfx
.
When doing this mashup the main difficulties I encountered were: DWR conflicts with Yahoo UI API and Scriptaculous (I had heard that at Ajax Experience, I can confirm it is true), so I had to lose a lot of time experimenting, then dig another Slider (it seems none has implemented a Slider control in GWT yet); All the Java to JSON libs I tried to translate ROME Beans to JSON failed (JSON-RPC and another one, forgot the name), but DWR serialized it very easily. However as Joe Walker told me at Ajax Experience when I asked, it seems not trivial to extract the serialization code from DWR, so I had to use it all (ideally I'd prefer to create a ROME Mano Atomlet that would spit out JSON without all the DWR remoting business). That's it, the rest is quite boilerplate code, hacked quickly in a long night.
DWR is really worth trying, for java engineers who are starting to get into Ajax. It is a remoting framework. You configure the DWR servlet, with a file where you specify which java classes from your server you want to expose. Then DWR generates javascript files that you can include in your UI layer, and automagically, you now have javascript objects that mimick your java objects. They do it the other way as well, letting you take control of the browser from the server side, through a backchannel that they setup when their js is parsed. Nifty! This was my first occasion to really play with DWR after attending Joe's talk at Ajax Experience, and I have to say: it rocks! However I could not refrain myself from thinking about 1997, when we had a CORBA ORB included in Netscape Communicator, and a VM as well, and the Browser was going to be the platform. It seems like 10 years after that folks reinvent CORBA in javascript:-)
Posted in technology/conferences | 2 comments | 6 trackbacks
Posted by pat 68 days ago
Great article by Robert X. Cringely relating a conversations he had with Bob Frankston (from VisiCalc fame) about net neutrality, billability, infrastructure, and APIs. A quote that warmed my heart (emphasis mine):
My recent discussion with Bob Frankston started with talk about Microsoft and what that company might do to turn itself around. "Microsoft seems to confuse end-to-end with womb-to-tomb," Bob said. "Or at least BillG did the last time I tried to speak to him about it. The problem Microsoft has is that it hasn't really given people enough opportunity to add value to the computing. Ironically, Google's APIs and mashups go more in this direction and I do need to give Ray (Ozzie) some credit for joining in this trend. The challenge will be reconciling that with the monolithic platform company. .Net, a stupid name for a great idea, could do very well if liberated from Windows."
Giving people opportunity to add value to computing: that summarizes what APIs are all about quite well. See you all at Mashup Camp next week, to see how we can add more value to computing:-)
PS: obviously, the title of this post is heavily inspired by Daniel Handler's latest book, Adverbs, which I wholeheartedly recommend.
Posted in technology/microsoft, technology/google | no comments | 1 trackback
Posted by pat 76 days ago
The newly formed SDForum Ruby Special Interest Group will have its first session July 6th at Google in Mountain View. Tim Burks will present Hisakuni Fujimoto's very cool RubyCocoa framework.
RubyCocoa is a framework that lets you take advantage of Mac OS X Cocoa based Frameworks from Ruby.
PS: Thanks Tim for fixing my mistake, see you next week.
Posted in technology/ruby | 1 comment | 5 trackbacks
Posted by pat 76 days ago
When I posted my slides last month I had many comments about the fact that I posted only the PowerPoint version.
Here are PDF and HTML versions
Posted by pat 89 days ago
Jon has some kind words about GData in Google Calendar and its API, and a little Python script using Joe Gregorio's httplib2 Google authentication.
Last week I pitched a hissy fit when Google PR stomped on my inquiry about GData, which is the RESTful, RSS-and-Atom-oriented architecture of which the Gcal API is the first concrete manifestation. This week I want to show what can happen when communication and collaboration flow as they naturally can and should. Google's instincts about web architecture are spot on. Sort things out on the developer relations front, and it'll be amazing.
About the developer relations angle, thanks for keeping us on our toes, we're working on it:-) Thanks for the kind words, and have fun with the API!
Posted in technology/google/api/calendar | no comments | 8 trackbacks
Posted by pat 92 days ago
French navigator Olivier de Kersauson and his team arrived in San Francisco today, breaking whatever record they were trying to break (I'm not very interested in it very much), aboard their very nice ship Geronimo.
We went to watch them sail under the Golden Gate this evening: the kids loved it! They also loved to play with a bee that was resting on the path.
I got some nice shots of the ship. My favorite is quite symbolic: on the left coming in San Francisco, Kersauson, a french showman, whose main activity is telling jokes on TV or radio, or raising money to build nice boats to break arbitrary records; on the right, going out of San Francisco, container boat Hanjin goes back to China full of useful stuff.
Posted in perso | no comments | 1 trackback
Posted by pat 95 days ago
Last month we had one of these nonsensical polemics in rome-dev about maven vs ant for build, and wether it is worth it to maintain a build.xml for our project. Hani has been kind enough to maintain a regular build.xml for us since a long time.
Now this task should be made much easier with something I heard about on Jean-Laurent de Morlhon's blog: Antlib for Maven 2.0. These ant tasks allow you to take advantage of some of the maven convenience from ant, leveraging a project's pom.xml when you want to build in ant without using maven. For example generate an Ant Fileset of all the dependencies in a pom.xml, for use in a classpath. Nifty! This should make Hani's chore easier:-)
Posted in technology/java, technology/syndication/rome | 2 comments | no trackbacks
Posted by pat 96 days ago
This is a quote from Arno Puder's XML11 Google Tech Talk, for which the video is now available. Don't miss it, it's fun and just geeky enough to keep you awake.
I met Arno Puder at JavaOne 3 weeks ago. I was presenting Google Web Toolkit at the Google booth and he started asking me very pointed questions about how the java to javascript compiler worked and why Google had chosen this design. I had to confess I did not know, suggested that he would need to ask the team in the developer forum, and instead asked him a demo of his project, XML11. The demo and explanations about the techniques he was using blew me away! It may not scale, and addresses a different problem than GWT, but his java bytecode to javascript compiler is a fascinating shortcut.
So I invited him to give a tech Talk at Google, which he did last week. It was an excellent talk, fortunately setup in building 42. Have fun watching it. Thanks Arno for sharing your insight with us.
Posted in technology/java, technology/google, technology/javacript | 2 comments | 1 trackback
Posted by pat 103 days ago
Abdera: Atom Stream Parsing for the rest of us!
James Snell sent the following proposal to the ROME developer list last week:
Hello,
I wanted to take a moment to point y'all to a new proposal I and my
colleagues Sam Ruby, and Robert Yates have submitted to the Apache
Incubator PMC to create a new incubation project focusing on the
development of a fully-featured Atom 1.0 format and publishing protocol
implementation. We're calling it "Abdera" for now.
http://wiki.apache.org/incubator/AbderaProposal
...
Early on in our development, we ran some comparisons between the Abdera
and ROME parsers and noted a significant difference. When parsing Tim
Bray's Atom feed, for instance, Rome's JDOM implementation consumed over
6.5 MB of RAM and used over 600+ million CPU cycles. Abdera's
Axiom/StAX based implementation used around 750k of RAM and around 90
million cycles.
...
In any case, let's talk. Is there a possibility that we can combine
efforts on a single project under the Apache banner?
My answer is: Wow! when can we start moving the codebase? It's been a while I wanted to look at StAX, Tim Bray repeatedly asking me when we'll get a streaming parser for ROME: it will be much easier to leverage Jame's work and agree on a common bean model for Atom feeds and entries. Also we've been talking about proposing ROME to Apache since last year, but did not do anyhting since a year. It seems the time is ripe for this move, if Apache is interested.
Dave Johnson, who implemented Atom 1.0 support in ROME, seems to be on game for it: this is great, since it is my understanding that the Atom client and server libraries that he presented at JavaOne 2006 live in Apache right now.
I haven't had much time to play with Jame's new API much yet, just build it, run the samples, and skim through the very nice code (he's kind enough to have included an eclipse project in the codebase, which makes it easier to get started)
Not all good things come for free, Abdera carries quite a lot of dependencies with it compared to 1 in ROME:
~/goocode/eclipse/abdera] pat% find dependencies -name '*.jar' | wc -l
15
But if you get a 10 times decrease in CPU cycles and memory consumption for that price, what's not to like? It sounds like a good tradeoff to me.
Because I'm a lazy guy I added a new run target to the ant build file, to let me run the samples without worying about the classpath... and was able to parse an Atom feed successfully.
eclipse/abdera] pat% ant -f build/build.xml -Drun.class=simple.Parse run
Buildfile: build/build.xml
init:
[echo]
[echo] =====================================================
[echo] abdera, 0.1
[echo] Working directory: /Users/pat/goocode/eclipse/abdera/build/work
[echo] =====================================================
[echo]
compile.core:
compile.parser:
compile.test:
[copydir] DEPRECATED - The copydir task is deprecated. Use copy instead.
build:
run:
[java] Example Feed
[java] TEXT
[java] http://example.org/
[java] Sat Dec 13 10:30:02 PST 2003
[java] John Doe
[java] urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6
[java] Atom-Powered Robots Run Amok
[java] TEXT
[java] http://example.org/2003/12/13/atom03
[java] urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a
[java] Sat Dec 13 10:30:02 PST 2003
[java] Some text.
[java] TEXT
BUILD SUCCESSFUL
Total time: 1 second
I chatted with Alejandro Abdelnur yesterday and he seems happy to collaborate, and this has nothing to do with the fact that he shares the first 4 letters of his name with the project codename:-)
Nick Lothian, who created the ROME Fetcher, and is also an Apache commiter, seems to like the idea as well.
Abdera is the native city of the greek philosopher Democritus, the father of Atomism:
Nothing exists except atoms and empty space; everything else is opinion.
This is a very apt name for the project. One way I recently described the importance of the Atom Publishing Protocol to a journalist recently was to say that with the Web, Tim Berners Lee created the InfoSpace equivalent of nature.
Roy Fielding synthesized that defining an early attempts at a web physics called REST. REST defines an architectural style where entities are resources with uris, and you use http verbs to act upon them.
Tim Berners Lee then switched directly to the equivalent of quantum physics with the Semantic Web vision, but it did not catch on because the folks implementing the web are mainly engineers, not physicists, and this was too big a conceptual jump. He tried to jump from Parmenides to Einstein without a pause at Newton.
The Atom Publishing Protocol builds on REST by defining what it is that you interact with your http verbs: Atom feed and documents. It's the small Democritus advance that we need to build a web physics that engineers can build a world on. I'm sure Newton is on its way somewhere on the web.
To come back to ROME and Abdera, I propose in this post to the ROME developer community to move the project to Apache, and merge ROME with Abdera, and Dave Johnson's blog tools, in order to create a single coherent stack of Java tools to deal with syndication data.
The roadmap I can see for the common project would look like this:
- Finish ROME 1.0 and end the beta
- Start ROME 2.0 using JDK 1.5 (Generics) with Abdera integration
- Agree on a common bean format for Atom
- Make Abdera a ROME parser for Atom
- Make streaming parsers for the other feed types
- Create a common repository of test cases gainst which to be "liberal"
- Create a Universal feed service: it is an Atom store that can be used for servers or client workstations: handles feed fetching, with a query API, the ROME Mano filtering API, and the Google Data API. On the server developers can use that to create any kind of GData server, on the client it could become the Linux alternative to Microsoft's excellent client side RSS APIs and infrastructure.
- Create a ROME module repository ala maven where a set of extension modules will be maintained ala maven repository.
- JSON serializer for Mano
- Semantic web extensions, to make it easier to consume/generate semweb data from regular feeds. Danny Ayers could help with this.
- Build an aggregator on top of the server: Roller aggregator may be a good start.
- Microformat parsers and translators: build parsers to detect microformats in Atom payloads and tranlate them to popular xml extensions (ex: hCalendar to Google Data Calendar).
Building this infrastructure was what we had in mind when we started ROME at Sun 2 years ago: I hope that collaborating with Apache will help us achieve this vision.
Posted in technology/opensource, technology/google/api/calendar, technology/syndication/rome, technology/java | 11 comments | 338 trackbacks
Posted by pat 108 days ago
I met Thomas Oldervoll at the Ajax Experience conference 2 weeks ago, and he showed me this really cool J2ME midlet he was developing to synchronize his cell phone's Calendar with Google Calendar. Now he has an early version of GCalSync available for download:
GCalSync will allow two-way synchronization between Google Calendar and the native phone calendar. Supported phones will be all newer Nokia and Sony Ericsson phones, BlackBerry (software version 4.0 required), and all other phones/devices that supports JSR-75 PDA Optional Packages.
More details will be available soon, but if you want to play with GCalSync already now, you can download an early version.
I have not tried it out yet because I'm still waiting for my new BlackBerry, but synchronization with my cell phone is my number one requirement for a Calendar, so this is the first app I'll try out. Let me know if it works for you. Congrats and thanks Thomas!
Posted in technology/google/api/calendar | no comments | 3 trackbacks
Posted by pat 124 days ago
I have finally finished my slides this morning at 5 am. This map is my first slide: a fun play with custom icons! I hope it will give you a desire to see the rest of the talk:-)
A small detail for the microcontent geeks amongst you: the event description in the InfoWindow is marked up in hCalendar. However since I generate this content in javascript, my GreaseMonkey extension that adds an icon to post it to Google Calendar, does not pick it up. I need to try adding it as a DOM node instead.
Posted in technology/javacript, technology/google/api/calendar, technology/ajax | 1 comment | 2 trackbacks
Posted by pat 130 days ago
b3ta has an image challenge about "If Google Owned Everything". Some of them are hilarious. I love the Google Garden one, very Zen!
Posted in technology/google, fun | no comments | no trackbacks
Posted by pat 131 days ago
I just release adwords4r 0.4. It fixes many bugs, is now implemented as a ruby gem and has a classic setup script for people who do not use the gems system, and all the classes in it are part of the AdWords module, which will make it easier for people to use in Rails. Compared to the alpha version I shipped 2 months ago, I'd consider this a beta.
You need to have soap4r installed from the svn trunk: there is a bug that Hiroshi fixed in soap4r that I need and that has not made it to a soap4r release yet. I also recommend http-access2 2.05 or greater.
If you're using gems, install it with:
sudo gem install adwords4r
Then look at sample scripts in the examples directory. Have fun with the AdWords API in ruby!
I've learnt a lot about ruby in the past 2 months working on this library. I'll share a few tips in upcoming blog posts.
Posted in technology/webservices, technology/google/api/adwords, technology/ruby/adwords4r | 4 comments | no trackbacks
Posted by pat 132 days ago
The Ajaxians have been kind enough to let me speak at their upcoming Ajax Experience conference, may 10-12: the agenda is chockful of great presentations and I feel honored to present there.
My talk (formatted in hCalendar for easy posting to Google Calendar:-) is Google APIs in Ajax applications: Where and When:
May 12th from 9am-
to 10:30am,
at the Westin St. Francis, 335 Powell Street, San Francisco, CA 94102. Here's the outline for it:
Space and Time are 2 important dimensions along which you can organize the world information. Google provides APIs to help deal with both: Google Maps and Google Calendar. The Google Maps API has been around for a year and defined how services could be exposed as javascript components for Mashup type Ajax applications. In april Google shipped Google Maps API v2, with API and stability enhancements, new features and better customizability.
This talk will present the changes in Google Maps v2. The Google Calendar data API is based upon a common API model called GData. The GData model uses REST principles and Atom or RSS 2.0 syndicated feeds as the base resource model to expose data held by Google services (like Google Calendar). This talk will present GData and the Google Calendar data API, as well as a sample use in GreaseMonkey.
See you there.
Posted in technology/greasemonkey, technology/javacript, technology/conferences, technology/google/api/calendar, technology/google, technology/syndication, technology/ajax | no comments | no trackbacks
Posted by pat 133 days ago
Neat trick from Elias Torres in the Google Calendar Help Data API group: when your user is logged in the browser, doing a GET on href="http://www.google.com/calendar/compose?ctext= returns you a json object of the parsed text. I tried it with http://www.google.com/calendar/compose?ctext=meeting%20with%20dorothee%20at%2010%20pm%20for%201%20hour and it worked fine.
[['_SpawnQuickAddEvent','meeting with dorothee','','','20060501T220000','20060501T230000',[],'',null,[],[]]]
Neat trick that he's using in his Quick Add Firefox extension.
Posted in technology/ajax, technology/google/api/calendar | no comments | no trackbacks
Posted by pat 133 days ago
This week end Alejandro Abdelnur shipped a first version of a pipelining API for feeds we've been discussing since a few months with Adrian Caneva: Rome Mano (mano is a latin verb meaning: to flow).
It's a a pipeline framework for RSS and Atom feeds built on top of ROME and ROME Fetcher and modeled after the Java servlet filters: it's an "Alejandro API", lean and elegant, very simple to use and deploy. It has only 7 classes. The first applications of it that come to mind is implementing a lightweight Planet for a set of feeds about a category, writing your own feedburner, or implement some form of Immediate Action Feed as described by Mark Woodman.
In the future, I see this new API as an important building block for the server syndication engine I describe in typology of syndication applications.
The sample handlers that ship with Mano lets you merge and convert a set of feeds, then serve them with pagination.
Mano is a ROME subproject, you can get it from the ROME cvs repository.
Posted in technology/syndication/rome | no comments | 421 trackbacks
Posted by pat 136 days ago
Joe Gregorio added support for GoogleLogin in his Python httplib2 library.
It's in the svn tree, not yet in a release. In order to test the script you need to do:
> svn co https://svn.sourceforge.net/svnroot/httplib2/trunk httplib2
> cd httplib2
> python setup.py install
Then install elementtree and celementtree that his sample uses to parse the output (or remove that part of the sample script).
wget http://effbot.org/downloads/elementtree-1.2.6-20050316.tar.gz
tar xvfz elementtree-1.2.6-20050316.tar.gz
cd elementtree-1.2.6-20050316
python setup.py build
sudo python setup.py install
cd ..
wget http://effbot.org/downloads/cElementTree-1.0.5-20051216.tar.gz
tar xvfz cElementTree-1.0.5-20051216.tar.gz
cd cElementTree-1.0.5-20051216
python setup.py build
sudo python setup.py install
The script Joe posted, with a sample entry in it:
import httplib2
import cElementTree
def createEntry(title,content,authorName,authorEmail,where,start,end):
h = httplib2.Http()
h.follow_all_redirects = True
name, passwd = file("/Users/pat/gmail", "r").read().split()
h.add_credentials(name, passwd)
body = """%s%s%s%s""" % (title,content,authorName,authorEmail,where,start,end)
headers = {'Content-Type': 'application/atom+xml'}
uri = "http://www.google.com/calendar/feeds/default/private/full"
# Create a new entry in the calendar
resp, content = h.request(uri, "POST", body=body, headers=headers)
print body
print resp
print content
assert resp.status == 201
# Parse the response to find the Member URI
ATOM = "http://www.w3.org/2005/Atom"
ATOM_LINK = "{%s}link" % ATOM
tree = cElementTree.fromstring(content)
reledit = [l.get('href', '') for l in tree.findall(ATOM_LINK) if
l.get('rel', '') == 'edit']
# Delete the newly created event
#resp, content = h.request(reledit[0], "DELETE")
#assert resp.status == 200
createEntry('Test Gregorio\'s script','Hi Joe\, thanks for extending httplib2: it works great!','Patrick Chanezon','chanezon@gmail.com','Moutain View','2006-04-28T17:00:00-08:00','2006-04-28T18:00:00-08:00')
Very cool! Now I hope to see someone adding the same support in ruby's http-access2.
Posted in technology/google/api/calendar, technology/python | no comments | 43 trackbacks
Posted by pat 139 days ago
Jeremy gets it: Google's GData, MySQL, and the Future of on-line Databases.
GData is the realization of the future that Adam Bosworth spoke about at the 2004 MySQL Users Conference.
It just so happened that I re-listened to his talk a several weeks ago during a walk to the bank. Hearing it for the second time, I was much more receptive to his ideas about creating a simple and open replacement for all the proprietary communications protocols currently in use by database vendors. By using HTTP and RSS or Atom, one could get 80% of the needed functionality while also greatly simplifying how things work.
Fun that he mentions Bosworth's 2005 MySQL conference talk, since this talk is part of the things that draw me to Google last year:-)
Doug Cutting from Apache Lucene proposed a Lucene GData Server as a Summer of Code project: way cool!
Posted in technology/google/api/calendar | 2 comments | 1 trackback
Posted by pat 139 days ago
Ludovic Dubost from XWiki fame just published a quick XWiki/Google Calendar integration using the Google Calendar Data API, in Groovy: very cool!
The integration presents a simple form through which you can book a meeting with him: the meeting will be added automagically to his Calendar. It shows you how you can integrate your application with the Calendar API in a few lines of code. It leverages XWiki's second generation wiki capabilities where it's very easy to create a simple forms based applications in a few lines of Groovy in a wiki page. Thanks Ludo, this is a great example of Google Calendar Data API use.!
Posted in technology/google/api/calendar, technology/wiki | 2 comments | 1 trackback
Posted by pat 143 days ago
Matt Poeppin published a nice Python script that allows you to interact with the Google Calendar Data API in Python. I just tried it and it worked fine for me. Thanks Matt.
Posted in technology/google/api/calendar, technology/python | 2 comments | no trackbacks
Posted by pat 143 days ago
If you're in the Valley, are interested in ruby and have some free time this week end, don't miss it: the lineup looks really cool!
I won't attend because I'm out of town this week end, but I will attend the future sessions that we will organize in the newly formed Ruby SIG.
Posted in technology/conferences, technology/ruby/rubysig | no comments | no trackbacks
Posted by pat 143 days ago
The Google Calendar Data API was announced this week. I hacked a little GreaseMonkey script that lets you post hCalendar events on any page to your Google Calendar with the click of a button.
There's not much in there: I just took the GreaseMonkey extension that Elias Torres posted last week, which parses the hCalendar format, tweaked it a bit to get the data in the format I needed, then added the http logic for the POST call of the protocol.
This is just a proof of concept to show how you can use the protocol in javascript: to make a usable script the hCalendar parser needs to be improved, you'd need to cache the gsessionid, give the user some feedack about the operation status, handle the captchas, etc...
Also it is not secure: the extension stores your username/password locally. Feel free to change that to var email='youremail' if you prefer.
With that in mind, you can find it here: hCalendar to Google Calendar extension. Have fun with the Google Calendar Data API!
Posted in technology/greasemonkey, technology/google/api/calendar, technology/firefox | no comments | no trackbacks
Posted by pat 152 days ago
From Creating a feed syndication platform at Microsoft
Starting next week I will join Microsoft's Windows Live division to create a new product team around syndication technologies such as RSS and Atom.
Too bad he did not join us: he did a great job at ETech presenting the Google Reader Platform and API.
I do not believe we have even begun to tap into the power of feeds as a platform and the possibilities that exist if we mine this data, connect users, and add new layers of personalization and social sharing. These are just some of the reasons I am excited to build something new and continue to change how the world can access new information as it happens.
Neither do I, and this seems a worthy goal: so far what I've seen coming from the Microsoft RSS team is a pretty good platform, and I hope they will keep it open as usage of feed grows. Good luck in your new job Niall.
Posted in technology/syndication, technology/people, technology/microsoft | 2 comments | no trackbacks
Posted by pat 154 days ago
It seems like RedHat bought JBoss today, for $350 million: not bad!
When discussing that in the ossgtp (open source get together paris) mailing list, a fellow open sourcer, Philip Mark Donaghy, sent out a link to a Google cached page of an old post from Marc Fleury's blog entitled Sun vs Red Hat, who is more Open Source. It was published in september 2004. It seems the page is not on Marc's blog anymore:-). A quote from it:
RH is a PACKAGER, not a technology house. How do they DARE call SUN on technology innovation. SUN by all measures has been a star in technology. SUN created more technology over the years than RH ever will, JAVA, NFS (open source) etc. RH is a packager, it doesn't create JACK, it doesn't create Linux, it wraps it up in proprietary shit. And no the contributions that they make don't really count. Linus Torvalds creates Linux.
It sounds quite fun when reading Marc's new post about the RedHat acquisition:
RedHat and JBoss share a joint culture of pure-play open source. While different, our cultures are both centered around the mission of changing the industry through the development, distribution and support of free and open source software.
Who could blame him? $350 millions is a fair price to change one's mind:-) I wonder what Hani will write about this when he knows.
Posted in fun, technology/opensource | 2 comments | 29 trackbacks
Posted by pat 154 days ago
Nelson Minar announced that he's leaving Google, and sadly this one's not an april fool's joke: this is a bittersweet news for me. He was one of the engineers who really pushed very early on for Google to provide APIs, which is part of what draw me to this company. He started the search and AdWords API products.
I first interacted with him when I was at Sun, providing him a patch for their search API java client library to add support for proxies (I had to decompile it because they were not providing the source for it :-) Then last year we talked a lot before I took the job of evangelist for the AdWords API, and until december when he went on leave, I considered him my informal mentor at Google.
But while I'm sad not to be able to work with him anymore, and learn from his daily example of calm, dedication and smartness and from his encyclopedic knowledge, I'm happy to see him consider new projects (I look forward to play with whatever he comes up with), and can only cheer at his decision to go live in France for a few months: french VCs and startup geeks, grab him while he's there!
Goog luck Nelson, whatever you're up to, it was a pleasure working with you. I'll do my best so that your API mindset legacy thrives at Google.
Posted in technology/google, technology/people | 2 comments | no trackbacks
Posted by pat 163 days ago
What a better way to celebrate my birthday (yes I'm an april fool) than this special announcement?
Evangelizing the AdWords API at Google was a blast, but I could not pass up this offer: Microsoft finally gets it and I want to be part of this adventure!
They approached me last week their Mix06 conference with their super secret shocking project and that was too good to be true: they're shedding .NET and their proprietary licensing model, and switch to Java, Linux and Open Source! And they asked me to evangelize the products that come out of this new group.
Now I understand why Scoble wouldn't talk to me during the conference: he was preparing his own move to Google!
I'll be part of the Java Open Source Team at Microsoft, and won't be alone: believe me their recruitment team have done their homework! Many of my friends from the Open Source Get Together Paris announced that they all join at the same time: Ludovic Dubost, Jérémi Joslin, Vincent Massol, François Le Droff, Didier Girard..
Compared to the puny Open Source contributions that Google have made, what Microsoft plans to contribute in the next few years (it'll take me some time to get used to their way of announcing products a few years before they actually ship in order to lock the market:-) is staggering:
- Windows will be open sourced for whomever wants to maintain it. Microsoft has not interest in the codebase anymore since they switch to Linux (they'll buy Red Hat to get some folks to train their developers) for all their products. The Windows codebase will live in the subversion servers of the Computer History Museum in Moutain View... where they belong.
- a complete rewrite (they like total rewrite, it keeps developers busy) of Visual Studio.NET on top of Eclipse (Eric Gamma is the new architect for the Visual Studio team)
- They're going to announce they buy Sun next week, in order to be able to open source the Java VM under the GPL. A nice side effect is that Jonathan Schwartz will take Scoble's position as chief blogger.
- Scrap the .NET CLR and replace it with the Java VM.
- XAML is discontinued. Instead extensions to XUL and SVG will be proposed to the relevant standards body.
- More generally Microsoft will now use only standard data formats, and all their data will be open for external services to use them. They hired Marc Canter to lead their open data division.
- The IE team will drop their current codebase and start contributing to FireFox.
- The Office team is reassigned to Open Office.
- All their enterprise software will be replaced by a stack of open source java servers that will be developed under the auspices of the Apache Foundation.
Chris, Bret, when do you join us? We have plenty of open reqs in the developer evangelism group!
What makes all these changes possible? All these software will ship for free, but with ads served by Microsoft AdCenter. It's unfortunate that end users will have to provide a thick binder of data describing themselves before being able to use the software, so that AdCenter can target them a bit better, but I'm sure they won't mind:-)
It seems there's a bit of shuffling in the industry today: Matt and Jeremy are switching places at Yahoo and Google.
I loook forward to get started at work, and ditch my faithful Mac PowerBook for a nice Origami running Microsoft Linux!
Posted in technology/google, fun | 3 comments | 1 trackback
Posted by pat 176 days ago
I'll be attending Mix 06 from monday to wednesday, to see what the Microsoft folks are up to these days. The RSS stuff that Ray Ozzie presented at ETech last week was pretty cool, but the new Microsoft Live Portal felt very 1999 and the only cool new thing they presented for search was the ability to define and share macros.
Posted in technology/conferences | no comments | no trackbacks
Posted by pat 178 days ago
I just commited a first shot at an adwords api lib for ruby, adwords4r. It's very much unfinished, an alpha. I need to add a few more features, and some refactoring, documentation, comments and cleanup, but I have commited what I have today because a few folks seem interested. This is for early adopters and tinkerers. I'll do a proper announcement when I have something more rounded to present.
I copied and adapted a few things from the excellent ebay4r, and wonder wether there wouldn't be some of these aspects (wrapped exceptions, list of valid methods, header management) that we could generalize and include in soap4r to make the creation of such API wrappers easier.
To check it out:
svn checkout svn://rubyforge.org//var/svn/adwords4r
Then look at the Readme. It's on open source project, so don't hesitate to enhance it: there's still a bit of work to do to make it beta quality. The kind of stuff you can do with it:
adwords = AdWords::API.new
adwords.getAllAdWordsCampaigns(123).each {|c| puts dumpObj(c)}
Posted in technology/ruby/adwords4r, technology/google/api/adwords | no comments | no trackbacks
Posted by pat 181 days ago
Last week at ETech I attended David HH's session about the new rails stuff where he was talking about microformats. I haven't grokked them completely yet, but asked why they used css class attributes to describe semantics when these were designed for presentation purposes. Rohit Khare answered that CSS classes were designed for that kind of use. I said thank you, I learnt something today.
But today I went back to the spec to check it out and read this: who to believe?
Selectors Note. CSS gives so much power to the "class" attribute, that authors could conceivably design their own "document language" based on elements with almost no associated presentation (such as DIV and SPAN in HTML) and assigning style information through the "class" attribute. Authors should avoid this practice since the structural elements of a document language often have recognized and accepted meanings and author-defined classes may not.
Posted in technology/microformats | 15 comments | 414 trackbacks
Posted by pat 192 days ago
A quick note from Tim Bray from last year, about using Rome from JRuby. Saw it linked from ruby-talk today. I had missed that piece last year. It makes me pretty happy because I've always missed the Rome functionality for processing feeds in Ruby, and life is too short to reimplement Rome in Ruby. Calling Rome from JRuby sounds like the best of both worlds.
The ruby-talk thread started by Charles O Nutter (I would add him to my subscription list if he properly advertised his feed) who has an excellent blog about JRuby has an interesting discussion about JRuby threading. The lack of native threads in Ruby being a weakness of the platform, if JRuby could piggyback on java native threads, it would be a best of both worlds solution. Unfortunately it doesn't seem to be the case yet.
Posted in technology/ruby, technology/syndication/rome, technology/java | no comments | no trackbacks
Posted by pat 193 days ago
The O'Reilly folks have been kind enough to accept a Google AdWords API meetup at ETech in San Diego March 7th. From the program:
The Google AdWords API is a web service API that allows AdWords customers to interact with AdWords programmatically. It has been launched 1 year ago and has an active developer community.
This session is about sharing experiences using this API, and depending on the attendence, could lead to a more general discussion about what are the challenges associated with exposing a web service API.
Hope to see some AdWords API developers there.
Posted in technology/google/api/adwords, technology/conferences | 1 comment | no trackbacks
Posted by pat 193 days ago
Mark Woodman is in a creative streak: after his excellent Putting RSS to Work: Immediate Action Feeds, he just published ROME in a Day: Parse and Publish Feeds in Java on xml.com. It explains how to use ROME with a quite detailed an fun example, FeedWarmer, a small application that performs the same kind of functionality as FeedBurner, ie adding Immediate Action features to your feed. He gives a nice overview of ROME and its various subprojects, and explains how to use modules to parse and generate namespaced metadata present in feeds.
In an email conversation we had, he worried that it was really beginner's material: it is, but it is comprehensive, and beginner's material is exactly what we need to attract more folks to ROME and show how mnaipulating feeds with it is simple. In the past few months Mark emerged as ROME's chief evangelist and I'm thankful for that. Maybe we should start calling him Marcus Tullius Homo Ligneus:-)
Thanks for the article Mark: keep the ideas coming!
Posted in technology/syndication/rome, technology/java | 2 comments | 1 trackback
Posted by pat 193 days ago
Another hilarious presentation from John Coryat's brother (John is the guy behind the great maps.huge.info Google Maps mashup): The Democrats Gets Balls.
Posted in fun | no comments | no trackbacks
Posted by pat 221 days ago
New ROME commiter Randy J. Ray, who made yesterday's ROME 0.8 release possible by fixing many bugs, published today a great piece about how to use ROME on java.net: Taking a tour of ROME.
It seems I've crossed Randy's path all day: this morning I ordered a ROME T-Shirt from Cafepress for him, to thank him for his bug squashing expedition. Then I had lunch with Joe Ruff, an ex-Netscape friend now at Tellme, and when he told me Randy used to work at Tellme as well: small world! Last, tonight, looking at the bottom of his article I saw that Randy was the co-author of Programming Web Services With Perl, an excellent book I bought a few months ago when I joined Google, in order to learn more about the Perl Web Services toolkits that some of our API customers use.
Posted in technology/syndication/rome, technology/java | 1 comment | no trackbacks
Posted by pat 222 days ago
Today we released AdWords API with versioning: this means that our customers will be able to migrate to the new version at their own pace. Before everytime we pushed a change it broke all the clients. This is a big step towards maturity for the API.
Version 3 includes the new content bidding functionality: have fun with it.
AdWords API Blog: API Versioning is Live We are excited to announce that we have launched global support for API versioning.
This afternoon we released Version 3 of the AdWords API. The AdWords API v3 contains new support for Content Bidding.
Posted in technology/google/api/adwords | 1 comment | no trackbacks
Posted by pat 222 days ago
Ugo Cei shows you how to. It's a cool trick, I've always found the ruby feed parsing libs pretty lame compared to ROME, but am too lazy to port ROME to ruby. Don't know what rjb implies in terms of perfs though.
Posted in technology/ruby, technology/syndication/rome | 1 comment | no trackbacks
Posted by pat 222 days ago
The ROME team is proud to announce the release of ROME 0.8 beta, with Atom 1.0 support.
Many thanks to Dave Johnson who implemented Atom 1.0 support, the main attraction of this release, Randy J. Ray and Joseph Van Valen who fixed the last bugs (both get a free ROME T-shirt), making this release possible, Nick Lothian, Mark Woodman, Subramanya Sastry, Laird Dornin and the others who participated one way or another.
For people interested in ROME, Dave Johnson has setup Planet ROME, and aggregation of blogs from the ROME team. You can subscribe to its feed if you want to stay informed about what's new in ROME.
Posted in technology/syndication/rome, technology/java | 5 comments | no trackbacks
Posted by pat 242 days ago
Performancing for Firefox Blogging Tool I encountered a problem when trying to post this from Performancing. It would act like it was posting but it didn’t show up on the blog. A quick check of Typo’s production log showed the following error:
RuntimeError (RPC-value of type boolean is wrong):
/usr/local/lib/ruby/1.8/xmlrpc/parser.rb:78:in `boolean'
A snippet from the xmlrpc call shows one boolean value
{"value"=>{"boolean"=>"true"}
parser.rb was expecting a 1.
I encountered the same issue when trying Performancing the other day and did not bother to track it. Chris analyzed the bug, and in a comment to Chris' post, Uzair provides a nice Typo specific fix.
Looking at the
xml-rpc specification,
expects a 1, not 'true', so it's a Performancing bug in their meta weblog API implementation.
Let's try it out by posting this!
Posted in technology/blog | 1 comment | 1 trackback
Posted by pat 263 days ago
After reading John Battelle's 2006 predictions, I decided to try out Matt McAlister's hilarious Dotcom Prediction Generator. Here's the result:
Last year I made several predictions that now seem ridiculously enthusiast. But a few ideas were pretty close. I've got a feeling that 2006 will be a big year, and here are some of the reasons why:
- A Menlo Park startup is going to open our eyes to some new ways that Atom can influence culture. Doctor Dobbs will pick up on this and run several cover stories on the founders.
- Eric Schmidt will be in the spotlight for his decision to support atom. This will upset John Battelle, and the blogosphere will react excruciatingly. The noise will quiet before the end of the year and it will all be forgotten soon after the shock.
- Google will see their stock skyrocket after their Advertising business starts taking off. We've seen it coming for a while now, but 2006 will be the year it really kicks into gear.
- Either Yahoo or Microsoft will seek to expand their Subscription business by acquiring xWiki. eXo platform will be overlooked in the process, and they will see a management shakeout later in the year.
- One of the big leaders in the Media industry will wake up to the threat of the Internet and the Web 2.0 trends. After months of speculation, they will make a key acquisition that will shake up the landscape for years to come.
Posted in fun | 1 comment | no trackbacks
Posted by pat 271 days ago
Congratulations to Mark Woodman who published his first article on xml.com today, Putting RSS to Work: Immediate Action Feeds.
Mark has started a conversation a few months ago about identifying Syndication Design Patterns. In his article he describes the first pattern that he identified: Immediate Action, that he summarizes this way:
A link from information to action is not good enough. I will provide an immediate point of action to the user directly in my feed whenever possible.
He then gives out several examples of how early syndication tinkerers, like Russell Beattie and Danny Ayers, but also eBay have used that pattern. His article is published at a perfect time, because yesterday, FeedBurner announced its new FeedFlare service that implements this pattern in a generic way, and plan to provide an API that will allow developers to add Immediate Action services to FeedFlare enabled feeds.
Mark is a commiter in the ROME Atom/RSS Java utilities project, where with others he created our Aqueduct persistence API subproject, and he organized our logo contest. I'm a big believer in the interest of the Immediate Action pattern since Alejandro Abdelnur, Adrian Caneva, and myself have been playing with the idea of a syndication engine based on this pattern.
There are many issues associated with implementing Immediate Action, that I will get to in a later post: support for cookies, IFrames, javascript. Feedburner sidesteps them with the classic hack of using pictures to represent the actions, which avoids the item to be refreshed everytime there is an action change. It feels like at the beginning of the web, when images and imagemaps where used as a primary vehicles for interaction. I hope that the syndication community will be able to come up with nicer ways to implement this over the next few months, in order to be able to implement the pattern using the Ajax style that proved so user friendly for web application. I trust the community to perform this transition from images to ajax in the next 6-12 months.
Thanks to Mark for helping structure the field through pattern definitions: as Jesse James Garrett proved when he coined the term Ajax for a style of web application development, words and definitions really help a technology to get momentum.
Posted in technology/syndication | 1 comment | 1 trackback
Posted by pat 277 days ago
Tim Bray posted a pretty detailed analysis of Google Analytics. It is full of insight since he has been running his homegrown statistics about his blog frequentation for a while, so he has a good baseline to compare to.
About one of the issue he mentions:
So I reported that as a bug, but the reporting process had that familiar Google “we’re-too-busy-being-scalable-to-hear-you” tone.
Some of us have read the Cluetrain Manifesto Tim, we're hearing you!-) I forwarded your post to the Google Analytics team and hope they will get back to you as they understand the reasons for the discrepancies you describe.
Posted in technology/google | 1 comment | no trackbacks
Posted by pat 342 days ago
Last month when the news broke that Google had hired Vint Cerf, Tim O'Reilly commented:
It will be interesting to see how Vint, known for his impeccable 3-piece suits and his courtly, almost old-world demeanor as well as for his technical credentials. will integrate with the hacker culture of Google. On the surface, they might seem like an odd-couple, but I see in both deep thinking and passion about the ability of the internet to create a better future. I think it's a marriage made in heaven.
I started at Google in Mountain View yesterday. At lunch a smiling dressed up guy came up in the Noogler (New Googlers) zone of the Cafeteria and started shaking hands with everyone, presenting himself: "Hi I'm Vint Cerf, I'm starting today as Chief Internet evangelist". Cool! Tim was right: marriage made in heaven:-)
This will make it easier for me explaining my job to my parents: when I told them that I would be an API evangelist, going to work dressed in Hawaiian shirts, I immediately felt I'd have a lot of explaining to do. Now I can just point to Vint's picture and explain: I'm doing the same kind of job as this guy, who incidentally is considered one of the fathers of the internet.
Posted in technology/google, technology/people | 11 comments | 2 trackbacks
Posted by pat 397 days ago
Ozan rocks! Now we only lack some music on top of that:-)
Posted in technology/syndication/rome | 6 comments | no trackbacks
Posted by pat 397 days ago
Another ROME powered application that popped up lately: I/ON Internet Video Console. After all the fuss about podcasting replacing the Radio, the next logical step is to replace the TV with a personalized feed based media center. I/ON seems to start implementing that dream, and they use ROME for their syndication needs.
Posted in technology/syndication | no comments | 2 trackbacks
Posted by pat 397 days ago
After a year our little ROME - RSS and Atom utilities in java open source project has come of age. In addition to getting a brand new logo last week, we also got 2 important customer testimonials on the Powered By ROME wiki page: AOL is using ROME for its brand new My AOL Beta feed reader, and CNET for its TechRepublic site.
RSS was invented at AOL (Netscape) for the My Netscape Portal, but AOL quickly lost any interest in the format: I'm really happy that they dumped the fragile perl/python infrastructure we used then to manage syndication feeds and use Java and ROME for their new site!
Thanks very much to Bill Kocik from AOL and Bryan Peabody from CNET for spending the time to get authorization to acknowledge that their sites use ROME.
Posted in technology/syndication/rome | 3 comments | 488 trackbacks
Posted by pat 404 days ago
And the winner is... Ozan Yigit for Ozan Yigit #1!
I want to thank all the creative folks who helped the ROME project get a visual identity. In june Mark Woodman organized the ROME logo contest and we had 20 designs to choose from. We had a really hard time chosing considering the quality of the designs. The community voted for a short list of 3 logos:
Sylvain Comte #1, an excellent design based on the ROME Collosseum, with many layered meaning in the shapes and colors.
Ozan Yigit #4, a minimalistic design inspired by Paul Rand.
And Ozan Yigit #1 which we ended up chosing.
Alejandro and I picked Ozan Yigit's #1 design as the winner.
The new ROME logo is fun and colorful. It is inspired by Saul Bass and we really are extatic to have a Hitchcok-feature-grade logo for our little project. Moreover we love the fact that it does not look geekish at all: this logo will make great T-shirts and swag that your relatives won't make (too much) fun at you when you wear it (my wife regularly gasps at my growing geek T-shirt collection).
Ozan, congratulations, and thanks for the logo. I hope you will post a detailed explanation of his design process for the logo on your blog.
You win what was promised: a free T-shirt, due credit on the ROME web site, well deserved bragging rights,... except for the JavaOne swag, since I attended the conference in a rush and did not have enough time to collect it, but if you're OK I propose some Google swag instead, to which I now have an easier access (the Sun marketing folks passed the opportunity to give us swag as prize for the contest:-)
Sylvain Comte who's the other finalist wins a free ROME T-shirt.
For all others who participated in the logo contest, thanks for participating.
Mark objected to us that Ozan was working for Sun, as Alejandro, and as I used to, so there was a risk that we would be accused of favoritism. I can assure you it was not the case. First neither Alejandro nor I did get a vote to select the finalists. Then we really preffered Ozan's logo. Here's an extract of a discussion I had with Mark which explains my own preference and why I think Ozan's logo is the best for ROME.
> Obviously my opinion is not part of the process, but I do have one bit
> of hesitation about Ozan #1 as compared to Sylvain #1: The "cool
> factor" aside (I really do like the design), the former conveys a
> sense of something cobbled together... none of the pieces literally
> fit with each other. The OS community is trying to shed that image...
> do we want ROME to be forever represented that way? I believe
> Sylvain's colosseum and its polished effect may better represent what
> we're trying to accomplish.
Interesting discussion. I think I would have agreed with you a few
years ago, but as I get older I embrace the richness of variety of the
bazaar model as something lovable. It pushes into the software realm
some human aspect: for me oss is as much about humans as it is about
ideas and software constructs. And my philosophy of design more and
more gets down to small pieces loosely joined.
So for me the joyous colorful unstructuredness of Ozan's logo reflects
much more how I think about ROME than the orderly Colyseum painted by
Sylvain.
And look at our little ROME community: we're all wildly different!
I hope you'll agree with me... and if you don't, it just validates the point I was trying to make;-)
Posted in technology/syndication/rome | 17 comments | 58 trackbacks
Posted by pat 420 days ago
I left Sun 3 weeks ago a bit quickly and did not have the time to properly say goodbye. Next friday (july 22nd) I'll have a "bye bye" lunch with my Sun friends, from 12 pm to 2 pm, at the Faultline Brewery on Lawrence and 101 (map and directions).
If you're in the Valley and we've worked together, please join us (I'll send that to a few friends so that they spread it in mailing lists, but I may forget a few). Please RSVP by adding a comment to this post, or sending me an email.
I hope to see a lot of you next friday!
9 comments | no trackbacks
Posted by pat 425 days ago
I'm honored that Mark Woodman asked me to share some thoughts about RSS in the enterprise in his excellent RSS Diaries: Interviews about Syndication in the Enterprise series. He published it today. Too bad Tucu (Alejandro Abdelnur) is in vacations: I hope Mark will publish his interview as well, since he's the one who implemented most of ROME (I consider myself the product manager on this project).
Mark is a very active commiter in the ROME project: he's the one who organized our recent logo contest (we need cool t-shirts), and proposed the Aqueduct ROME persistence API subproject.
Posted in technology/syndication | 1 comment | no trackbacks
Posted by pat 427 days ago
I left Sun 2 weeks ago and joined Google as Adwords API evangelist.
Don't tell my mother I'm an evangelist... she thinks I'm a software geek with an interest in litterature and poetry. This job description requires a bit of explanation: when I said to my mother what my job title was, she asked me wether I would start preaching the Bible (I'm an atheist).
Google Adwords is a service that lets customers buy search keywords on Google, to display their ads: when someone does a Google search with the keywords you bought, there is some chance that your ad will be displayed on the top or right of the search results. The actual mechanism is a bit more complicated than that, you don't buy keywords, but bid on them, and an auction is performed to select the ads to show. Moreover Google wants the ads to be useful to their users, so your ad has more chance to appear if many users click on it (the CTR, or Click Through Rate, is used in conjunction with the bid price to determine which ad to show). You can find more details about this in the Adwords FAQ.
Until recently, the way customers managed their ads was through a web application: it is very well designed, but when you start to have thousands of keywords to manage, or if you want to integrate your ad strategy with your internal applications it is not enough.
In january Google launched a beta of their Adwords API. An API, or Application Programming Interface, is an interface to a system, but designed for machines, ie other programs, instead of humans. The Adwords API uses web services standards SOAP and WSDL, making it easy to use in any language or platform. The API lets you write applications that can create campaigns or optimize your bids based on some internal product database, mor write different front ends to the API, in the language or platform of your choice.
Guy Kawasaki who evangelized the Mac for Apple, defines what secular evangelism is in Selling the Dream: "the process of selling a dream", or more down to earth, get customers, employees, and partners to believe in a product or service. A technical evangelist does that for technical products such as development platforms, or web services. For software it means fostering a community of developers, make them happy, help them achieve their dreams using your platform.
One technical evangelist whom with I've worked with at Sun is Simon Phipps, who is Sun's chief evangelist. Another, who does not have the word "evangelist" in his title but is the best I've ever seen is Tim Bray. I learnt a lot from both of them when evangelizing blogs at Sun.
The only evangelist I know who's evangelizing a web service is the excellent Jeff Barr who evangelizes the very well designed Amazon Web Services... and my new colleague Nelson Minar who designed the Google Search and Google Adwords and hired me to help him with the evangelization part for Adwords.
So what dream am I going to sell you? One I picked up from a 2002 article by Tim O'Reilly: Inventing the Future:
All of these things come together into what I'm calling "the emergent Internet operating system." The facilities being pioneered by thousands of individual hackers and entrepreneurs will, without question, be integrated into a standardized platform that enables a next generation of applications.
What he called "the emergent Internet operating system", that has been more recently called Web 2.0 is the dream I'm passionate about, and I think Google has a big role to play in realizing that dream.
Here are a few of the APIs Google offers today: Google Search, Google Desktop Search, Google Adwords, Google Maps and Google Earth. The full list is at Google Code: APIs (Thanks for the link Kevin). These APIs are very important in fulfilling Google's mission: "to organize the world's information and make it universally accessible and useful."
My Google colleagues have done a terrific implementing all these services, I hope I'll do a good job selling that dream to you all.
Updated july 17th: added link to the full APIs list following Kevin's comment.
Posted in technology/google/api/adwords, technology/webservices, perso, technology/people | 11 comments | 1 trackback
Posted by pat 439 days ago
Cross posting this to http://blogs.sun.com/pat and my new blog http://blog.chanezon.com
I'll give a talk with Dave Johnson and Kevin Burton at JavaOne on thursday: beyond blogging. See Dave's announcement. Too bad Alejandro Abdelnur, our fourth speaker, won't be there. This is the result of my January proposal to make a common presentation of the various syndication projects in java.
Posted in technology/conferences/javaone, technology/syndication/rome | 2 comments | no trackbacks
Posted by pat 439 days ago
Cross posting this to http://blogs.sun.com/pat and my new blog http://blog.chanezon.com
I have left Sun on monday, so I cannot blog on blogs.sun.com anymore. You can find my new blog P@ Log at http://blog.chanezon.com/. The new feed is at http://blog.chanezon.com/xml/rss/feed.xml.
For my new blog I use a new blogging engine called Typo. It is much less fully featured than Roller, which powers blogs.sun.com, but it is a promising server written in Ruby On Rails, a framework I've been playing with a lot lately, and it makes it very easy to play with the engine and add features to it, such as the Ajax Hierarchical Category and Calendar browser I created last month.
Happy blogging to the Sun bloggers: I was very happily surprised at the explosive adoption of blogs at Sun, and the overall quality of the blogs.
Sun Blogmasters, good luck to you: it was a pleasure working with you and a really fun experience. Dave, you can freeze my account now.
Posted in technology/ruby/rails, technology/blog | no comments | 43 trackbacks
Posted by pat 439 days ago
Cross posting this to http://blogs.sun.com/pat and my new blog http://blog.chanezon.com
Parting haiku
Netscape, let a thousand protocols bloom
AOL, pick the fruits of the boom
iPlanet, autumn rains loom
Sun, shines amid winter gloom
Time to find my way home, like Poldy Bloom!
My career as a code snippet
A little pseudocode snippet to summarize what I've been doing these past 8 years (full details in my resume :-) I have lived through it, but haven't compiled it!
package com.sun.hr.career;
import com.netscape.server.*;
import com.aol.portal.*;
import com.iplanet.marketmaker.portal.*;
import com.sun.portal.*;
import com.sun.syndication.*;
import com.sun.hr.exceptions.*;
public class PatCareerAtSun {
public static void main(String [ ] args)
{
//consulting Netscape France
AppServer.importTo(FRANCE).sell();
//AOL MyNetscape Portal Mountain View
MyNetscape.get().manage();
//Sun/iPlanet Market Maker
MarketPlace iMM = new MarketPlace();
//Sun Portal France
Portal.getVersions().next();
//Sun ROME open source project
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader("http://blog.chanezon.com/xml/rss/feed.xml"));
throw new ResignException("let's try something else");
}
}
I left Sun on monday after 5 years. But among merger and acquisitions I've stayed in the same entity (enterprise servers) for the past 8 years: Netscape, AOL, iPlanet, Sun, doing Portals, eCommerce and Enterprise Servers, so it's a big good bye!
I mosly enjoyed my time at Sun. The things I really liked at Sun are:
- Good people: it was a pleasure and a learning experience to work with so many bright engineers from all over the world. I made many friends at Sun over the years and will keep fond memories from my time here.
- Passionate people: Sun people are passionate about what they do, and very opinionated. This very often brought on us some laughs from the analysts, or the rest of the industry. But in the technology business we're in, I think it is a valuable quality.
- Cool technologies: even if recently I've played a lot with Ruby, Java is still pretty cool in my book (AOP, annotations,...) and the most suitable language and environments for many type of projects. And the Sun Labs people churn out regularly some cool new stuff: Fortress (scientific computing language), Barcelona (multi process VM), Looking Glass (3D Desktop)
- Interesting problems to solve: scalability, maintainability, huge code base, dependencies management, public API definition and deprecation, platform andf app server issues... At Sun I learnt to program in the large and take into account all aspects of the software lifecycle.
- Excellent remote working policy: among the many software companies I've talked with, Sun is ahead of the pack with its remote working policies and infrastructure. I've been working from home in France since 4 years, designing products that were implemented in the US or India, and it worked really well.
- Great recent focus on open source: OpenOffice, NetBeans, OpenSolaris, Sun is putting the lines of code where its mouth is. I did my share with ROME.
- Best corporate bloggers in the world: thanks Jonathan for giving the impulse from the top for blogs.sun.com. Participating to its birth was one of my most fun job at Sun.
Thank you all for these good years, and good luck!
GP@
Posted in perso, technology, technology/java | 12 comments | 486 trackbacks
Posted by pat 451 days ago
After some prompting from Tobias when he read the problems I described yesterday I tried something else: installing fcgi directly without using the gem works.
I changed dispatch.fcgi to
#require 'rubygems'
#require_gem 'fcgi', '= 0.8.5'
require 'fcgi'
Then installed fcgi manually
cd /tmp
wget "http://sugi.nemui.org/pub/ruby/fcgi/ruby-fcgi-0.8.6.tar.gz"
gunzip ruby-fcgi-0.8.6.tar.gz
tar xvf ruby-fcgi-0.8.6.tar
cd ruby-fcgi-0.8.6
ruby install.rb config --
--with-fcgi-include=/usr/local/include --with-fcgi-lib=/usr/local/lib
make
ruby install.rb setup
ruby install.rb install
service httpd stop
service httpd start
This way it works with fcgi 0.8.6: weird! There must be some subtle issue when installing the gem form I guess.
After a few back and forth emails and tests with Tobias Luetke, he found the bug in his gem and fixed it: just get the latest 0.8.6.1 gem.
Posted in technology/ruby/rails | 3 comments | 32 trackbacks
Posted by pat 452 days ago
After moving all my customization from Typo 1 to Typo 2 on my development machine I finally moved to Typo 2 in production.
Members of the typo mailing list were kind enough to make me notice that there was a migration script for the db in db/updates/update.168.to.200.mysql.sql.
What took me a while are problems with fastcgi. My configuration is Apache 2 with FastCgi on Red Hat. Before installing I did a gem update which updated fastcgi from 0.8.5 to 0.8.6. After that Rails did not work anymore under Apache: it yielded a systematic result of error 500 with the following in the log:
FastCGI: comm with (dynamic) server ".../dispatch.fcgi" aborted: (first read) idle timeout (30 sec)
FastCGI: incomplete headers (0 bytes) received from server ".../blog/public/dispatch.fcgi"
After much Googling, testing and tweaking I isolated the problem to fastcgi 0.8.6 and mod_fastcgi: I add the fix here in case it is useful for other people
What fixed the problem is upgrading mod_fastcgi to 2.4.2 and downgrading the fastcgi gem to 0.8.5:
wget http://www.wesmo.com/redhat/i386/mod_fastcgi-2.4.2-1.i386.rpm
rpm -ivh mod_fastcgi-2.4.2-1.i386.rpm
chmod a+x /usr/lib/httpd/modules/mod_fastcgi.so
and in public/dispatch.fcgi
require_gem 'fcgi', '= 0.8.5'
I hope this will be useful to others having similar woes.
Now I have a working production Typo 2.0 blog with my own skin and my additional hierarchical category and date browsers.
Next step is to iron out a few details in the code before I can submit it to the Typo team.
Tobias Luetke who's in charge of the fcgi gem tells me that you should not downgrade to 0.8.5 because it has a memory leak. So don't follow these advices. I will keep that config until I find a better solution, but you should not:-)
Posted in technology/blog/typo, technology/ruby/rails | no comments | no trackbacks
Posted by pat 461 days ago
After much tweaking I finally post the result of my recent week end hacks with Ruby On Rails and the Typo blogging engine. This is a work in progress and is by no mean finished: I don't think it works on IE, the UI is not very good yet, and there are a few things I still want to tweak.
The goal of this exercise was to produce a hierarchical category and calendar browsers for my Typo blog in the fashion of Tim Bray's When and What pages, but dynamic. I want the user to be able to browse categories and dates in the main page without refresh, and to be able to select categories and articles without refresh either, usin popular Ajax techniques. In addition I want clean REST links for all browseable items, for easy bookmarking. Using Rails Ajax framework for this makes it very easy to implement. Also using GET in XmlHttpRequest is fine for this since the requests have no side effect.
When you click on What and When in the top menu, if you have FireFox, it should create a little channel on the right that lets you browse dates and categories. The browsing does not trigger a browser refresh: it's all powered by XmlHttpRequests. Using the Ruby on Rails Ajax framework made coding this a breeze and allowed me to dig deeper in Rails internals and use patterns.
In the hierarchy, clicking on one item will display that item without a refresh. each item has also an associated link that allows you to get a bookmarkable url. I need to make the tree UI more usable and remove from the tree the items that have 0 fragments.
One very interesting feature of Rails that I used in order to make this really easy to code is to leverage the layout feature of rails: I just had to add a parameter layout=false to the url, and conditionalize the layout to be displayed, in typo's article_controller, in order to be able to leverage Typo's article controller for the ajax rendering. It looks like this:
class ArticlesController < ApplicationController
...
layout :articles_layout
private
...
def articles_layout
@params.has_key?('layout') ? nil : "articles"
end
After I have implemented it to my satisfaction, I'l give the code for it to the Typo maintainers if they are interested. the next step is to create a generic Tree widget along the same principles for Rails itself. I've abstracted things a bit for this already, but not enough yet to my liking.
The main question I'm asking myself for generalization is about performance. The easiest way to do this is get all articles in memory and then play around with objects to add the iterators you need. But I'm worried about performance, so for the Date widget I implemented custom SQL queries in order to just get the count I need at each step. Problem is that it makes the widget non portable since the SQL is MySQL specific. I'd have to create the same queries for PostGres, that Typo also supports.
Another thing I'd like to enhance is to fetch results asynchronously, and prefetch N+1 leaves.
Comments and Feedback on this little work in progress are welcome.
Posted in technology/ruby/rails, technology/ajax, technology/blog/typo | 18 comments | 145 trackbacks
Posted by pat 475 days ago
Tomorrow I present ROME at XTech 2005 in Amsterdam. Too bad Alejandro could not make it. Here are my slides for the presentation: ROME: ESCAPE syndication hell, a java developer perspective.
I look forward to this conference: the program is pretty attractive and there are many sessions I want to attend. Ed Dumbill, who organizes the conference, has setup an aggregated feed for it, and they have a wiki. Too bad it’s powered by xWiki: my friend Ludovic Dubost, who created xWiki, will present as well, how to call web services from xWiki.
Posted in technology/syndication/rome, technology/conferences/xtech | 1 comment | no trackbacks
Posted by pat 479 days ago
While hacking on Typo I’m creating a dynamic hierarchy for dates and categories. I plan to abstract it out in its own Gem: a dynamic hierarchy browser component for Rails.
In the course of doing this I stumbled on a roadblock that I’m sure other will encounter, so I might as well document it here.
If you want to have an action handling urls with an arbitrary number of components in the path after the controller and action, the documentation does not help you very much. For example, my first application of this is arbitrary depth hierarchical categories in typo. I want my controller to handle /category/foo, but also /category/foo/bar and /category/foo/bar/baz.
The Routing documentation just explains you how to specify fixed parameters, such as
map.connect 'category/:category', :controller => 'category', :action => 'list', :category => 'all'
In this case /category/foo is picked up but not /category/foo/bar.
How To Route Generic URLs To AController adds more details about advanced examples, but still you need to map all parameters explicitly.
map.connect ':segment1',
:controller => 'default',
:action => 'default',
:requirements => { :segment1 => /.*\.php/ }
map.connect ':segment1/:segment2',
:controller => 'default',
:action => 'default',
:requirements => { :segment2 => /.*\.php/ }
Not generic enough for my needs.
I finally found illumination in the ActionController routing unit tests (in /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.7.0/test/controller/routing_tests.rb in any rails install near you). There’s a test there that seemed to do what I needed:
def test_path_collection_with_array
route '*path_info', :controller => 'content', :action => 'fish'
verify_recognize'path/with/slashes',
:controller => 'content', :action => 'fish', :path_info => %w(path with slashes)
And sure enough the following route solved my problem:
in routes.rb
...
map.connect '/category/*path_info', :controller => 'category', :action => 'list'
and in category_controller.rb
...
logger.error { "in category list, path_info = #{@params["path_info"].to_s}" }
gives the following output:
for /category/foo
in category list path_info = foo
for /category/foo/bar
in category list path_info = foo/bar
I hope this will be helpful to others. I’ll update the rails wiki with a link to this. This simple example outlines an important but often overlooked advantage of unit tests: not only do they enhance the quality of your code, they also form a good implicit documentation for usage patterns of your code.
Posted in technology/ruby/rails, technology/blog/typo | 5 comments | no trackbacks
Posted by pat 511 days ago
In the past few weeks I spent some time designing my blog: for all my previous blogs (see the list) I was more interested in exploring the plumbing and innards of the servers i was using, so i just used the boilerplate templates that came with it, with a minimum of customization.
This time I spent some time making it beautiful, I hope, and easy to use and navigate. It was a work of both graphic design and information design. Time to put Tufte to work! It's not finished yet though: still a lot of work is left.
I copied and modified some bits and pieces of css from the blogs I like:
For the main theme I chose a chinese picture of a sage going up in the mountain. I played with various other designs, with a left sidebar, but I like minimalist designs, so I ended up with header/body/footer and an optional sidebar. I'll add details about the image later. It is taken from the catalog of an exhibit of chinese moutain paintings that happened in Paris last year. I love these paintings.
Then I used a graphics program to get the rgb average color of the mountain, and used that as a background. For the font color I just took the complementary color of the background, for better contrast. For links I played with various alternatives until settling on this one.
I implemented a small portal-like effect for the sidebar in css and javascript. I don't like it when all the real estate is taken by blah blah about categories, pics, blogrolls and all the blogging metadata paraphernalia. Yet I want it to be there if I'm curious. I implemented it with a horizontal menu that creates boxes in the sidebar when you request them. When no box is open there is no real estate lost in the sidebar. It's not cross browser yet. Still experimental stuff. What's really new at the code level is the Ajax powered Calendar: if you click on when, you see a box organizing posts by date. This box uses the new Ruby Ajax library, which means it is computed only when you click on the link. What's magic is that it required only a few lines of code to get this effect. I see myself using this library a lot in the future! I need to alter my controllers to generate all the other boxes this way. I will also enhance the calendar controller to have a Tim Bray-like date hierarchy effect, but contrarily to his, processed lazily on demand via client side calls.
When my code will be more stable and generic, I'll submit it to the typo project if they like the features.
I also want to do a nice print stylesheet, and a layout for cell phones.
It's late, I'll post more tomorrow.
Posted in technology/ajax, technology/blog/typo | 1 comment | 2 trackbacks
Posted by pat 511 days ago
Personal
This is Patrick Chanezon's blog, an online place where I share thoughts, code, and a few haikus.
I'm 37, married to Dorothee Chabas, a brilliant neurologist specialized in Multiple Sclerosis. We have 3 great kids: Eliette (), Simon () and Charlotte ().
Professional
I work with Google, as Adwords API evangelist.
Before that I was software architect in the Portal group at Sun, where I worked remotely from Paris, France between 2001 and 2005, with teams located in the US and India.
In 2004 I helped launch blogs.sun.com and co-created the ROME (Rss and atOM utilitiEs) project, an open source library designed to make writing syndication applications in java simpler.
I ported Sun ONE Portal Server to Sun, IBM and BEA application servers. I am now working on collaboration in Sun Portal.
My resume is at P@ Resume and this is my most current blog.
Blog History
Over the past few years I have played with various blogging software. My old blogs can be found:
These days I do most of my personal hacking in Ruby, and Ruby On Rails, which is why this blog is powered by the excellent Typo.
travels
I love traveling: here are a few maps of places I've been:
World
create your own visited country map
or
write about it on the open travel guideEurope
create your personalized map of europe
or
write about it on the open travel guideUS
create your own personalized map of the USA
or
write about it on the open travel guide
Posted in about | 2 comments | 25 trackbacks
Posted by pat 525 days ago
Tobias added clean permalinks to Typo, so I decided to drop the stable release I was running with and run from subversion trunk (nice permalinks was one of my must have before making this blog public): works fine, just know that he changed the schema, and added a new table called settings, for the settings (config.yml is not used anymore): just add that table to your mysql db before getting the new bits (in db/schema.mysql.sql).
Now I need to install it on my mac to hack at it in a more controlled way:-)
Posted in technology/blog/typo | 12 comments | 44 trackbacks
Posted by pat 536 days ago
MarsEdit retrieves categories that you can assign to your posts from the server. There are no way to create them on the client. But Typo does not have any category screation screen. Hey, this is a Rails app! Let’s see what rails can do for me
ruby script/generate controller Category
exists app/controllers/
exists app/helpers/
create app/views/category
exists test/functional/
create app/controllers/category_controller.rb
create test/functional/category_controller_test.rb
create app/helpers/category_helper.rb
Then vi app/controllers/category_controller.rb
add one line:
scaffold :category
like this:
class CategoryController < ApplicationController
scaffold :category
end
Now I have list and new autogenerated screens to manage categories: no security there yet though, will do that tomorrow.
I used the new screens to create 2 categories, refreshed categories in MarsEdit, and am now going to categorize this post in the new ruby and typo categories: neato!
Oh Oh, not so easy! trying to post I get an error, and looking at the XML-RPC console I get:
XML-RPC reply received: 2005-03-24 17:57:33 +0100
URL: http://blog.chanezon.com/backend/xmlrpc
Method name: metaWeblog.newPost
Status code: 500
Succeeded: NO
--Download Error--
Response text:
Application error (Apache)
Change this error message for exceptions thrown outside of an action
(like in Dispatcher setups or broken Ruby code) in public/500.html
Will look into that tomorrow. In the meantime, let’s post this without any category.
Posted in technology/blog/typo, technology/ruby/rails | 1 comment | no trackbacks
Posted by pat 536 days ago
I switched my Marsedit client to use meta weblog instead of movable type. Problem: where do I set Publish=true in the client UI?
OK, works: looking at the XML RPC console in MarsEdit it seems to be a client side problem: when using MovableType API the publish parameter is 0 by default, and there is no option in the client to set it to 1, when using the meta weblog API it is 1 by default. I guess Brent set it this way because MT has many options to manage your posts on the server. I’ll use Meta Weblog for now.
First small project I may tackle would be to add an Atom API handler to Typo:-)
Posted in technology/blog/typo | 6 comments | no trackbacks
Posted by pat 537 days ago
The posting operation worked: I can find the post using the search box. But it does not appear on the front page. Will look into that tomorrow.
Posted in technology/blog/typo | 2 comments | 415 trackbacks
Posted by pat 537 days ago
After using Radio (proprietary code, C/UserScript), Movable Type (Perl), Blojsom (Java) and Roller (Java), I'm going to try Typo as my weblog server. These days, like all Java bloggers I'm playing a lot with Ruby, and Ruby On Rails, and Typo is a simple Rails application. This will let me indulge in my attraction for tweaking or fixing my blog engine, without having to develop my own like the ongoers or intertwingled do:-) And I'll be able to play with the incredibly elegant Rails framework: after recently designing a struts app, this is refreshing!
On the installation front, it took me a while to setup Apache with FastCgi, mod_ruby, ruby, gems, rails and other tools on my Red Hat server: the most difficult part was with FastCgi. Advice to people attempting the same thing: there are no rpms, download the source, cp makefile.AP2 Makefile, edit it and change the apache dir to /etc/httpd, or wherever it is on your system. Then make and make install do the trick. For the rest you can follow the Rails FastCGI page.
Now that it's up, tomorrow I'll start hacking the presentation layer.
Let's see if I can post this from MarsEdit!
Posted in technology/blog/typo | 3 comments | 1 trackback