Wednesday, October 21, 2009

Joomla & Google Wave: The Possibilities

Last weekend, I presented a talk on Google Wave to Joomla Day Sydney, and then proposed various ways that Joomla and and the Wave APIs could be used together. I've summarized them below, and would love to hear ideas from Joomla developers on other types of integration.


Using Wave to Produce Joomla Content

Embedded Waves

You might decide that instead of static HTML for a particular article, you want to embed a Wave and enable real-time collaboration. An enterprising developer has already written a Joomla plugin that uses the Embed API and makes it easy to embed Waves in articles, so you can use that.

For example, I can create a Wave with the content of the Joomla Day home page:

Then, in my Joomla instance, I can install the plugin and insert this code in an article:

{googlewave srv=http://wave.google.com/a/wavesandbox.com/|id=wavesandbox.com!w+FspA8QgYA|width=100%|height=600px|fsize=12px|bg=#FFF|ffamily=Georgia}

And then it would produce a page like this:

Note: Only people with accounts for the embedded server will be able to view the Wave, and only if they are a participant or the Wave is public to that whole server. In the future, we hope to allow for another type of public waves that can be viewed anonymously.

You may be creeped out by the idea of anyone being able to edit the Wave, and maybe you don't really want a full conversation on the page. That brings us to the second option.

Exported Waves

If you want to use the collaborative nature of Wave to create your articles, but then still use static HTML for your articles, then you could write a robot to export from Wave into Joomla or a Joomla-compatible format.

For example, the Exporty bot listens for changes in a blip, extracts the contents of the root blip, and stores it in its App Engine datastore. Then, it renders that as HTML at a URL, and when someone requests that HTML, it displays the blip if its Wave was public, and otherwise it asks the user to sign in and checks if they are a participant of the Wave.

So, I can create a Wave with the content of the article, add the co-authors, and then add Exporty-bot:

Then I can create an iframe pointing at the HTML in my article content:

<iframe src="http://exporty-bot.appspot.com/export?waveId=wavesandbox.com!w%252B7w-1O4JSA" width="100%" height="700" frameborder="0"></iframe>

And then it would produce a page like this:

A more elegant solution would involve eliminating the iframe and baking the content into the page. But I will leave it to someone more experienced with Joomla to figure out best way to do that.


Using Wave to Extract Joomla Content

Using robots and gadgets, you can find ways to bring in content from your Joomla site.

For example, a user of your site could use Wave to subscribe to changes in the site. The RSSy bot lets you specify an RSS feed and updates the Wave with blips for each new item in the feed.

So, you can create a new wave, add RSSybot, and specify the RSS from a Joomla site:

The resulting Wave looks like this:

This bot doesn't do the best job at handling the HTML in the feed, but you could improve that to insert iframes with the HTML, or convert the HTML into a Wave-compatible block of text with annotations for the styles.

Should I Defend My Cred? (...Yes)

Tonight, I gave another Ignite talk on "Google Wave & Collaborative Mapping"/. The talk went well, and it was a great opportunity to hear what other people are thinking of doing with Wave. But, something interesting happened after...

I was asked by a speaker to basically defend my cred- as he looked at my appearance (a short green skirt & t-shirt), saw that I gave a presentation that glossed over the technical details, and assumed that I wasn't that technical. When I explained to him that I actually do write code, he was fairly taken aback. He then recommended that I start off each presentation by clarifying my level of knowledge, and getting "respect" from the audience. His basic theory is that girls are not respected as technical peers until they sufficiently prove themselves, and apparently, particularly not if the girl is decent looking. Now, I want to explore that theory further (outside of the noisiness and distractions of the crowded pub).

When I was in high school, I participated in MUN (Model United Nations), where high schoolers would be delegates for a particular country and argue position papers. At the conferences, I remember that I myself mentally discounted the ability of the female delegates when they went up to speak. I was willing to believe in them, but only after they really showed their stuff. I didn't have this same feeling with the guys, and I came to the conclusion that there are some areas where one gender garners more of an immediate respect than others. I decided then that I would have to come off as incredibly confident (but not bitchily so) in order to win the respect of the MUN people, as I assumed that they would have that same accidental bias. The bias made sense to me in the area of speaking - men naturally have deep, confident voices, and so you just want to believe in that voice. I don't know how to describe women's voices, but it's certainly not like that.

I think the respect bias may extend beyond debating in the tech world, however. When I look at the Twitter account for a self-professed "girl geek", I grow immediately suspicious of their geeky claims. When I see a girl go up to present on the stage, I usually assume they will talk about something less technical. Maybe this is because my suspicions are usually confirmed -- because we live in a world where we try to extend a geek label as far wide as possible, to try and sneakily get more girls "in CS." Maybe it's because girls naturally hate girls (a well documented phenomenom in women's magazines), and this is an extension of the phenomenon.

So, I'm biased, he's biased, and potentially others are as well. I don't know that we'll be able to eliminate our subconcious tendencies, but we can help people squash their own.

When you give a talk, always start off with an introduction slide that describes your background and experience. If you're an expert on the topic, admit it (humbly). If you're just learning and wanted to share your learnings, admit it.

I think part of the reason that we try to rely on other (possibly incorrect) clues to help us form opinions is that people don't give us enough information about their credentials. And I don't think that we mind if someone is or isn't technical - we just want to know, one way or the other, and not feel like we're being misled. We respect people for who they are, but we don't respect people if we suspect that they're trying to be something they're not.

Thoughts welcome, of course. :)

Tuesday, October 13, 2009

Why I Sent You to a Group

One aspect of my role as an API support engineer is making sure that developer's questions are answered.

So, when a developer personally emails me a question, you would think that I would rush to answer it.

No. In fact, I usually ask them to post their question in the relevant group, and even if I know the answer to the question, I do not reveal it in my response.

This is because another aspect of my role is making sure that developer's questions are answered in a scalable manner.

If a developers emails me a question and I then answer it, that question and answer exist only inside our inboxes. They are absolutely undiscoverable by anyone else in the world, and basically useless to 99.9999999999999% of developers. However, if a developer posts a question in a forum and then receives an answer, that thread exists in the public group, it exists in the cached Google pages, it exists in the mail group archives - and most importantly, it exists in Google search results. That means that when another developer has the same question and search for it, they will find an answer - without even having to post their question. So, potentially 100% of developers can benefit from the question and answer. Now, *that* is scalable.

Now, a developer might think "But, I'm the only one with this question." This is nearly almost not the case, and it is not something that a developer can predict. Better safe than sorry, and share the question with the world.

Another aspect of my role is making sure that questions are answered in a timely manner.

If a developer emails me a question, and I happen to be quite busy then - with conferences, travel, launches, etc. - then I may not be able to respond for a few weeks. However, if a developer posts that question in the group, all of the group members may see it, and the chances are that atleast one of them know the answer and happen to have the time to respond. If they post in the group and don't get a response after a few days, it is fine protocol to ping the thread nicely, or hey, I don't even mind when a developer pings me personally and asks me to respond to the group thread.

So, oftentimes, when I ask a developer to post in a group, it's because I want them to get an answer faster than I can provide, and I happen to know that the Group is the best way to guarantee that.

Basically, the only times that I *happily* respond to a one-on-one email (or wave) is when the matter concerns personal account information and must be worked out on a case-by-case basis - for example, requests for higher geocoding limits, or the recent problems with some sandbox users not getting wave preview invites.

If you are a developer that I have sent to a group, please understand it is for your own good and the good of the world. Thanks for understanding!

Thursday, October 8, 2009

A World of Words.. And Me

Tonight, I gave a talk titled "A world of words" at Ignite Sydney, and I want to give a bit more information about why I gave that talk.

As I said at the beginning of the talk, I have always had a thing for words. When I was a wee lass, I had a favorite song called "Great Big Words" and loved to finish crossword puzzles. In high school, I realized that I needed to study words in order to do well on the SATs, and I could get away with more word geekery that way. I downloaded multiple flashcard programs on my PC, and I forced friends in my carpool to bring in words to discuss during each morning ride. Needless to say, I aced my test... and I was also no longer part of that carpool. Then, in university, I joined an honor society and suggested that we educate our peers by plastering the kiosks with "Word of the Week" posters. On each poster, I took great pleasure in coming up with a ridiculous sentence that used the word, and an overlay thorough description of its etymology. (See: poster for "diaphanous")

So, I realized I had an obsession, and I needed to make it legit. I enrolled in a linguistics minor, and I was hooked. Everything about language was fascinating - why we make the sounds we do, why our sentences can become ambiguous, even stuff like why we can say "abso-fucking-lotely" and not "ab-fucking-solutely" (seriously, that was covered in two classes). Inspired by my newfound knowledge, I applied for and was accepted into the John Hopkins Computational Linguistics summer workshop. There, I spent the summer working on a tool for visualizating the parse trees for sentences translated into multiple languages (See: screenshot).

That project got me thinking about the various ways that I could combine my computer science skills with my love for linguistics. I eventually concocted a project that would use both those, and my other minor, 3d animation, and convinced my advisors it was worthy of credit. It was entitled "A Computational Framework for Simulating Cross-Linguistic Acquisition of Spatial Prepositions", and it was basically an attempt to get a computer script to learn prepositions (above/under/on) by analyzing a 3d-scene and given sentences. And, hey, it kind of worked. (See: e-poster). I was on a roll!

So, I was at the point where I was trying to figure out what was next in life. I knew what I loved, but couldn't decide what to do with what I loved. It was suggested that I apply for a Fulbright grant - a grant that would let me do research somewhere in the world - and I thought that was a mighty fine idea. I wrote up my proposal for an app that I had always fantasized about. It was called "A World Wide Web of Comparative Linguistics", and it would let user visualize and search through etymological history on a map-based interface. (See: proposal). In my opinion, the app would bring immediate world peace. How could you possibly fight with someone after you realized how connected your words were?

Unfortunately, the Fulbright committee didn't see it that way, and I didn't get a grant. I instead went on to get a Masters degree and get hired by Google, and that's where I am today. I've been pretty busy supporting the Maps API for the past 3 years, but lately, I've started craving a bit of linguistics in my life. I started listing to word-of-the-day podcasts on my iPod during my morning commute, and it just gets my brain all tingly.

So, I put together this talk as one way of satisfying that craving (or, more likely, making it much bigger), and also to share this bit of knowledge with others. It's a nice break from my typical web talks, and I think I surprised a few folks.

You can see the talk embedded below or on slideshare, complete with captions of what I actually said.

You can also watch the recorded talk below:

For more resources on the topic, you can check out the sites that I bookmarked while researching the talk, subscribe to the podictionary podcast, or start looking up words in the online etymology dictionary.

And, of course, stay tuned to the blog to find out if I do ever create that etymology visualization app.. It would be a damn nifty thing indeed, even if it didn't bring world peace. :)

Thursday, September 10, 2009

How Google Wave Could Improve Education: Group Work

Last night, at the Google Wave Sydney User Group, we brainstormed a lot of different ways that Google Wave could be used in a vast spectrum of fields. A recurrent theme was education, and we touched upon various ideas, and basically just agreed that Wave (and collaborative technology, generally) can have huge implications for education. One of those ideas we discussed was group projects, and I wanted to discuss that area in more detail here.

As a teacher, you often want to encourage group projects, since they can help students learn cooperation and teamwork, and since they can often have a synergistic effect and produce amazing results. But, there's always that same concern with group projects - someone will do all the work, someone will do none, and it's impossible to know who deserves the good grade. Well, Wave could potentially solve this, both in terms of knowing who to give credit to, and encouraging a better balance of work across group members.

Here's an example proposal based on my own experience:

You're a teacher running a game projects class, and you've divided the class into project teams for the semester. The first aspect of creating a game is writing a design doc for the game (describing gameplay, objective, characters, etc), and you make that the first assignment for each team. You create a Wave for each team that has the design doc template in it (headers), and you give them a week to work on it. You recommend that they use reply blips and inline blips to divy up the work, and tell them that you will be monitoring the project and will do a review of the first draft in a week, and grading of the final a week after that.

When you review, you reply in the Wave and comment on what parts need work or clarification, and which parts look good. When it comes time for grading, you use the playback functionality to see how everyone contributed. You see who took the lead and made decisions, who wrote up large sections, who revised sections for clarity, and who just sit back and watched. Now, hopefully, since every team member knows that you can see all the edits and attribute them to each of them, they will actually feel more motivation to contribute, and you won't have many students that just do nothing. But if you do, well, you can penalize them accordingly, and perhaps next time, they will learn that their actions (or lackthereof) are being watched.

You could even automate some aspects of this with robots. There could be a robot that counts the word count of each team member, and outputs that in a stats gadget at the end. This could feel a bit too strict for the students, but it can also serve as a nice "hey, you're not quite doing as much" reminder. That robot could also just monitor progress as a whole, making sure the team stays on progress. The gadget could list stats like "5 sections completed, 5 days left until final due". Then, those per-team-member stats just become another indicator of progress on the whole, and don't feel as accusatory.

One issue I see with this proposal is the tracking of "peer waving." Some students may sincerely find it more productive to sit at one computer and write up sections together - perhaps one giving the ideas, the other putting them into words. These words would only be attributed to one student, and the idea giver could be unfairly penalized. Possible solutions for this would be to annotate the text [Peer waved w/username@bla.com] or to recommend that students alternate between accounts when doing this.

Another issue, of course, is that not all group projects are writing up a blob of text, and in fact, many of them are not. In computer science, many of them are actually writing code. You can already ask students to use SVN and monitor commits from each team member for less fine-grained monitoring, but you could potentially even have students write their code in a Wave, and use a robot to compile it out, for real-time monitoring. In other fields, many group projects involve the the creation of a physical (non-digital) object. Perhaps you could have students write a design doc for that physical object, or even use a collaborative gadget to sketch it out.

So, yes, this solution isn't perfect, and for non-text projects, involves a bit more creativity. But, I still think it's pretty damn good. If you're a teacher, try it out and report back!

Tuesday, September 8, 2009

The Quest for Karaoke-able Slidesets

I'm a massive fan of karaoke, and I've often expressed my opinion that some songs are far more "karaoke-able" than others, and that someone/me/an entepreneur should create an app capitalizing on that. The app could let you rate the karaoke-ness of songs, upload video evidence, create karaoke playlists, and find lyrics for practicing. It'd be an awesome app to improve the karaoke experience, but somehow, people are surviving and managing to enjoy singing drunkenly without it.

Well, perhaps traditional karaoke doesn't need an app, but "Powerpoint Karaoke" definitely does. For the unfamiliar, Powerpoint Karaoke is yet another new style of presentation, and it basically involves having the speaker speak to a set of slides that he's never seen before, and that were originally delivered by someone else. It serves partially to make fun of the sometimes incomprehensible nature of slides, partially to just be damn funny as the surprised speaker deals with the surprise slides, and partially to improve the speaker's presentation skills. If you can present an arbitrary slideset and woo the audience, then you can present nearly anything.

For our most recent set of internal lightning talks, I gave speakers the option of Powerpoint Karaoke instead of their own slideset, and one brave speaker (Jez) took on the challenge. And I, being the dumb-ass who suggested a format I have never done nor seen, was tasked with picking the slideset for him to present. Yes, I could have gone the route of randomly finding a slideset on the web as soon as Jez got on the stage, but considering that this was the first and only Powerpoint Karaoke that the office would witness that day, I wanted to make sure it went well. These were the approximate requirements I had in my head:

  • The slideset should fit well into our lightning talk 5 minute format, with about 15-30 slides. Ideally, I could have the slides auto-advance, to challenge the speaker's reflexes further.
  • The slideset should have a title and picture(s) on each slide, but not much else. If there was too much text, the speaker could just read that off and know the original intention of the slide. If there wasn't a title on any slide, then the speaker would have too much freedom in what he said.
  • The slideset shouldn't offend anyone in terms of politics/religions/beliefs - I didn't want to pick a slideset with the clear intention to make fun of some group. It might offend, and that's too easy, anyway.

So, using Slideshare's search and browse features, my search began. I looked at the top slides in various categories for all time, I did searches for random topics, I looked for slides from speakers that I knew did the kind of slides I was looking for. After an hour of searching, I had nothing. Most slidesets were the wrong length, the wrong amount of textual content, or just plain spam (slidesets with 1 image advertising a product). I then asked the office for suggestions of topics*, and used those random suggestions to seed my searches. After another half hour, I found 2 possibilities: "How to Defend Against Zombies" and "How I learned to love ballet". I picked the second one, as it had exactly 20 slides (Ignite format!), referenced the speaker's wife (Jez's wife works in the office too), and I thought it would be more humorous if Jez could turn ballet funny than if he could turn zombie invasions funny (since, well, they already are).

How did it go? Jez took that slideset and freaking ran with it - he did more with it than I could have imagined. His best line was when he got to the slide about "Barre" (a position) and explained that was the Japanese pronunciation for "Ballet".

But, I've learned now that it is much harder to find karaoke-able slidesets than karaoke-able songs, and it makes sense when you realize that the majority of songs are there are similar length & lyrics density, whereas the slidesets in the world are a highly diverse species. So, I would like an app for finding suitable slidesets, or even better, I would like Slideshare to add the following features to their search: restrict by # of slides (a range?), restrict by text density (avg words per slide?). Then, everyone in the world can get on the Powerpoint Karaoke bandwagon, and it can be the next great (geek) thing.


*And for your amusement pleasure, here are the list of topics that my colleagues proposed. I asked for these when I was contemplating actually creating the slideset myself with random images, but realized that isn't really the point of Karaoke, and used the ideas as keywords for slideshare searches. That could become an entirely new style of presenting though, especially if someone creates an app that can generate slidesets from just the titles - complete with images, graphs, and venn diagrams, of course. :)

  • "Lightning bugs"
  • "Japanese pop culture from the 1980's"
  • "Sesame Street and Alcoholism"
  • "100 Things to do with Dwarves and Leather"
  • "How to prepare for a zombie invasion"
  • "Analytic and algebraic topology of locally Euclidean parametrization of infinitely differentiable Riemannian manifolds"
  • "How Google could make billions through the power of hypnosis"
  • "Early 20th century ballet and swimming pool repair"
  • "Properly Disambiguated Java Generics"
  • "How to bluff and give an insightful talk when you have to make it up on the spot with no prior warning"
  • "Latin American Hedge Funds and You"
  • "The Social and Economic History of the Grapefruit"
  • "Care and Feeding of the Dugong"
  • "Unicorns"
  • "England Won the War of Independence - a counterfactual world history"
  • "Keelhauling, Walking the plank, and other piratical forms of corporal punishment"
  • "Why Robot Ninja Monkey Zombies are AWESOME"
  • "A complete etymology of My Little Pony"
  • "Zonkies: discuss"
  • "The renovations that Start City *should* be making"
  • "A 5-minute tutorial in interpretive dance"

Friday, June 5, 2009

The Poem Store: "Write a Poem About Her Hair"

During the crazy week and a half that I was back in the states (after 8 months of being in Australia), I took a break from launching products and speaking at conferences to attend the Makers Faire with my old uni buddies from Los Angeles. The Faire was awesome - arts and crafts, fire-breathing objects, corn dogs, rockets, bicycle bands, sno cones, massive mouse traps, everything you could ever want in an amusement park for geeks. One of the really random things we encountered was a guy sitting under a tree, with a sign that said "POEM STORE: Your topic, Your price." That seemed like the coolest promise ever, so my friend Diana approached him and commissioned a poem on my behalf - about my hair. After I gave him a 2-minute recent history of my hair, he quickly typed up this on an old-school typewriter...

sky blue
but nights
falling down
the plummets
spectrum doesn't
cover everything
but it does make
it darker than it
was last once weekly
dying now we survived
 our out last dead protein
             goes DEEP

..which I think is awesome, even if I don't get all of it. We chatted with him more, and found out that he had offered the same service outside Google I/O, and that "web people gobble it up." Well, fine, we do. :) His name is Zach Houston, and he's always looking for more places to show up. Shoot him an email if you've got a poem-hungry crowd at your disposal.