OSCON has traditionally featured bundles of short fifteen-minute keynotes. I gave one entitled “Programming-Language Questions” and loved the compressed intensity of the format. Unfortunately, my slides were irretrievably lost in the post-speech disk crash (yes, I usually drop ’em on a USB stick, this time I didn’t). There’s video online at blip.tv, but the quality is pretty basic, and I suspect that the on-screen URIs and code samples not useful. Here are all the missing pieces, should you want to watch it (only 15 minutes, remember); plus a little extra commentary.
Music · Reviewing the IRC log, it became apparent that many found the background music too loud. What I should have done was given volume control to the A/V guys, who sit out there in the audience and understand this stuff.
Language Statistics · There are five slides excerpted from LangPop.com: Yahoo search popularity, Amazon book sales, Google Code projects, Freshmeat releases, and Craigslist job postings.
The treemap view of language popularity is from the O’Reilly Radar site. (In the video, talking to this slide, when I said “Java”, I meant “JavaScript”.)
From Tiobe, the July-2008 Programming Community Index and, more interesting, the historical Index trend-lines.
Finally, in my real-time audience survey, I asked about C, C++, Java, PHP, Perl, Python, Ruby, and JavaScript. Every single one got a significant show of hands; maybe the two biggest were Java and Perl. Ruby and Python were the only two languages where the audience showed more hands for “would be in an ideal world” than “using right now”. Perl showed about the same number of hands for the two questions, and for all the others, quite a few people using the language felt that in an ideal world, they wouldn’t be.
Java · The quote by Ted Leung is taken from IDE’s and Dynamic Languages; here’s the picture, which I took at some Java One booth where they were giving out blasts of pure oxygen via nose tube.
The Java code example, from the wonderful
Jing by the even
more wonderful James Clark, is from
SchemaBuilderImpl.java
:
public class SchemaBuilderImpl implements SchemaBuilder, ElementAnnotationBuilder, CommentList {
private final SchemaBuilderImpl parent;
private boolean hadError = false;
private final SubParser subParser;
private final SchemaPatternBuilder pb;
private final DatatypeLibraryFactory datatypeLibraryFactory;
private final String inheritNs;
private final ErrorHandler eh;
private final OpenIncludes openIncludes;
private final AttributeNameClassChecker attributeNameClassChecker = new AttributeNameClassChecker();
static final Localizer localizer = new Localizer(SchemaBuilderImpl.class);
Here are the two Java-platform graphics:
In C · Here’s the C code fragment:
/* Discover whether 'prefix' is a prefix of s. Return NULL if not; if it is,
* return a pointer to the part of s following the prefix
*/
static char * is_prefix(char * s, char * prefix) {
for (; *prefix && *s && (*prefix == *s); s++, prefix++)
/* empty */;
return (*prefix == 0) ? s : NULL;
}
A word of explanation: in
mod_atom, each publication has URI
space rooted at some path like /pubs/tim
and on the server, the
resource are mapped to filesystem files, with a corresponding root, for
example /var/atom/pubs/tim
. So there are a lot of places where
you need to find the post-root part of the string; hence this routine. It
could be improved, I suppose, but hey, it passes the unit tests.
The background music is In C by Terry Riley; you can get the score here and download the MP3 at last.fm. Here’s some of the music:
Erlang · The picture, as I didn’t say (sorry), is of Joe Armstrong, one of the designers of Erlang and its chief evangelist. Here’s the code fragment:
counter_loop(Count) ->
receive
{ incr } ->
counter_loop(Count + 1);
{ report, To } ->
To ! { count, Count },
counter_loop(Count)
end.
Scala · That blog I mentioned is Graceless Failures; note that the gracefully-typeset title is text, not a graphic; tasty! I actually misled the audience; while it’s common knowledge that some of the Twitter engineers are working with Scala, I actually don’t have the slightest idea what, specifically, they’re doing with it.
Static and Dynamic · The pro-static-typing excerpt is from Karsten Wagner’s Static vs ‘dynamic typing’, part 2: The personality-factor, and the quote about preventing failures and successes was from Sean McGrath’s Jython Webapp Tutorial - Part 1 - Writing Servlets in Jython; but further research suggests that it first appeared in Ned Batchelder’s On static typing.
Monkey Patching ·
The Ruby code where I opened up the Hash
class is described in
WF2: Start Your
Engines!; here it is:
class Hash
def top(howmany)
count = 0
keys = []
min = 0
self.each do |key, val|
if val > min
keys << key
keys.sort! do |k1, k2|
diff = self[k2] - self[k1]
(diff != 0) ? diff : k1 <=> k2
end
keys.pop if keys.length > howmany
min = self[keys[-1]]
end
end
keys
end
end
# ... later
counts = Hash.new(0)
# ...
counts[host] += 1
# ...
hosts_by_count = counts.top(10)
The pictures of monkeys are from random Google image searches.
The Gilad Bracha quote is from Monkey Patching.
KThksBy · I sure loved the fifteen-minute format. It’s obvious on the video that this was the first time I’d presented this material; the narrative was rough even given multiple practice run-throughs. Still, to those who were there, thanks for listening!
Comment feed for ongoing:
From: Ben Hutchings (Aug 05 2008, at 16:22)
The choice of music is subtle, the volume not so much. :-)
[link]
From: Colin Charles (Aug 05 2008, at 20:45)
I must say, it was an interesting keynote. It had interesting background music. Don't know how the video looks like, but sitting there in a live audience, it was actually most interesting :)
The Q&A session could've been more fun (i.e. not-a-Sam-Ramji-bashing-session), but alas, such was the last day of OSCON!
[link]
From: David N. Welton (Aug 06 2008, at 13:04)
It was pretty cool to see langpop.com in your slides - glad you found it useful. Let me know if you have any ideas about how to make it more useful (besides going back in time to get historical data), at davidw [*at*] dedasys.com.
Thanks!
[link]
From: Justin Sheehy (Aug 09 2008, at 12:46)
Tim,
I thought it was an excellent talk, with much better crowd connection and stage delivery than is typical for a tech talk.
The Erlang code sample is pretty neat, even though I took a different point from it than the one you made out loud.
I'd be shocked at a code sample from almost any other language that did that same job in such a small, clean, obvious way -- once the reader sees that it's not just "counting integers" but also providing a server that can (in a concurrency-safe way) take incremental updates from other processes and issue reports on demand to other processes.
Just counting integers is pretty boring in any language, it's what else you do with them that matters.
It is truly an excellent time, as a programmer, to be alive.
[link]