Getting Started w/ Python

As you might have heard, Google AppEngine launched tonight, with Python as its initial (and only) programming language to interface with its services. I started switching over to Python (from Perl) a few years ago for general processing and daemon tasks (mostly for its sweet RPC bindings and its comprehensive, if still somewhat convoluted Unicode handling). Over time, as the libraries matured, I started moving more and more over – some things were long overdue, like a CPAN equivalent (pypi and EasyInstall have finally stepped up to the plate), but in some areas, like with cross-platform GUI toolkits, things like py2app/pyexe, or with libraries like Twisted, and SciPy, and Beautiful Soup, Python has long since blown past the competition.

Earlier this year, as I was wrapping up at Yahoo!, I knew I wanted a clean start, and after reviewing what was out there decided on switching to Python as my primary language and making a go of writing my new web apps in Django (deployment, performance, and decoupling being among the primary factors; less wankery in the development community was also a big part of it). I’ve been somewhat sidetracked by a slew of other projects, but so far it’s been a good experience (and I hope to have some stuff to publish soon).

Anyway, all this is a very, very, long setup for a list of resources that may help those who are looking to get started working w/ Python. I’m still not as proficient as I’d like, so here are the references that I typically reach for:

  • PLEAC PythonPLEAC (Programming Language Examples Alike Cookbook) is a project that aims to port the Perl Cookbook to other languages. The Python port has been at 85% for years, but is invaluable when looking at basic constructs.
  • (the eff-bot guide to) The Standard Python Library – although a bit out of date and not comprehensive, it offers short and useful examples for most of the modules in Python. This is great because often times the official library docs while technically complete are also at times completely opaque. If I were to give any advice to people writing API docs, it would be to 1) have some simple real-world usage examples and to 2) allow user annotations (PHP was (and remains!) way ahead of the curve on this one. It’s amazing how primitive the core language/library docs are.)
  • Dive Into Python – I waffle back and forth on how much I like Mark Pilgrim’s book – it’s oftentimes just short of useful and not organized so well (I’m still looking for a good language reference), but it also has really useful tidbits, like when I forget how to append the system import path
  • Python-by-example – this is a new one, and I haven’t used it much (inline-search would do wonders for this) but I wholly approve of the intent: “This guide aims to show examples of use of all Python Library Reference functions, methods and classes.”
  • Otherwise, I’ve found that doing a web search almost always turns up something on ASPN or on a mailing list somewhere.
  • Lastly, there are some interactive shells that are useful, specifically IPython. Reinteract is less of a tool that I use everyday and more of something that’s damn cool. The same w/ Nodebox.

Of course, one of the biggest benefits of Python is how readable the source code is – it’s definitely a big help for seeing how things works. Have any of your own favorite Python resources? Please post ’em up on the comments.

Getting up to speed on Django probably deserves its own post…

R.E.M.

I’ve never been a huge R.E.M. fan, most probably because I was introduced to them by their Out of Time radio hits (Losing My Religion and Shiny Happy People still annoy the shit out of me) — I remember listening to their followup albums Automatic for the People and Monster, and then losing interest. I didn’t have anything against them, and over the years they’ve popped up on my radar from time to time (more for their videos than their songs — Everybody Hurts still holds up as an amazing work, and more recently, the Hammer & Tongs directed Imitation of Life was also quite good), but they they’ve just never resonated with me all that much.

That being said, after reading an interesting discussion on early R.E.M., I chased down their pre-90s work and will have to spend a day sometime giving it a listen. Also, their new album (Accelerate) isn’t bad (single). I’ve only given it one spin so far, although I’ve been deluged w/ new stuff lately and I guess in a different headspace at the moment (new things on rotation: Styrofoam, Cut Copy, M83).

Here’s a passage from a last.fm journal linked from the discussion:

Much like a hat I used to own, R.E.M. was perfect because it fit perfectly into the space where nothing used to be. They drew on the energy of punk without its harshness and nihilism, replacing growling distortion with chiming Byrds guitars and hoarse, angry shouts with pretty harmonies, and filtered out the cornpone from country/roots, leaving only its forthright beauty, in a way that made perfect and astonishing sense to white Southern kids of a certain age, to whom real country was a cliche beloved by redneck uncles and to whom real punk, however satisfying its aggressive pleasures, was music about New York, and London, and Southern California, exotic places that bore scant resemblance to the tree-lined streets of our hometowns. R.E.M.’s sound validated a kind of modern-South lifestyle that we were already living, and made it seem both mythic and earnestly real. You couldn’t buy drugs that did that. Not consistently, anyway.

Administratrivia

  • Inbox Zeroed! Honestly, I had myself pretty convinced that the 4-figure number on my Mail.app icon didn’t matter, but it is honestly pretty freeing. I’m now being much more aggressive w/ my procmail filtering as well. I think I can reduce that distraction drastically. It also means that if you sent me an email and I never replied, I’d be much more likely to do so if you resent it now.
  • While I work on my fancy new blog rewrite I’ve made some little changes like adding a usercard with a randomly rotating avatar pic and comments on individual pages via Disqus.

Dashboard Widget for Posting Blog Entries to Confluence via XML-RPC

First of all, here’s a zip of the working widget (10.4.3+): Confluence Daily Log.zip. I also checked in the Dashcode project.

I had an old WordPress widget from a year or two back that I had written, so I thought this would be a simple port, but I forgot that I had written it w/ a set of Python proxies because 1) xmlrpclib is awesome and 2) the JavaScript XML-RPC libraries I had tried (at the time I believe the best was jsolait) were maddening.

I’ve moved onto jsxmlRPC, which is an improvement from the prior options, but still has some issues. I also gave JS-XMLRPC a try, but the lack of documentation, examples, and the verbose retardedness of it all quickly convinced me otherwise. And I looked at @tomic briefly, but just couldn’t justify 300+K of JS dependencies for it. If I continue to have problems w/ jsxmlRPC, I may switch. Mostly I went w/ jsxmlRPC because I approve of its interface and of its documentation (it’s not that hard, a reference implementation would cover most of it).

My preference would have been something that magically did its business, but I actually had to really dig into jsxmlRPC’s code to get things working. While the demo worked well enough, it was barfing when interacting with Confluence. Turns out this is because jsxmlRPC does not handle parsing of payloads according to the spec – param values can be returned without a nested type tag (defaults to a string data format). jsxmlRPC tried to find a nested value all the time, which as you might guess, caused all sorts of brokenness. This can be fixed by changing the following (swap the while with this if) at the top of the getResultFromValueNode() function (line 385ish):

if ("#text"==valueNode.nodeName){                                              
  return valueNode.textContent;                                                  
}

Note: I saw that jsxmlRPC was still barfing on empty values. That’s probably a simple fix, but my brain’s pretty fried and I’m tired of looking at the code.

I developed this widget in Dashcode, which is many sorts of awesome and very much simplified the process, however the debugger and stack frame was for some reason not quite as helpful as one would imagine it to be. (It was all sorts of unhelpful in tracking down the errors I was looking for even when stepping through). Once I ported the code to Firebug and added a few console.logs(), the problems became much clearer.

In terms of functionality, everything seems to work for me. It does whipped up a very dumb local autosave as well. Here’s what’s missing:

  • Confirm dialog when navigating away from edited entries – I track the editing, but when I found out that Dashboard doesn’t support confirm() I tabled that feature
  • Handling reauth: I have no idea how long tokens last (forever? it’s not specified in the Confluence RPC docs), but if they expire, I don’t have a good way of trying to reauth (this would just involve adding some extra timers and some exception handling so not that bad to implement) – Update: – looks like these expire pretty quickly. I’ve uploaded a new version that just reauths before every API call (getBlogEntries, getBlogEntry, and storeBlogEntry)
  • Help – Some notes for the settings might be useful. IE, the “Space Key” is the shortname for your Confluence Space and the “Endpoint” is http://yourconfluenceinstall/rpc/xmlrpc
  • Widget Icon

OK, it’s late. I’m going to bed.

+1 Week Update

This marks my first week off from work. Since I’m not reporting to anybody, I figured I’d try to insert some accountability into this whole process so I don’t slack too much (although some unplugged unwind time is in the cards soon). I thought I’d recount some of what I’ve been up to and some of the things I’m hoping to get done next.

  • I spent the beginning of the week recovering from ETech and SXSW — I fell right asleep when I got home on Monday morning. I think I’m all wrapped up with the SXSWm and SXSWi recaps. An ETech one will be forthcoming this week.
  • As I mentioned, I’m keeping an internal weblog/daily journal to keep focus of my accomplishments and next tasks. I’m in the process of adapting and old XML-RPC Dashboard Widget for easier posting, so expect to see that online soon
  • I’m committing to being less of a shut-in, and went out to no less than 3 events (I did skip out on weekend events to hack on stuff). I also hit the gym and checked out the “consulting services” (pity partay!). The weather in SF has been beautiful.
  • I’m a bit behind on my development schedule, but I did check in the first piece of new code into my new public SVN repository. I’ll be publishing new stuff in there as I finish it, and I’m planning on doing a lot more technical writeups of the stuff I’m playing with. Plan to see more in the near future. I’m also checking in legacy code in there. Unless otherwise noted, its all Freely available and licensed under the GPLv3.

Stuff I’m working on:

  • I’m writing new stuff/rewriting old stuff in Python so I can publishing it. A lot of the first things I’m working on should make it easier to publish things or automate publishing (like the Flickr Favorites code). And yes, that project we started at ETech will be out soon.
  • I’ve installed the iPhone SDK and am back to learning Cocoa (for a number of projects). You can be sure I’ll be publishing my about being a noob again…
  • I’m also going through books that have been gathering. Good times.

Adventures in MacPorts: FuseFS Edition

On Saturday, Richard Crowley published an awesome looking hack called PownceFS that creates a FUSE filesystem mounting your friends’ files from Pownce as a local filesystem. Cool! Now lets try getting it working on the Mac…

# port install fuse-bindings-python
...
--->  Activating fusefs 1.1_3+darwin_9
Error: Target org.macports.activate returned: Image error: /Library/Filesystems/fusefs.fs/Contents/Info.plist already exists and does not belong to a registered port.  Unable to activate port fusefs.
Error: Status 1 encountered during processing.

Well, that sucks. MacPorts doesn’t play nice if you installed macfuse. Apparently there’s a proper way to uninstall, but I missed this, and just did a quick and dirty fix…

# rm -rf /Library/Filesystems/fusefs.fs/
# port install fusefs
--->  Activating fusefs 1.1_3+darwin_9
********************************************************
*  fusefs is already loaded. You may need to restart.  *
*  Alternatively, if feeling adventurous, you can run  *
*  `sudo kextunload -b com.google.filesystems.fusefs`  *
********************************************************
--->  Cleaning fusefs

Now libfuse installs properly. If you get errors, fusefs probably didn’t install properly (see Ticket #11471: fusefs misses common/fuse_param.h).

Now, if you install on 10.5, fuse-bindings-python will install python24 (Leopard ships w/ 2.5 as default), which is sort of retarded, but whatever. You may get some errors w/ fuse-bindings-python, where it gets confused about the install location – just run it again if you just installed python24 and it should work. Next, oauth:

# cd /opt/local/lib/python2.4/site-packages
# svn co http://oauth.googlecode.com/svn/code/python/oauth

Now, check out PownceFS – you’ll need to change the shebang to: #!/opt/local/bin/python2.4.

This is where I’d like to report great success, but well, it looks like the fuse-bindings-python broken:

>>> import fuse
Traceback (most recent call last):
  File "", line 1, in ?
  File "/opt/local/lib/python2.4/site-packages/fuse.py", line 26, in ?
    from fuseparts._fuse import main, FuseGetContext, FuseInvalidate
ImportError: Failure linking new module: /opt/local/lib/python2.4/site-packages/fuseparts/_fusemodule.so: Symbol not found: ___CFConstantStringClassReference
  Referenced from: /opt/local/lib/libfuse.0.dylib
  Expected in: flat namespace

Hey, looks like CoreFoundation isn’t being linked. Turns out someone submitted a patch just yesterday to fix this. You can fix this manually by editing the libfuse Portfile. In my case, it’s in /opt/local/var/macports/sources/rsync.macports.org/release/ports/fuse/libfuse/Portfile – you can add the following line below the patchfiles fuse-2.7.1-macosx.patch line:

configure.ldflags-append    -framework CoreFoundation

Now, reinstall (uninstall the python-bindings and the libfuse packages and reinstall) and import fuse will stop barfing at you. Sweet Jesus we’re almost there… The final step is installing json-py – just unzip this in your site-packages folder.

And… well, it sort of works. It’s mounted:

Python@fuse1     0Bi    0Bi    0Bi   100%    /Users/lhl/powncefs

And while I can’t do any file operations, I can tab complete and see some friends:

lhl@octo powncefs $ ls powncefs/
ls: powncefs/: Operation not permitted
lhl@octo powncefs $ ls 
MarcD              deprimer           mattb              rnair
TheBrad            edwardho           maximolly          ryancarson
adactio            elatable           me3dia             samfelder
agendacide         elbowdonkey        meandmybadself     spullara
akoblin            fauxstor           migurski           sugarlime
allaboutgeorge     fraying            mlaaker            symphonicknot
ask                iamcal             monstro            t
basictheory        jamescronin        mroth              thincvox
beach              jmacias            natekoechley       uvince
benvoluto          jmcnally           neb                waxpancake
botz               joshuakaufman      nickf              whatevernevermind
buzz               kentgoldman        paulh              xeni
carriewestlake     kevnull            peterme            yahooza
caterina           laughingsquid      photojunkie        
chaddickerson      leia               plasticbagUK       
dansays            lhl                rabble             

Well, it’s getting late. Good luck and hope this helps for anyone trying to get PownceFS working on OS X.

SXSWi 2008 Recap

This was my 9th SXSW (I’ve been to every SXSWi since 2000!), but my first time doing SXSW Music (hence the lowercase “i” in the title). SXSWi was once again much larger than the previous year’s, and I think that in terms of organization and logistics, Hugh Forrest and gang have done an impressive job handling the growth. That being said, I have to agree a little bit w/ Jay – I have my concerns w/ where SXSWi is headed. While it had grown a lot last year as well, my 2007 experience seemed to have had both a lot more spontaneity, serendipitous moments, and nostalgic fun (by which I mean being able to hang out and catch up w/ old friends that I only see once a year). I still had a good time though, and I was definitely pacing myself (having headed in directly from all-nighters at ETech and a week of music following), and I’m looking forward to 2009.

Some general thoughts first:

  • A lot of the problem I think stems from the fact that SXSWi is now so big that it has sessions on every floor (1, 3, 4) on every corner of the ACC – besides taking most of the in-between session hangout time to hike from one end to the other, it also means that it’s much more difficult to hop between sessions and (probably most importantly) that there *is* no more hallway to hang out in. In all the past SXSW’s, whether it’s been the 4th floor hallways, the Omni Lobby, or the back of Paradise, or any of the various parties, it’s been this sort of mingling that’s driven what’s made SXSWi really special for me in the past. Obviously my experience isn’t universal, but I think the growth has forced a lot more structure because of capacity issues and there’s been less stumbling onto great stuff.

    In terms of solutions, I think that for the sessions, it’s hard – the ACC is laid out the way it is, and the rooms are all booked full. I think that knowing that all the sessions were being recorded for future podcasting made me less worried about missing out on anything, and maybe that needs to go to the next step (livecasting panels)? Having some better sort of central gathering place is probably the best suggestion (maybe one of the expo halls or the lobby area of the playpen + dell lounge + weird transportation booths).

  • I actually liked the Core Conversations that I swung through/by, but the way that the they were put together into a single room made it pretty impossible to hear or actually conversate. Honestly, I’m not sure how this can be dealt w/ unless they somehow get rooms – I know they were valuable, and even the “niche” topics filled up w/ 30-50 people per session. O’Reilly style BoFs probably wouldn’t work since night-time is for party-hopping.
  • Although the parties themselves have also changed in character… The operative phrase for those not arriving 20 minutes before the start of the party seems to have been “one in, one out.” This is a situation that is perhaps rife for some sort of techno-social solution involving mobile technologies. While in the past it was nice to have single gathering points, it seems like what’s needed now is to have multiple high-capacity events going at any time and with event organizers helping to route over-capacity appropriately – I have to say that SXSW Music, while being much larger, didn’t feel half as crowded…

Now, onto the events/sessions – by and large my session/panel experience has continued to get better. I partially attribute this to increased quality, but also (because a lot of people seemed to have hit some bad sessions) a better sense of how to recognize things I’ll like and in avoiding stinkers. I also did pretty well at forcing myself up regardless of how tired I was, so here’s some mini-reviews.

  • Break Bread w/ Brad – This was much more successful than last year, thanks to 1) reserving a private space 2) admitting mostly people who knew who Brad was and 3) getting people to pay up front. The slideshow with the old school 0.3MP pics of SXSW’s past was a nice touch. This was my first Friday event, although it appears that the schedule, like the rest of SXSWi has metastatized – there are good things going on in the day on Friday now and I’ll have to plan accordingly…
  • Kick! – This was a welcome return and a good chance to hang out in the sun on Saturday morning. Since Anil got 6A to sponsor this year, there were breakfast tacos as well. Kick! Ass!
  • Harold and Kumar Panel – OK, this was a Film panel (yay Platinum badge) – actually, the only one I dropped in on, but come on, Neil Patrick Harris. Need I say more? I actually misread the time on that one, so only caught the tail end before hoofing it over to the Interactive Keynote, but still. Seeing Doogie in person? Awesome
  • Keynote, Henry Jenkins and Steven Johnson – I’ve blogged before about my (intellectual) man-crush feelings about Jenkins, and it was great to see him, even in the overflow room. This is a guy who speaks in fully formed paragraphs extemporaneously and even manages to elicit extremely erudite questions from the crowd. I met him briefly on the escalator down and kibitzed about Obama.
  • Blood, Sweat, and Fear: Great Design Hurts – there were a lot of interesting sounding sessions going on, but I chose this one because I’d never seen John Gruber give a talk and because this session seemed like it’d have the highest chance of having information that would be missing w/o the slides. It was split evenly between Gruber and Lopp, and it was fairly entertaining if not particularly enlightening.
  • Worst Website Ever: That’s So Crazy, It Just Might Work – Andy’s panel was probably the most fun of this SXSW. Merlin had a good deck, but I do believe that Jeffery Bennett was robbed (of one dollar). If you missed this, maybe that’ll teach you to never skip a waxy production.
  • Google Party – skipped it, heard the line and crowd was insane. We had our party at the same venue last year and it was nice to hear the favorable comparisons. Throwing a good party is hard work! Had a nice relaxing dinner at Mekong River instead.
  • 16-Bit – apparently we got there just at the right time – a huge line formed right after we got in. (coincidence? 🙂 The bar line was impossible, but we were saved by enterprising individuals with 6-packs. This was my favorite party at SXSWi (a pretty low bar this year, the only one where I had much fun at). We left early for Paradise though as a fair number of people didn’t get in…
  • Paradise – although I didn’t spend as much time there this year, it’s worth mentioning because it was actually less crowded w/ random people then last year (apparently there was a change of ownership, which worked to our advantage). Also, it was unfortunate that the kitchen closed at 12AM. The bite of burger I had there was *awesome*.
  • PureVolume – I head over there the first night and the last night; didn’t have as good of a time; just a different crowd this year I guess
  • How Manga Explains the World – I though Daniel Pink’s session was best session at SXSW 2005, so I was pretty set on heading into this. I wasn’t as blown away this time around, but it was still very engaging and well worth attending. He also gave out copies of his new book (which I feel the same as the talks I guess. I liked it, but I felt A Whole New Mind was better)
  • Magic and Mental Models: Using Illusion to Simplify Designs – I started out in the China session (potentially great topic but substandard panel) but quickly migrated to Jared Spool’s talk, which was great. The right mix of entertainment, showmanship and informational content (where the function and form support each other – I’m sure there’s a design meta-lesson there).
  • Designing for Freedom – I was actually hoping to hear more about what freedom and design mean within a social context, when communities start using your tools, but I don’t think it ever went there or the question I asked at the end adequately articulated that. For example, what design changes do you make to Orkut when the Brazilians invade and drive away English speakers by spamming all the groups in Portuguese? I’m less interested in talking about “skinning an app” than discussing the sort of interactions that happens when you have these different cultures/groups colliding.
  • Screen Burn – got a chance to take a look at the Blackbird 002 case in person – it’s surprisingly chinzy and cheesy, although the internals are quite nicely laid out
  • Space Tent – Props to Buffington for explicitly pointing me to the space tent as I was entering the expo hall – I might have missed it otherwise, and it was most definitely the best thing I saw at SXSWi. The demo they were showing had NASA’s Digital Universe Atlas, which included navigable astronomical data of the known universe loaded and other cool stuff. The main downside seems to be that they sell their software for $28K (they mostly do installations for museums and the like? see here)
  • Afternoon Delight – Yahoo!’s little soiree this year was at the Iron Cactus. Good food, good drinks, and just the right size/type of crowd (throwing parties during sessions might be the way to go moving forward).
  • The Gawker party was incredibly crowded by the time we got there so we had a relaxing meal (with Texas-sized portions) at Sullivan’s instead. It was good, but ended up taking forever, both for meal prep and for service, as their computers were down. From there, we headed on over to ACL and caught most of the Spinto Band set (but missed Litespeed Champion, whom I would end up trying to catch and miss 4 times this SXSW). After a quick stop-off at the Blogger party I went to try to catch MC Frontalot but didn’t like the lines, and called it a night instead.
  • Scalability Boot Camp – also worth mentioning that the Marriott’s free breakfast is really what made rolling out of bed for the 10AM sessions possible (Hampton Inn and Marriott both have breakfast bars). I was pleasantly impressed by the panel’s preparation of “slides” and “talking points.” I left midway through to check out the Building Developer-Friendly Web Service APIs session and was substantially less impressed. I ended up back at the Scalability session.
  • The Web That Wasn’t – I’ve actually seen most, if not all of Alex Wright’s presentation before, but it was still worthwhile (it’s that good, you can check out a version on YouTube)
  • PMOG: The Web as a Play Field – Merci and Justin were great, and Justin had one of my favorite slides of the conference. Still, I do wish I had caught the keynote, which by all accounts was quite good.
  • Design Eye for South By – I’ve really liked the Design Eye panels in the past, so I was pretty excited by this year’s session – especially since there’s really no end to the ways in which this year’s topic, the SXSW site itself (no offense), could be improved. What I wasn’t expecting was to be sitting in a panel where they droned on for 40min (out of a 1hr preso) without showing anything. And then for it to be a rather underwhelming styled friendfeed. Yeah, well, that could have gone better I guess. (you can talk about ‘strategic’ design, but if you want to do that, maybe covering some of the basic use cases (err, bands? mobile?) might have been good). I’m not gonna harp on it, I just wish it had been more worthwhile (or at least entertaining).
  • Bio-Networks: Using Mobile Technology to Impact Healthstyle – I hung out in this session way too long. Basically the entire time was spent covering this person’s ITP project without having any sort of insights in the topic area (physical instrumentation in general, or even on fertility in specific – ie, she wasn’t able to answer questions people had about the effectiveness of the device because obviously it hasn’t been deployed yet). Still, this made for a bit of good wandering time.
  • 20×2 – was pretty great this year (and I even caught the whole thing!) — more videos than usual, which seems to be sort of a cop-out (although I quite liked Rannie’s vid). There are always great ones, but I think Simon Batistoni, gave the standout answer this time around.
  • For better or worse I spent most of the rest of the night at the Frrvrr party w/ a few friends. Not being the most social, but catching some good bands. After a brief stopover at Ginger Man (mmm, framboise lambic on tap), I went to check out PV – which had a ridiculous line, so I ended up heading back to the hotel, but caught some friends heading to Magnolia’s Cafe (when in Austin…). This turned out to be a very good thing – not only a late night breakfast with good company, but I also said hi to an old co-worker (we both worked in Austin in 2000) who also turned out to have proposed to his girlfriend at the postsecret keynote I had missed. It’s a very, very small world.
  • Life After the i-Phone – I was pleasantly surprised when I rolled in to this panel because I didn’t know that Scott Jenson was going to be up there. He’s given the best mobile UI presentation I’ve seen (at a BayCHI session @ PARC), and obviously his recent work, particularly GMaps Mobile speaks for itself. So you can imagine my surprise when I realized that this was by far and most definitely the worst session I attended this SXSW. Personally, I put the blame squarely at the feet of the moderator, although there were some real bozos on the panel as well (I love it when a panelist who’s spent the past several turns parroting the previous speaker says he has nothing to add and then continues to speak for several minutes). I peeled myself off after the Q&A started and it was obvious things weren’t going to get any better, but wow. Just wow. I’m absolutely certain that everyone, panelist and audience alike came out of that room stupider. Net subtraction of value. Which is a shame considering that there are truly interesting things to talk about in terms of how the iPhone has affected mobile design and the industry.
  • Core Conversation: Next Generation Education: Bringing the New Web to Campus – Sam Felder led this conversation admirably. It was too bad that the room was set up the way that it was, it was really good to get attendees to actually participate
  • Keynote: Jane McGonigal – awesome, awesome presentation. even if there was a bit of an intellectual shell-game going on (bringing games into real life isn’t the same as turning life into a game because there are basic issues with how ludic qualities such as the magic circle (playing by the rules, safety net) don’t map when it’s real life and people don’t know they’re involved. still, well worth thinking about the larger impact of these things we make).
  • Creative Collaboration: Building Web Apps Together – yay, designers + developers. I’m not sure it was exactly representative but I do like all these people and they show the “better way” of how things could be.
  • Futurists’ Sandbox: Scenarios for Social Technologies in 2025 – After several minutes of listening to the future diary of Rollergirl I left. Interesting fun-fact: all futurists talk in a sing-songy way like Bruce Sterling
  • Taking Over the World: the Flickr Way – Simon has a very relaxing voice
  • Drinks at the Four Season (the back patio is quite nice), a trip to the Whole Foods (there’s a no picture policy, but I got a few shots off) and then headed in to the tail end of the Digg Shindigg which had started filling up w/ music people I didn’t know (instead of web and film people I didn’t know)

Flickr Favorite snapshots

Flickr Favorites are IMO one of the most underrated (and awesome) features of Flickr (really old school users might remember that it started out as the “shoebox” functionality from the very beginning). I have a couple projects I want to do with Favorites, but for now, I’m kicking it off w/ a simple script that posts a snapshot of my favorites on my blog on a weekly basis (i.e. like so).

The code is trivial. Here’s a link to the python source – I pull straight from the HTML page because I’m lazy (both the API and the RSS would be more work to parse and format. I’ll be finding a better way to expose my shiny new public svn repository (Trac and WebSVN generate RSS feeds, so there’s potential there…)