<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title>metajack.im</title>
  <link rel="alternate" type="text/html" href="http://metajack.im/" />
  
  <id>http://metajack.im/atom.xml</id>
  <updated>2013-04-14T13:55:42Z</updated>
  <subtitle>a blog about startups and code</subtitle>

  
  
  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/metajack" /><feedburner:info uri="metajack" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>Servo Update: Upgrading Rust, GPU Rendering, and Automation</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/nqVIhFl8Y3I/" />
    <id>tag:metajack.im:/2013/04/12/servo-update-upgrading-rust-gpu-rendering-and-automation/</id>
    <updated>2013-04-12T16:40:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>I've been working on Servo for three weeks now. There's an enormous amount of work to do, and I want to capture what's going on and how it's progressing. This should be the first of many such updates on the project. Day One When I arrived, Servo no longer built at...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;I've been working on Servo for three weeks now. There's an enormous amount of
work to do, and I want to capture what's going on and how it's
progressing. This should be the first of many such updates on the project.&lt;/p&gt;

&lt;h1&gt;Day One&lt;/h1&gt;

&lt;p&gt;When I arrived, Servo no longer built at all, at least not on OS X. Servo often
requires bleeding edge versions of Rust, and backwards incompatible changes to
Rust are still happening on a regular basis. Since all of the contributors to
Rust work on different platforms, when porting to a new Rust compiler, some
platforms have gotten left behind. This was particularly acute this time
because Rust 0.6 contained a lot of syntax changes, mostly things that got
removed from the language, and many pieces of Servo were using syntax that was
deprecated in Rust 0.5, and was finally deleted entirely in Rust 0.6.&lt;/p&gt;

&lt;h1&gt;Upgrading to Rust 0.6&lt;/h1&gt;

&lt;p&gt;Rust 0.6 removed a lot of keywords and syntax from the language. Porting Servo
required modifying all the constants, many function declarations, many import
statements, etc. These changes were largely mechanical. There were a few
changes that weren't so easy.&lt;/p&gt;

&lt;p&gt;Mutable fields are being removed from the language, and mutability will be
controlled by the mutability of the struct itself. Not all of these had to be
removed in Servo, but many of them did, and removing them often required
slightly changing the data structures and their type signatures. In some cases
this was trivial, but in a few cases these changes needed more care. In
particular, lots of these changes bumped up against the Rust borrow checker,
which ensures it's safe to hand out pointers to memory. There are still some
bugs in the borrow check, and workarounds are not always straightforward.&lt;/p&gt;

&lt;p&gt;It took me about a week and a half to work my way through all the dependent
libraries and Servo itself at which point I had a build. By the end of that
second week I had landed the language upgrade to servo as well as some Rust
library changes that were needed. The end result is that Servo is now using
Rust 0.6 syntax, but it requires a post-0.6 version of Rust due to the Rust
changes not landing quite in time for the 0.6 release.&lt;/p&gt;

&lt;h1&gt;GPU Rendering&lt;/h1&gt;

&lt;p&gt;Servo uses many forms of parallelism, but one bit of low hanging fruit is to
move to a fully GPU rendering path. Currently compositing is done on the GPU,
but rendering to the various layers is done on the CPU. This is how most
current browsers operate as well.&lt;/p&gt;

&lt;p&gt;We're moving to rendering on the GPU as well which should speed up some things
a bit. Instead of rendering in parallel to several layers, Servo will render
directly into textures on the GPU which the compositor can use without doing
CPU to GPU memory transfers.&lt;/p&gt;

&lt;p&gt;This required upgrading the rendering stack to a newer version of Azure
(Mozilla's drawing library) and a new version of Skia (the specific backend
that Azure uses on OS X, Linux, and Android). Now that this part is done,
we'll be adding texture layers to the renderer and switching drawing to those.&lt;/p&gt;

&lt;h1&gt;Automation&lt;/h1&gt;

&lt;p&gt;We're setting up build and testing automation for Servo now, which should help
ensure Servo remains buildable on all platforms. Rust has an amazing set of
tools for this already, which we are hoping to reuse fully. Buildbot machines
run builds and tests, and a GitHub bot called Bors handles dispatching builds
for patches that have been reviewed and merging pull requests that have passed
tests.&lt;/p&gt;

&lt;p&gt;For now this work will be on Linux, but we hope to expand it to cover OS
X and Android as well in the near future. Once Servo is a little farther
along, we plan to put up nightly snapshots so more people can follow along
with our progress.&lt;/p&gt;

&lt;h1&gt;Other Work&lt;/h1&gt;

&lt;p&gt;There's tons of other work in progress on both Servo and Rust. The DOM
bindings are getting improved, a new Rust scheduler that will make performance
and I/O better is in progress, a more optimized C FFI in Rust should also
land soon, and the rustpkg package manager is shaping up which we'll be
switching to for more and more of Servo as it matures.&lt;/p&gt;

&lt;p&gt;We need more help in lots of areas. Please join us in IRC in
&lt;a href="http://chat.mibbit.com/?server=irc.mozilla.org&amp;amp;channel=%23servo"&gt;#servo&lt;/a&gt; or
on the &lt;a href="https://lists.mozilla.org/listinfo/dev-servo"&gt;mailing list&lt;/a&gt;. We'll be
trying to mark bugs and projects that are well suited for new contributors. If
you want to work on Servo and write Rust code all the time,
&lt;a href="http://careers.mozilla.org/en-US/position/obMdXfwR"&gt;we're hiring&lt;/a&gt;.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/nqVIhFl8Y3I" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2013/04/12/servo-update-upgrading-rust-gpu-rendering-and-automation/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Joining Mozilla</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/p-toczV_EAc/" />
    <id>tag:metajack.im:/2013/03/22/joining-mozilla/</id>
    <updated>2013-03-22T10:52:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>On Monday, I join Mozilla to work on Servo, a new and experimental web browser engine built on Rust, a new systems programming language. I am perhaps the first professional Rust programmer. This will also be the first time in over a decade that I'm not working in a small company...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;On Monday, I join Mozilla to work on
&lt;a href="https://github.com/mozilla/servo"&gt;Servo&lt;/a&gt;, a new and experimental web browser
engine built on &lt;a href="http://www.rust-lang.org/"&gt;Rust&lt;/a&gt;, a new systems programming
language. I am perhaps the first professional Rust programmer.&lt;/p&gt;

&lt;p&gt;This will also be the first time in over a decade that I'm not working in a
small company or a startup (usually both). I've been thinking for a while that
it would be nice to work for a company that has real resources to solve
problems, as opposed to being at the mercy of venture capitalists or the whims
of users. Mozilla's mission statement is one that is easy for me to get
behind, and they are doing very interesting things at
&lt;a href="http://www.mozilla.org/en-US/research/"&gt;Mozilla Research&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I enjoy working on difficult and important projects, and it's hard for me to
imagine much that is more difficult or important than web browsers. It's an
added bonus to be working in and (hopefully) contributing to a new programming
language. I also love working with smart people, and Mozilla seems to have
those in abundance.&lt;/p&gt;

&lt;p&gt;This is going to be awesome.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/p-toczV_EAc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2013/03/22/joining-mozilla/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Digital Audio and Sampling Explained</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/hQKMz8tgjj8/" />
    <id>tag:metajack.im:/2013/02/26/digital-audio-and-sampling-explained/</id>
    <updated>2013-02-26T08:23:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>Xiph.org has just posted the second in its series of videos on digital media concepts and techniques. It's packed with information and demonstrations, and you're sure to learn a huge amount. As an added bonus, it's hosted by Monty, the creator of Ogg Vorbis (and many other amazing things). You couldn't...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;&lt;a href="http://xiph.org"&gt;Xiph.org&lt;/a&gt; has just posted the second in its
&lt;a href="http://video.xiph.org"&gt;series of videos on digital media concepts and techniques&lt;/a&gt;. It's
packed with information and demonstrations, and you're sure to learn a huge
amount. As an added bonus, it's hosted by Monty, the creator of Ogg Vorbis
(and many other amazing things). You couldn't ask for a more qualified
teacher.&lt;/p&gt;

&lt;p&gt;Watch below, or &lt;a href="http://video.xiph.org/vid2.shtml"&gt;on Xiph.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;video controls width="640" height="360"&gt;
  &lt;source src="http://downloads.xiph.org/video/Digital_Show_and_Tell-360p.ogv" type="video/ogg"&gt; 
  &lt;source src="http://downloads.xiph.org/video/Digital_Show_and_Tell-360p.webm" type="video/webm"&gt;
&lt;/video&gt;&lt;/p&gt;

&lt;p&gt;There is also a &lt;a href="https://wiki.xiph.org/Digital_Show_and_Tell/Episode_02"&gt;detailed write up&lt;/a&gt;.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/hQKMz8tgjj8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2013/02/26/digital-audio-and-sampling-explained/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>XEP Lookups on DuckDuckGo</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/jZdv45UhVb0/" />
    <id>tag:metajack.im:/2012/07/09/xep-lookups-on-duckduckgo/</id>
    <updated>2012-07-09T14:42:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>The search engine DuckDuckGo recently added the ability for developers to develop instant answer plugins for their search engine. This project is called DuckDuckHack. Instant answers on DuckDuckGo are really nice, in that they highlight a specific result in a context sensitive way. For example, Stack Overflow questions that match will...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;The search engine &lt;a href="https://duckduckgo.com/"&gt;DuckDuckGo&lt;/a&gt; recently added
the ability for developers to develop instant answer plugins for their
search engine. This project is called &lt;a href="http://duckduckhack.com/"&gt;DuckDuckHack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Instant answers on DuckDuckGo are really nice, in that they highlight
a specific result in a context sensitive way. For example, Stack
Overflow questions that match will show up with the highest rated
answer at the top of the page, and Wikipedia articles will be
presented as a title an abstract.&lt;/p&gt;

&lt;p&gt;I decided to play with DuckDuckHack and added a plugin for XMPP
Extension Proposal (XEP) lookups. I do XEP lookups often when I'm
answering people's XMPP-related questions, and this plugin makes the
XEPs title and abstract appear as an instant answer. The plugin was
recently merged into the tree, and it is now live on DuckDuckGo itself.&lt;/p&gt;

&lt;p&gt;Try it by
&lt;a href="https://duckduckgo.com/?q=xep+45"&gt;searching for XEP 45&lt;/a&gt;. View the
&lt;a href="https://github.com/duckduckgo/zeroclickinfo-fathead/tree/master/xep"&gt;code on GitHub&lt;/a&gt;.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/jZdv45UhVb0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2012/07/09/xep-lookups-on-duckduckgo/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>The Numbers Behind the Twitter Data Silo</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/cAqUYaY36M8/" />
    <id>tag:metajack.im:/2012/01/30/the-numbers-behind-the-twitter-data-silo/</id>
    <updated>2012-01-30T20:47:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>The dark future of search is being foreshadowed by this Twitter vs. Google fight. The latest Twitter volley at Google is this quote (seen on GigaOm) from Twitter CEO Dick Costolo: "Google crawls us at a rate of 1300 hits per second... They've indexed 3 billion of our pages," Costolo said....</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;The
&lt;a href="http://metajack.im/2012/01/12/the-potentially-dark-future-of-search/"&gt;dark future of search&lt;/a&gt;
is being foreshadowed by this Twitter vs. Google fight. The latest
Twitter volley at Google is this quote (seen on
&lt;a href="http://gigaom.com/2012/01/30/costolo-twitter-google/"&gt;GigaOm&lt;/a&gt;) from
Twitter CEO Dick Costolo:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;"Google crawls us at a rate of 1300 hits per second... They've indexed
    3 billion of our pages," Costolo said. "They have all the data they
    need."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's no doubt that 1,300 hits per second is a large number, but
let's put that in perspective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In
&lt;a href="http://mashable.com/2010/02/22/twitter-50-million-tweets/"&gt;February 2010&lt;/a&gt;,
Twitter was at 50 million tweets per day. This is just under 600
tweets per second.&lt;/li&gt;
&lt;li&gt;In &lt;a href="http://blog.twitter.com/2011/06/200-million-tweets-per-day.html"&gt;June 2011&lt;/a&gt;, Twitter was at 200 million tweets per day. This is
over 2,300 per second.&lt;/li&gt;
&lt;li&gt;In &lt;a href="http://techcrunch.com/2011/10/17/twitter-is-at-250-million-tweets-per-day/"&gt;October 2011&lt;/a&gt;, Twitter hit 250 million tweets per day or just
under 3,000 per second.  &lt;/li&gt;
&lt;li&gt;They have &lt;a href="http://blog.twitter.com/2011/12/yearinreview-tweets-per-second.html"&gt;spikes&lt;/a&gt; of over 7,000 tweets per second, with the
&lt;a href="https://twitter.com/#!/twittercomms/status/146751974904311808"&gt;largest&lt;/a&gt; (so far) being just over 25,000 tweets per second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For part of 2010, Google was perhaps able to keep up with the stream
at 1,300 requests per second. Somewhere between February and June, the
average volume of tweets outpaced them.&lt;/p&gt;

&lt;p&gt;Let's assume that they kept pace until June 2011, and that on June 1,
Twitter went from somewhere in the range of 1,300 tweets per second to
their reported 2,300 tweets per second. Google is 1,000 tweets behind
per second.&lt;/p&gt;

&lt;p&gt;By the end of the year, Google missed 15.5 billion tweets. They are
two months behind if they didn't skip any, and the tweet volume did
not increase. But it did increase by 25% or so by October, and surely
it has grown more since then.&lt;/p&gt;

&lt;p&gt;If Google has only indexed 3 billion pages so far, they have
approximately 12 days of tweets at current volume. It's pretty hard to
rationalize the 3 billion pages number against the 1,300 per second
number. Was Google indexing at a much slower rate before? Did they not
start until a few months ago?&lt;/p&gt;

&lt;p&gt;Of course Google may be getting multiple tweets per request, perhaps
by crawling the timelines of important users. But this means that they
probably get a lot of requests that don't give them any new tweets, or
else the timeliness of the data is poor.&lt;/p&gt;

&lt;p&gt;No matter how you slice it, it appears Google would be unable to keep
up. Even if they were keeping up now, Twitter's growth probably sets a
time limit for which keeping up remains possible.&lt;/p&gt;

&lt;p&gt;Perhaps Google is super clever, and can index only the right
tweets. I think that it's more probable they have "enough" data to
surface results for the super popular topics, and miss nearly
everything in the long tail of the distribution. I expect that this
adversely affects search quality, which one suspects is a high
priority for the world's best search engine.&lt;/p&gt;

&lt;p&gt;Google is no saint. They are just as guilty of the same data
hoarding. If you ran these numbers for YouTube indexing, I think you
will find the situation is much worse. I imagine that most of these
data silo companies purposefully set their crawl rates too low for
anyone to achieve high quality search results.&lt;/p&gt;

&lt;p&gt;In the case of Twitter, the end result for users is even worse because
Twitter's own attempts at search are terrible and are getting worse
over time. At least Google makes a decent YouTube search, even if no
one else can.&lt;/p&gt;

&lt;p&gt;Even if Google could get all the tweets, they still would have very
little to no Facebook data. I still think the best strategy in this
situation for them is to create their own social data and use that
instead. It's a tough road, but they seem to have little choice.&lt;/p&gt;

&lt;p&gt;In the end, it's not about Google or Twitter or Facebook, but the
stifling of innovation and competition around data. We can only hope
that some federated solution or some data-liberal company wins out in
the end.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/cAqUYaY36M8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2012/01/30/the-numbers-behind-the-twitter-data-silo/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>The More Things Change: A Review of The Soul of a New Machine</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/qRmZ4RpWwTg/" />
    <id>tag:metajack.im:/2012/01/20/the-more-things-change/</id>
    <updated>2012-01-20T10:20:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>Already in my career I've experienced enormous passion, burnout, extraordinary dedication to my team and projects, and depression. I'm sure many others have as well. Has it always been this way with technology? I often wonder if this rollercoaster is necessary, healthy, or normal. I recently saw a recommendation for Soul...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;Already in my career I've experienced enormous passion, burnout,
extraordinary dedication to my team and projects, and depression. I'm
sure many others have as well. Has it always been this way with
technology? I often wonder if this rollercoaster is necessary,
healthy, or normal.&lt;/p&gt;

&lt;p&gt;I recently saw a recommendation for &lt;a href="http://www.amazon.com/Soul-New-Machine-Tracy-Kidder/dp/0316491977/?tag=metajack-20"&gt;Soul of a New Machine&lt;/a&gt;,
which tells the story of a team of engineers at &lt;a href="http://en.wikipedia.org/wiki/Data_General"&gt;Data General&lt;/a&gt;
who built a new 32-bit computer in the late 1970s. The book is
fascinating. Thirty year later, many of its descriptions of the
project and the way the team worked and was treated could apply to any
modern project.&lt;/p&gt;

&lt;p&gt;The plot summary will no doubt sound familiar to you: A team of mostly
young, mostly male engineers works grueling hours to build something
amazing in too short an amount of time. They succeed, albeit a bit
over their original schedule. Despite the project's commercial
success, the team is denied both recognition and financial rewards and
many end up leaving the company. Almost all of them ultimately enjoyed
it and would (and did) do it again.&lt;/p&gt;

&lt;p&gt;There were many pieces of this story that resonated with me.&lt;/p&gt;&lt;h2&gt;Work is a Drug&lt;/h2&gt;

&lt;p&gt;On overworking &lt;a href="http://en.wikipedia.org/wiki/Tom_West"&gt;Tom West&lt;/a&gt;, the manager of the team in the book,
says:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;That's the bear trap, the greatest vice. Your job. You can justify
    just about any behavior with it. Maybe that's why you do it, so you
    don't have to deal with all those other problems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why deal with the unpredictable world, when the controllable world of
creation is available? It's code as escapist drug, and I love to get
high on it. Mundane things like cleaning my house, and more
serious ones like taking care of my health, are all easy to avoid
while fixing bugs or starting a new project.&lt;/p&gt;

&lt;p&gt;It's both possible and important to find a balance.&lt;/p&gt;

&lt;p&gt;The team's secretary, who was much more than her title suggests,
suffered and succeeded with the rest of the team. Even she says:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;I would do it again. I would be very grateful to do it again. I
    think I would take a cut in pay to do it again.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even as I recover from projects that burned me out, I am constantly
thinking about how to do new ones. In fact, while I'm doing any
project, I'm already thinking about doing another. This sounds like
drugs again. But they are good drugs.&lt;/p&gt;

&lt;h2&gt;Harassment and Treatment of Women&lt;/h2&gt;

&lt;p&gt;The book describes how some team members tormented the lone female
engineer. This is something that still happens today, and it's
terrible. And people then wonder why there are so few women in our
industry.&lt;/p&gt;

&lt;p&gt;In addition to that, at the end when they hand out the peer awards,
their award to the woman was for putting up with them, not for any of
her actual accomplishments.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://societyofwomenengineers.swe.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=88&amp;amp;Itemid=78"&gt;Betty Shanahan&lt;/a&gt;
was that lone woman, and it looks to me that she deserved more than
just an award for thick skin. She's the CEO of the Society of Women
Engineers, and she was "a member of the design team for the first
parallel processing minicomputer and manager of hardware design for
subsequent systems."  She later moved to the business side of
technology, and I wonder if that had anything to do with her having to
put up with the Eagle team's harassment.&lt;/p&gt;

&lt;h2&gt;How Something is Done is Important Too&lt;/h2&gt;

&lt;p&gt;Often we judge things by their properties, but one can also rightly
judge something by how it is made. Shoes made from child labor are
less good than those made in other ways.&lt;/p&gt;

&lt;p&gt;Kidder, the book's author, discusses this:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;In &lt;em&gt;The Nature of the Gothic&lt;/em&gt; John Ruskin decries the tendency of
    the industrial age to fragment work into tasks so trivial that they
    are fit to be performed ony by the equivalent of slave
    labor. Writing in the nineteeth century, Ruskin was one of the
    first, with Marx, to have raised this now-familiar complaint. In the
    Gothic cathedrals of Europe, Ruskin believed, you can see the
    glorious fruits of free labor given freely. What is usually meant by
    the term craftsmanship is the production of things of high quality;
    Ruskin makes the crucial point that a thing may also be judged
    according to the conditions under which it was built.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By this kind of measure, is the work many teams do good? Is the Eagle
computer that Tom West's team built really a success since the team
worked much overtime, suffered divorces and other problems, and in the
end received little to no reward? &lt;/p&gt;

&lt;p&gt;I think it's time for entrepreneurs and workers in our industry to
demand better. Our outputs will be better if they are made
sustainably, and not just by the measure above. In retrospect, maybe
the reviewers of &lt;a href="https://en.wikipedia.org/wiki/L.A._Noire"&gt;LA Noire&lt;/a&gt; should have taken into the account
the &lt;a href="https://en.wikipedia.org/wiki/L.A._Noire#Staff_complaints"&gt;trials&lt;/a&gt; of its developers; it certainly would not have
fared well.&lt;/p&gt;

&lt;h2&gt;Freedom of Expression&lt;/h2&gt;

&lt;p&gt;I want to hire &lt;a href="http://paulgraham.com/word.html"&gt;resourceful&lt;/a&gt; people. I want to describe a
general outline of a design and not have to describe it in intricate
detail in order for them to build it.&lt;/p&gt;

&lt;p&gt;It turns out that this is critical for happiness. If we're told
exactly how to do something, it takes much of the creativity and fun
out of the work.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Engineers are supposed to stand among the privileged members of
    industrial enterprises, but several studies suggest that a fairly
    large percentage of engineers in America are not content with their
    jobs. Among the reasons cited are the nature of the jobs themselves
    and the restrictive way sin which they are managed. Among the terms
    used to describe their malaise are *declining technical challenge;
    misutilization; limited freedom of action; tight control of working
    conditions*.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You must trust those you work with to be resourceful. If you don't
trust them, you will end up micromanaging them into unhappiness, and
you will also remove their valuable creative input from your product.&lt;/p&gt;

&lt;p&gt;There is a balance to be struck with feedback. The Eagle engineers
thought that the managers didn't appreciate their efforts, but in
reality, some of this was them trying to stay out of the way. Kidder
asked the Tom West's boss:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Had the Eagle project always interested him or had it grown in
    importance gradually?&lt;/p&gt;
    
    &lt;p&gt;"From the start it was a very important project."&lt;/p&gt;
    
    &lt;p&gt;Was he pleased with the work of the Eclipse group?&lt;/p&gt;
    
    &lt;p&gt;"Absolutely!" His voice falls. "They did a hell of a job."&lt;/p&gt;
    
    &lt;p&gt;But some members of the team felt that they had been rather
    neglected by the company.&lt;/p&gt;
    
    &lt;p&gt;"That doesn't surprise me," he says. "That's frequently the
    case. There's often a conflict in people's minds. How much direction
    do they want?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've had this same issue with investors as well. You don't want them
to meddle with your company or your product, but you also want their
advice and guidance. It's possible to go too far in either direction,
but mostly you hear about stories where investors meddle too much. I
personally think it's probably better to err on the side of too little
help than to end up with too much meddling.&lt;/p&gt;

&lt;h2&gt;The Venture Capitalists&lt;/h2&gt;

&lt;p&gt;Even thirty years ago, the VCs had a bad rap. Tom West was asked in a
&lt;a href="http://www.wired.com/wired/archive/8.12/soul.html"&gt;Wired article&lt;/a&gt; years after the book's publishing why he stayed
at Data General until he retired:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;"You could do new products and companies within the company, rather
    than shag some venture capitalist and kill yourself for five years."
    To be an entrepreneur, he says, "you have to be interested in
    networking, even with fools."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is another reason why I would prefer to bootstrap companies if at
all possible.&lt;/p&gt;

&lt;p&gt;Tom West ended up working on many interesting projects at Data
General, but ultimately, none of them got the support or recognition
they deserved. The other members of the Eagle team spread out and
started or worked for new companies, and in general seemed much
happier.&lt;/p&gt;

&lt;h2&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;In the end, it's both a fascinating tale of heroism and creativity and
a saddening tale of undervalued and underpaid engineers. I am both
emboldened to keep following my passions and more mindful of its
dangers. My troubles are not unique - not even modern. Thirty years
after this book was written, I feel like it could have been written
yesterday.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/qRmZ4RpWwTg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2012/01/20/the-more-things-change/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>The Potentially Dark Future of Search</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/qTC-aH8q6Z8/" />
    <id>tag:metajack.im:/2012/01/12/the-potentially-dark-future-of-search/</id>
    <updated>2012-01-12T10:12:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>Twitter sees Google's latest Google+ feature, integration into Google search, as anti-competitive, and it probably is. However, it brings to the surface some real issues with the future of search and of data. Twitter's argument: We're concerned that as a result of Google's changes, finding this information will be much harder...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;Twitter sees Google's latest Google+ feature, integration into Google
search, as anti-competitive, and it probably is. However, it brings to
the surface some real issues with the future of search and of data.&lt;/p&gt;

&lt;p&gt;Twitter's argument:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;We're concerned that as a result of Google's changes, finding this
    information will be much harder for everyone. We think that's bad
    for people, publishers, news organizations and Twitter users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://plus.google.com/u/0/116899029375914044550/posts/24uqWqvALud"&gt;Google's response&lt;/a&gt;
was:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;We are a bit surprised by Twitter's comments about Search plus Your
    World, because they chose not to renew their agreement with us last
    summer (&lt;a href="http://goo.gl/chKwi"&gt;http://goo.gl/chKwi&lt;/a&gt;), and since then
    we have observed their rel=nofollow instructions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;People have been digging into the semantics of nofollow (see
&lt;a href="http://marketingland.com/schmidt-google-not-favored-happy-to-talk-twitter-facebook-integration-3151"&gt;Danny Sullivan&lt;/a&gt; and
&lt;a href="http://luigimontanez.com/2012/how-rel-nofollow-works/"&gt;Luigi Montanez&lt;/a&gt;),
but there is a much bigger issue.&lt;/p&gt;

&lt;p&gt;Google and other established and up-and-coming search engines have no
real way to include lots of data in their index. It's easy to imagine
that the lack of access to Twitter and Facebook data was a motivator
for Google+ in the first place.&lt;/p&gt;

&lt;p&gt;Lots of sites now generate enough data that it is unrealistic to crawl
them. For example, Youtube has more new content every day than they
allow anyone to crawl. Twitter is essentially the same. This means
there is no way to index this data without special arrangements with
the provider. Twitter has closely guarded their firehose of data, but
at least they have some mechanism to obtain it. Youtube, as far as I
am aware, has no such mechanism.&lt;/p&gt;

&lt;p&gt;My team and I ran into this problem head on trying to build Collecta,
a real-time search engine. Access to the data was a primary blocker
for many features and product ideas, and over the too short life of
that company, access became significantly more difficult, not easier.&lt;/p&gt;

&lt;p&gt;Google can build an effective search, even a real-time one, for
Youtube, but no one else can. Twitter can build search for their data,
but few others can, and their data access policies can and do change
on a whim.&lt;/p&gt;

&lt;p&gt;If Google believes that microblogging data will improve their search
product, then a reasonable strategy to obtain that data is to try and
build their own microblogging service to generate it. I can't fault
Google for trying. If I thought Collecta could have effectively
competed against Twitter for their audience, I would certainly have
attempted that as well.&lt;/p&gt;

&lt;p&gt;Google, Twitter, Facebook and others are hoarding silos of otherwise
public data. Not only is this artificially limiting the features of
their products, but it squashes the potential for new and exciting
search applications. The search services that have sprung up are
limited to your own data, aggregate results from service-specific
search APIs, exist at the mercy of data providers, or make do with a
tiny subset of the data. I don't think Google could have built their
own search engine if the Web were similarly hostile.&lt;/p&gt;

&lt;p&gt;One could argue for requiring these bits of data to be openly
available, but unlike the data of the past, this data is expensive to
publish and consume. Most of these services may not even have a
mechanism to publish the data, even internally. Simply receiving the
Youtube or Twitter firehoses (and not counting video or image media)
would require significant engineering effort, and the rate of data
generation is only accelerating.&lt;/p&gt;

&lt;p&gt;I think we must push for open access to data, even if it is
costly. These data wars benefit very few. If things don't change, the
future of search is dark.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/qTC-aH8q6Z8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2012/01/12/the-potentially-dark-future-of-search/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Strophe.js 1.0.2 Released</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/iB3WiUTIHuo/" />
    <id>tag:metajack.im:/2011/06/19/strophejs-102-released/</id>
    <updated>2011-06-19T10:26:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>I've just tagged and released Strophe.js 1.0.2. You can find it on the new Strophe.js site. Please consider upgrading as soon as possible, as a security problem was found in Strophe.js 1.0.1. The DIGEST-MD5 SASL method used a constant client nonce due to a bug in Strophe's use of the underlying...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;I've just tagged and released Strophe.js 1.0.2. You can find it on the
&lt;a href="http://strophe.im/strophejs"&gt;new Strophe.js site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please consider upgrading as soon as possible, as a security problem
was found in Strophe.js 1.0.1. The DIGEST-MD5 SASL method used a
constant client nonce due to a bug in Strophe's use of the underlying
MD5 library. I don't know of any exploits for this bug, but it could
compromise your site's security.&lt;/p&gt;

&lt;p&gt;Much of the credit for this release goes to the many contributions and
pull requests that people have sent in the last year. The community's
effort continues to make Strophe.js better and better.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/iB3WiUTIHuo" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2011/06/19/strophejs-102-released/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>XMPP Case Study Interview: Drakontas</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/A35tKEV4mKE/" />
    <id>tag:metajack.im:/2011/03/29/xmpp-case-study-interview-drakontas/</id>
    <updated>2011-03-29T11:07:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>XMPP is everywhere. Did you have any idea that your local SWAT team might be using XMPP for tactical coordination, or that the same technology might be used to allow friends and family to track and share location with each other? It always amazes me where XMPP will turn up, but...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;XMPP is everywhere. Did you have any idea that your local SWAT team
might be using XMPP for tactical coordination, or that the same
technology might be used to allow friends and family to track and
share location with each other? It always amazes me where XMPP will
turn up, but &lt;a href="http://www.ilyabraude.com"&gt;Ilya&lt;/a&gt; and his team at
&lt;a href="http://www.drakontas.com"&gt;Drakontas&lt;/a&gt; have used the technology to
great effect with their two products, &lt;a href="https://smylenow.com/"&gt;Smyle&lt;/a&gt;
and
&lt;a href="http://drakontas.com/software/dragonforce/overview.html"&gt;DragonForce&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I often meet people doing amazing things with XMPP technologies, and
through these case study interviews, I want to highlight the great
work that these people and companies are doing. This is the second
case study interview (see the first one on
&lt;a href="http://metajack.im/2010/01/05/xmpp-case-study-interview-cabulous/"&gt;Cabulous&lt;/a&gt;),
and I really hope you are enjoying these as much as I am.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.ilyabraude.com"&gt;Ilya Braude&lt;/a&gt; is our guest for this
interview, and he is the lead software engineer for Drakontas, working
on both their &lt;a href="https://smylenow.com"&gt;Smyle&lt;/a&gt; and
&lt;a href="http://drakontas.com/software/dragonforce/overview.html"&gt;DragonForce&lt;/a&gt;
products.&lt;/p&gt;

&lt;p style='text-align:center'&gt;
&lt;img src='/images/smyle1.jpeg' width='180' height='300'&gt;
&lt;img src='/images/smyle2.jpeg' width='180' height='300'&gt;
&lt;br&gt;
&lt;img src='/images/dragonforce1.png' width='512' height='324'&gt;
&lt;img src='/images/dragonforce2.png' width='523' height='324'&gt;
&lt;img src='/images/dragonforce3.png' width='523' height='324'&gt;
&lt;/p&gt;&lt;h2&gt;Drakontas&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Jack: What is Smyle?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: Smyle is a group-based social collaboration application that
allows you and your friends to interact with each other to plan or
coordinate around specific events.&lt;/p&gt;

&lt;p&gt;It does this by allowing group members to chat, share location, and
pictures.  All pictures and maps are also instantly turned into shared
whiteboard sessions, allowing annotations and icon placement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: Can you give some examples of how people are starting to
use Smyle?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: Smyle in being used in various ways.  First, it's being used as
a real-time location tracking service.  People are using it to track
each other as they are arriving at the same destination, without
having to call or text each other to get status updates.&lt;/p&gt;

&lt;p&gt;Then, they can use the whiteboarding features to enhance that
experience.  For example, I might draw a path for you to take on the
map, to show you exactly where I am and how to get to me and use icons
to mark destinations and places of interest.&lt;/p&gt;

&lt;p&gt;The chat feature is also heavily utilized, probably because people are
accustomed to it.  However, the other collaborative features were
designed to minimize overt chat and allow users to collaborate
naturally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: You currently have a version for the Web and for Android
phones. Are other implementations planned?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: Yes, we are constantly being asked if an iPhone version is
available, and we are working on it.  There's no planned release date
yet, but it's definitely coming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: It seems like the friends, chat, and collaboration are
all great places for XMPP. How much of the system is powered by
XMPP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: Because the application must be real-time and collaborative,
XMPP is a natural choice that has worked very well for us.  Almost all
of the communication is over XMPP, with the exception of out-of-band
image downloads, which use HTTP.&lt;/p&gt;

&lt;p&gt;In fact our protocols are based on the PubSub specification.  We have
implemented custom components on the server side which masquerade as
PubSub services, but perform business logic operations on the
payloads.&lt;/p&gt;

&lt;p&gt;The whole XMPP ecosystem has been great for this: everything from
libraries for the browser (we use Strophe), to the excellent work that
has been done with XMPP and Twisted, to stable XMPP servers that are
at the core of the messaging bus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: It's great that you were able to map most of the
functionality onto well known XMPP extensions. Did all of the
functionality map this way, or did you use some custom extensions as
well?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: We have been trying to stick to existing specifications as much
as possible for several reasons.  Client (and server) development is
easier if we reuse existing library support for PubSub and Data Forms,
and it would be easier for third party integration if we decide to
open an API in the future.  So we have been able to use existing
specifications in creative ways.  For example, a whiteboard is a
PubSub node, where each item in the node is an annotation or icon.  We
use Data Forms for structured data and configuration.  The
customization comes from how clients and servers interpret these
existing protocols.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: Did you find that using existing protocols, even if
library support wasn't available, made you more productive?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: A lot of smart people have spent time designing the protocols,
so it's great to be able to rely on well-written and thorough
specifications.  We don't have library support on all platforms.  In
many cases, we've had to implement our own, and have contributed the
code back to the open source community.  This allowed us to
concentrate on what was important for our application rather than the
lower-level protocols.  We did face some challenges with this approach
and have had to come up with interesting ways to model information.
However, in the end, I believe reusing existing work was the right
approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: You've given some great reasons for choosing XMPP. Were
there other technologies that you evaluated as well?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: The first consideration was, of course, to implement our own.
And having done so in a previous application, we decided that it
wasn't the best choice.  We've also briefly looked at other messaging
platforms such as JMS, but it was quickly obvious that they weren't a
good fit.  XMPP was simple enough to understand, and develop with,
especially because we could see wire traffic and compare it with
existing working implementations.  So it was a natural choice.&lt;/p&gt;

&lt;p&gt;I should also note that XMPP servers offer a lot out of the box,
especially Multi-User Chat and PubSub.  Our initial implementations
used built-in server implementations, which we replaced with custom
components as our requirements and feature set grew.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: Was this your first time using XMPP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: Prior to this application and another application that we have
also built with XMPP, I've had no experience with it at all.  Needless
to say, there was a lot of time spent reading specs!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: Did it take long to get up to speed with XMPP? Which
parts gave you the most trouble?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: One of the first things that I did with XMPP was implement a
J2ME client from the ground up.  That didn't take too much time.  One
of the initial challenges was determining what server features were
available and how we could use them correctly.  And also we've had to
figure out what our server of choice actually implemented and any
quirks it had.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: When I first met you, you showed me another project that
your company created. It seems like something you'd see on TV shows
like 24. Can you tell me a little bit about DragonForce?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: DragonForce is an application for law enforcement, first
responders, and tactical teams.  It allows for rich real-time
information exchange between the units in the field and command
centers.  We've worked a lot with SWAT teams, and routinely
participate in tactical exercises with them.  The state of the art in
communications is usually a voice radio.  DragonForce allows teams and
individuals to track each other on a map, send text messages, and
share annotatable pictures, floor plans, and maps.&lt;/p&gt;

&lt;p&gt;There are numerous advantages to this type of system.  For example,
sending a picture of a suspect augmented with a text description
immediately to everyone in the field is far better than sending a
description over the radio.  The guys in the field can take pictures
using their mobile devices and send them to the commander, providing
valuable visibility into a situation.&lt;/p&gt;

&lt;p&gt;We have a mobile application that runs on rugged handhelds, and a
command center application that is a web-based application.  In fact,
Smyle is our adaptation of that technology to the consumer space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: All the same features from Smyle are there as well
right? Real-time location updates on a map, whiteboarding on
floor plans, etc?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: Yes, all of these features are in DragonForce as well.
Floorplans turn into whiteboards so that, for example, as rooms are
cleared in a building they can be marked off silently and quickly
without radio chatter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jack: Will you be using XMPP in future projects? Do you
recommend it to others?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ilya: I would absolutely recommend it, and we'll keep building
collaboration software using XMPP.  Besides the technology, there's a
great and active community that has helped us a lot, and I'm sure will
help others as well.&lt;/p&gt;

&lt;h2&gt;Technical Details&lt;/h2&gt;

&lt;p&gt;Smyle and DragonForce are both custom XMPP clients. The websites both
use the &lt;a href='http://code.stanziq.com/strophe'&gt;Strophe.js&lt;/a&gt;
library for XMPP communication over &lt;a
href='http://xmpp.org/about-xmpp/technology-overview/bosh/'&gt;BOSH&lt;/a&gt;. The
mobile clients use native connections.&lt;/p&gt;

&lt;p&gt;Ilya has made many of his own plugins for Strophe.js as well,
including ones for &lt;a href="http://xmpp.org/extensions/xep-0004.html"&gt;Data
Forms&lt;/a&gt;,
&lt;a href="http://xmpp.org/about-xmpp/technology-overview/pubsub/"&gt;PubSub&lt;/a&gt;,
&lt;a href="http://xmpp.org/about-xmpp/technology-overview/muc/"&gt;Multi-user
Chat&lt;/a&gt;, &lt;a href="http://xmpp.org/extensions/xep-0030.html"&gt;Service
Discovery&lt;/a&gt;, and roster
management.&lt;/p&gt;

&lt;p&gt;The XMPP server used for DragonForce is &lt;a
href='http://www.igniterealtime.org/projects/openfire/'&gt;Openfire&lt;/a&gt;,
but the Drakontas team have switched to &lt;a
href='http://prosody.im'&gt;Prosody&lt;/a&gt; for Smyle.&lt;/p&gt;

&lt;p&gt;They have written a number of custom components in Python using
&lt;a href="http://wokkel.ik.nu/"&gt;Wokkel&lt;/a&gt; and
&lt;a href="http://idavoll.ik.nu/"&gt;Idavoll&lt;/a&gt;. Having the components being external
to the server makes them portable across the two different servers.&lt;/p&gt;

&lt;h2&gt;My Thoughts&lt;/h2&gt;

&lt;p&gt;I met Ilya at the XMPP Summit in Brussels in 2010. He completely
floored me with his demo of DragonForce, and he followed up later in
the summit with some great ideas in his Strophe.js plugins. He and his
team have done some amazing things, both with web technology in
general and with XMPP specifically.&lt;/p&gt;

&lt;p&gt;I can hardly believe that the same technology platform they've built
powers both such a niche use case and a consumer application, but once
you use the products, it makes a lot of sense.&lt;/p&gt;

&lt;p&gt;You can try out Smyle yourself right now &lt;a href="https://smylenow.com"&gt;on the
web&lt;/a&gt; or with their &lt;a href="https://market.android.com/details?id=com.smyle"&gt;Android
client&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have some questions for Ilya, please leave a comment. I'll make
sure he sees them.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/A35tKEV4mKE" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2011/03/29/xmpp-case-study-interview-drakontas/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Introducing Snack Words</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/b63robQeks8/" />
    <id>tag:metajack.im:/2011/03/28/introducing-snack-words/</id>
    <updated>2011-03-28T09:47:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>The earliest things I remember about learning to write code are all related to trying to create games. Whether it was learning basic linear algebra to do 3D rotations or the basics of language parsing to make text adventures, most of my early learning was a quest to implement something silly....</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;The earliest things I remember about learning to write code are all
related to trying to create games. Whether it was learning basic
linear algebra to do 3D rotations or the basics of language parsing to
make text adventures, most of my early learning was a quest to
implement something silly. Over 20 years later, I've finally shipped
something silly.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://itunes.apple.com/us/app/snack-words/id425786167"&gt;Snack Words&lt;/a&gt;
is a simple word game. You are given six tiles, and you must make as
many words from those letters as possible before time runs out. The
twist is that you aren't playing alone; you are playing head-to-head
against another person with the same tiles. Each game is short and
fun, like a snack.&lt;/p&gt;

&lt;div style='width:480px;margin:10px;float:left'&gt;
&lt;iframe title="Snack Words video" width="480" height="390" src="http://www.youtube.com/embed/5zPQuqoUHqU" frameborder="0" allowfullscreen="yes"&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href='http://itunes.apple.com/us/app/snack-words/id425786167'&gt;
&lt;img src='/images/app_store_badge.png' width='200' height='100'&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've been working on &lt;a href="http://itunes.apple.com/us/app/snack-words/id425786167"&gt;Snack
Words&lt;/a&gt; in my
spare time over the last several months. I haven't yet written about
it here, but I left Collecta in early October and have been working on
a number of side projects since then. My wife and I did all the
game design in a few weeks of lunch conversations and then I wrote the
code between other projects. A small group of friends and family
helped beta test everything along the way. Now I'm playing a game I
created with people from all over the world.&lt;/p&gt;

&lt;p&gt;The inspiration for the game came from a couple of places. My wife and
I spent some time addicted to similar games, although we always wished
for various features that were missing. When we decided to create
Snack Words, we already had a healthy list of ideas. Another source
came from my colleagues at Chesspark. We all wanted to make a
simplified version of the game that focused on fast games where you
didn't spend a lot of time matchmaking.&lt;/p&gt;

&lt;p&gt;Please give it a try, and let me know what you think. I learned a lot
of great stuff along the way, which I'll be writing about here. For
example, I recently gave a &lt;a href="http://erlang-factory.com/conference/SFBay2011/speakers/JackMoffit"&gt;talk at Erlang Factory&lt;/a&gt; where I showed how
Erlang made the game server a simple endeavor; in fact, it's just
slightly over 2,400 lines of code, including white space and
comments. You might also be surprised to learn that I did not use XMPP
for the protocol, and I have a post planned to explain that
decision as well.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/b63robQeks8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2011/03/28/introducing-snack-words/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Learn Ejabberd With Me At Erlang Factory</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/8JNnOV4t7N8/" />
    <id>tag:metajack.im:/2011/01/24/learn-ejabberd-with-me-at-erlang-factory/</id>
    <updated>2011-01-24T16:58:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>I'll be teaching a three day course on ejabberd and XMPP applications at the next Erlang Factory in San Francisco. I'll also be speaking at the conference about how Erlang gives me superpowers. The course will be March 21st through March 23rd, and the Erlang Factory conference will be on the...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;I'll be teaching a three day course on ejabberd and XMPP applications
at the next Erlang Factory in San Francisco. I'll also be speaking at
the conference about how Erlang gives me superpowers. The course will
be March 21st through March 23rd, and the Erlang Factory conference
will be on the 24th and 25th.&lt;/p&gt;

&lt;p&gt;I'll be covering everything from XMPP basics and installing ejabberd
to writing your own extensions, web services, and clients. See the
&lt;a href="http://erlang-factory.com/conference/SFBay2011/university/XMPPwithErlang"&gt;full course
description&lt;/a&gt;
for more information.&lt;/p&gt;

&lt;p&gt;You can register for Erlang Factory, including the course, or get more
information about the event at &lt;a href="http://erlang-factory.com/conference/SFBay2011"&gt;Erlang Factory SF
2011&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I highly recommend this conference if you are interested at all in
Erlang. There are some amazing talks each year, and the conference is
always well run (this will be my third year attending).&lt;/p&gt;

&lt;p&gt;I hope to see you there!&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/8JNnOV4t7N8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2011/01/24/learn-ejabberd-with-me-at-erlang-factory/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Strophe.js Community Plugins Project</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/QdgpwuI7dp8/" />
    <id>tag:metajack.im:/2010/11/29/strophejs-community-plugins-project/</id>
    <updated>2010-11-29T15:12:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>The community has been doing great work on Strophe.js plugins, but for the most part, this work has remained invisible. I want to change that. I have created the strophejs-plugins repository on GitHub and moved everything but the flXHR plugin into this new repository. My plan is for this to be...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;The community has been doing great work on Strophe.js plugins, but for
the most part, this work has remained invisible. I want to change
that.&lt;/p&gt;

&lt;p&gt;I have created the
&lt;a href="https://github.com/metajack/strophejs-plugins"&gt;strophejs-plugins&lt;/a&gt;
repository on GitHub and moved everything but the
&lt;a href="http://flxhr.flensed.com/"&gt;flXHR&lt;/a&gt; plugin into this new repository. My
plan is for this to be the clearing house for community plugins.&lt;/p&gt;

&lt;p&gt;If you want to add a new plugin or contribute to an existing one,
please fork this repository and send me a pull request. I will not be
nearly as picky about commits to strophejs-plugins as I am with the
main Strophe.js code, but I expect as plugins mature, a higher bar
will be created for those specific plugins.&lt;/p&gt;

&lt;p&gt;Within a few hours, the first community plugin was added to the
repository, the
&lt;a href="https://github.com/metajack/strophejs-plugins/tree/master/serverdate/"&gt;serverdate&lt;/a&gt;
plugin, which detects clock skew between the client and server. I know
there are some excellent plugins out there, so don't be shy - fork and
hack!&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/QdgpwuI7dp8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2010/11/29/strophejs-community-plugins-project/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>Bite-sized XMPP News #4</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/wQPc3BFpd3I/" />
    <id>tag:metajack.im:/2010/02/22/bitesized-xmpp-news-4/</id>
    <updated>2010-02-22T00:30:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>Here's a collection of interesting XMPP-related updates from the microblogging world this week: malditogeek: http://github.com/malditogeek/Pocho takes the stage! #weekendhack #xmpp #redis #ruby # Pocho looks to be a neat little XMPP bot that stores hashtagged messages to XMPP group chat rooms. It also exposes these stored messages via a web interface...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;Here's a collection of interesting XMPP-related updates from the
microblogging world this week:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/malditogeek"&gt;malditogeek&lt;/a&gt;:
      &lt;a href="http://github.com/malditogeek/Pocho"&gt;http://github.com/malditogeek/Pocho&lt;/a&gt;
      takes the stage! #weekendhack #xmpp #redis #ruby
      &lt;a href="http://twitter.com/malditogeek/status/9455499870"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pocho looks to be a neat little XMPP bot that stores hashtagged
messages to XMPP group chat rooms. It also exposes these stored
messages via a web interface as well. It sounds like an interesting
bot!&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://identi.ca/kocio"&gt;kocio&lt;/a&gt;: #Jingle Nodes on Talkr.IM - simpler
      #XMPP #VoIP for the people
      &lt;a href="http://www.process-one.net/en/blogs/article/jingle_nodes_on_talkr.im/"&gt;http://www.process-one.net/en/blogs/article/jingle&lt;em&gt;nodes&lt;/em&gt;on_talkr.im/&lt;/a&gt;
      #osnews &lt;a href="http://identi.ca/notice/22507165"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thiago talked about Jingle Nodes at the XMPP summit, and they look
interesting. I unfortunately missed his talk at the summit, but from
what I understand, it brings Skype like peer-to-peer relaying to XMPP
Jingle.&lt;/p&gt;

&lt;p&gt;It will be interesting to see this develop further. Jingle is really
starting to become part of the normal XMPP landscape. For example, at
the summit, the N900s that Nokia kindly let us borrow all had support
for Jingle calls.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://identi.ca/tofu"&gt;tofu&lt;/a&gt;: 'BOSH warming' ejabberd module. cool
      stuff! !xmpp
      &lt;a href="http://github.com/theoooo/mod_warm_bindings"&gt;http://github.com/theoooo/mod&lt;em&gt;warm&lt;/em&gt;bindings&lt;/a&gt;
      &lt;a href="http://identi.ca/notice/22312632"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is another implementation of the &lt;a href="http://metajack.im/2009/12/14/fastest-xmpp-sessions-with-http-prebinding/"&gt;HTTP pre-binding
technique&lt;/a&gt;. See
&lt;a href="http://github.com/skeltoac/http_prebind"&gt;mod_prebind&lt;/a&gt; and
&lt;a href="http://github.com/thepug/Mod-Http-Pre-Bind"&gt;Mod&lt;em&gt;Http&lt;/em&gt;Pre_Bind&lt;/a&gt; for
two other example implementations.&lt;/p&gt;

&lt;p&gt;There is not yet a standard for this technique, so each of these
implementations does it differently. I think it's time to write a XEP.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://identi.ca/stpeter"&gt;stpeter&lt;/a&gt;: it's somewhat amusing that both
      the SIP-Communicator client and onsip PBX support XMPP these
      days... &lt;a href="http://identi.ca/notice/22251583"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Amusing, but not surprising. After all, Cisco is a huge VoIP company,
and they themselves purchased Jabber.com. The writing has been on the
wall for a while for SIMPLE.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://identi.ca/arc"&gt;arc&lt;/a&gt;: #jabiru is a horribly broken !xmpp
      client for !android, is this really our only option?
      &lt;a href="http://identi.ca/notice/22199211"&gt;#&lt;/a&gt;&lt;/p&gt;
    
    &lt;p&gt;&lt;a href="http://identi.ca/stevegibson"&gt;stevegibson&lt;/a&gt;: @arc: a quick google
      found the JabbIM !xmpp client for
      !android. &lt;a href="http://identi.ca/notice/22209947"&gt;#&lt;/a&gt;&lt;/p&gt;
    
    &lt;p&gt;&lt;a href="http://identi.ca/thaluser"&gt;thaluser&lt;/a&gt;: I found a GPLv2 !xmpp client
      for !android that works with #facebook called Yaxim.  Unfortunately,
      it's not in the official
      market. &lt;a href="http://identi.ca/notice/22028511"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're looking for an XMPP client for your favorite Android device,
these three might be worth checking out.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://identi.ca/danbri"&gt;danbri&lt;/a&gt;: experimenting with QR Codes as TV
      Test Cards as !XMPP service discovery hack -
      &lt;a href="http://www.flickr.com/photos/danbri/4359291206/"&gt;http://www.flickr.com/photos/danbri/4359291206/&lt;/a&gt;
      &lt;a href="http://identi.ca/notice/22085165"&gt;#&lt;/a&gt;&lt;/p&gt;
    
    &lt;p&gt;&lt;a href="http://identi.ca/danbri"&gt;danbri&lt;/a&gt;: Scanning our TV with 3g iphone;
      it reads !xmpp jid from qrcode at 3 paces
      &lt;a href="http://www.flickr.com/photos/danbri/4360377558/in/photostream/"&gt;http://www.flickr.com/photos/danbri/4360377558/in/photostream/&lt;/a&gt;
      &lt;a href="http://identi.ca/notice/22121217"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I met &lt;a href="http://danbri.org/"&gt;Dan Brickley&lt;/a&gt; at the summit, and he is
doing some really interesting things with remote controlling media
experiences that incorporates XMPP. I highly recommend paying
attention to what he's doing as I suspect you will be seeing more
great stuff.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://identi.ca/tdfischer"&gt;tdfischer&lt;/a&gt;: Dear tokbox: Thanks for
      using XMPP. You make reverse engineering easy. &amp;lt;3, tdfischer
      &lt;a href="http://identi.ca/notice/22042454"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thankfully, since XMPP is an open standard, reverse engineering is
unnecessary. That's the whole point!&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/mathemonkey"&gt;mathemonkey&lt;/a&gt;: Wow! @elance uses
      #xmpp http-bind for "workroom" collaboration service… but it's not
      accessible using ordinary XMPP client or GTalk :-(
      &lt;a href="http://twitter.com/mathemonkey/statuses/9440102285"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wonder if this is because they use a custom authentication mechanism
or if it's just a case of not knowing the credentials to provide. In
any case, it's great to see XMPP in more places. I'm getting a little
tired of seeing so many duplicate implementations of chat services.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/ssethi"&gt;ssethi&lt;/a&gt;: XMPP and One Social Web
      &lt;a href="http://j.mp/cRykDk"&gt;http://j.mp/cRykDk&lt;/a&gt;
      &lt;a href="http://twitter.com/ssethi/statuses/9435702907"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The One Social Web presentation at the summit was one of the most
talked about, but unfortunately I showed up only at the end. I expect
we'll see some good things from this team.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/h4nnes"&gt;h4nnes&lt;/a&gt;: Any recommendations for a xmpp
      client for iphone? im+ keeps crashing here :/
      &lt;a href="http://twitter.com/h4nnes/statuses/9426167172"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I use
&lt;a href="http://www.process-one.net/en/solutions/oneteam_iphone/"&gt;OneTeam&lt;/a&gt; for
the iPhone, which has pretty good support for group chat as well as
normal IM. The recently launched &lt;a href="http://meebo.com"&gt;Meebo&lt;/a&gt; client also
supports XMPP, but it does not support group chat.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/vmlemon"&gt;vmlemon&lt;/a&gt;: Just configured XMPP-based
      FaceBook Chat in Pidgin, and pleased to see that it works as
      advertised. Now if only it supported
      federation... &lt;a href="http://twitter.com/vmlemon/statuses/9384398876"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think Facebook will get there. Server to server communication is one
of the trickiest parts of XMPP, and it makes since that they would
save this part for last. It took Google a while to get federation
working as well.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/dbanes"&gt;dbanes&lt;/a&gt;: Anyone implementing XEP-0277:
      Microblogging over XMPP ?
      &lt;a href="http://twitter.com/dbanes/statuses/9366735983"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I just heard about such an implementation from a
&lt;a href="http://disq.us/bttxl"&gt;comment&lt;/a&gt; on my blog. The site is called
&lt;a href="http://www.buddymob.com/"&gt;BuddyMob&lt;/a&gt;, and apparently is an extended
implemenation of
&lt;a href="http://xmpp.org/extensions/xep-0277.html"&gt;XEP-0277&lt;/a&gt;. Hopefully the
extensions will find their way into the specification as well.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/jprieur"&gt;jprieur&lt;/a&gt;: Archipel, xmpp based
      orchestrator for virtualization
      &lt;a href="http://www.archipelproject.org/"&gt;http://www.archipelproject.org/&lt;/a&gt;
      &lt;a href="http://twitter.com/jprieur/statuses/9332433124"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This looks like an interesting start to virtualization infrastructure
management.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/drunknbass"&gt;drunknbass&lt;/a&gt;: I'm thinking you could
      totally power a game like words with friends with XMPP (openfire)
      &lt;a href="http://twitter.com/drunknbass/statuses/9319148406"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think that would be a great weekend project, and XMPP would be a
perfect transport. With &lt;a href="http://code.stanziq.com/strophe"&gt;Strophe.js&lt;/a&gt;,
HTML5 Canvas, and some JavaScript, this game could be made fairly easily.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/xmppjingle"&gt;xmppjingle&lt;/a&gt;: @pedrosorren Do you
      know Microsoft released an XMPP Gateway for its OCS closed services,
      due high customer demand? #theworldisopen
      &lt;a href="http://twitter.com/xmppjingle/statuses/9282261422"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One day, maybe we'll see MSN and AIM get XMPP gateways just like
Facebook. Sometimes it takes a decade or so for a project to fulfill
its original goals.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/xmppjingle"&gt;xmppjingle&lt;/a&gt;: Facebook announced that
      their are building Mobile APIs, why not just expose its services
      over XMPP? The Chat works extremely well so far
      &lt;a href="http://twitter.com/xmppjingle/statuses/9282119001"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think it makes a lot of sense to have a native XMPP interface to
these APIs. For example, Gmail has shown that even though its mail
interface doesn't map cleanly to IMAP, there is enormous value in
leveraging IMAP clients. Sure, it takes a little thought and planning,
but the end result is well worth it.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/rektide"&gt;rektide&lt;/a&gt;: what do #buzz, #xmpp, and to
      a degree #wave have in common? failure to abide the most
      basic/essential axiomatics of the #web; the
      uri. &lt;a href="http://twitter.com/rektide/statuses/9244312851"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;URIs are great and are used in XMPP where they make sense. I think
most people would agree that e-mail style addresses are easier to use
for humans than most URIs, though. XMPP is not a solution to all
problems, and neither is HTTP.&lt;/p&gt;

&lt;p&gt;That said, I've seen several efforts now to bridge some of the gap
between HTTP and XMPP - sending stanzas through REST APIs, exposing
chat rooms as web pages, etc.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://twitter.com/gashcrumb"&gt;gashcrumb&lt;/a&gt;: just a little bit closer
      to having a proper mock XMPP server to run unit tests against.
      nice! &lt;a href="http://twitter.com/gashcrumb/statuses/9198982133"&gt;#&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I hope this will be open sourced. There is unfortunately little in the
way of specific XMPP testing tools. This is often brought up at the
XMPP summits as something most of us want and need, but so far it has
proved more complicated that it looked.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/wQPc3BFpd3I" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2010/02/22/bitesized-xmpp-news-4/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>XMPP 101: A Video From the XMPP Summit</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/usrsY1YrdVI/" />
    <id>tag:metajack.im:/2010/02/16/xmpp-101-a-video-from-the-xmpp-summit/</id>
    <updated>2010-02-16T21:04:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>The 8th XMPP Summit has come and gone, and it was a blast. I tried to record all the excellent talks from the FOSDEM XMPP dev room, but I only managed to record the very first one. Watch below as Remko gives a good overview of all things XMPP. This video...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;The &lt;a href="http://xmpp.org/summit/summit8.shtml"&gt;8th XMPP Summit&lt;/a&gt; has come
and gone, and it was a blast. I tried to record all the excellent
talks from the &lt;a href="http://fosdem.org"&gt;FOSDEM&lt;/a&gt; XMPP dev room, but I only
managed to record the very first one. Watch below as
&lt;a href="http://el-tramo.be"&gt;Remko&lt;/a&gt; gives a good overview of all things XMPP.&lt;/p&gt;

&lt;p&gt;&lt;video src='http://metajack.im/videos/summit8-xmpp101.ogv' controls='controls' autobuffer='autobuffer' width='640' height='480'&gt;
This video requires a browser that supports HTML5 video in &lt;a
href='http://theora.org/'&gt;Theora&lt;/a&gt; format. Support open, royalty-free
multimedia codecs!
&lt;/video&gt;&lt;/p&gt;

&lt;p&gt;If you'd like to learn more about XMPP from Remko, he and some others
&lt;a href="http://www.amazon.com/XMPP-Definitive-Real-Time-Applications-Technologies/dp/059652126X/?tag=metajack-20"&gt;wrote a
book&lt;/a&gt;
as well.&lt;/p&gt;

&lt;p&gt;I'll bring some better equipment to the next XMPP Summit so that more
of these videos can be published.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/usrsY1YrdVI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2010/02/16/xmpp-101-a-video-from-the-xmpp-summit/</feedburner:origLink></entry>
  
  
  
  <entry>
    <title>asmack: XMPP Library for Android Developers</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/metajack/~3/9xyTlXg45rs/" />
    <id>tag:metajack.im:/2010/02/10/xmpp-library-for-android-developers/</id>
    <updated>2010-02-10T23:30:00Z</updated>
    <updated />

    <author>
      <name>Jack Moffitt</name>
      <uri>http://metajack.im</uri>
      <email>jack@metajack.im</email>
    </author>

    <summary>Mobile XMPP development came up over and over at the recent XMPP Summit. With several Java libraries to choose from for desktop XMPP development, one would imagine that these would work easily on Android, which is also Java based. Unfortunately, for a variety of reasons, the currently Java libraries don't seem...</summary>
    <content type="html" xml:lang="en" xml:base="http://metajack.im/">
      &lt;p&gt;Mobile XMPP development came up over and over at the recent &lt;a href="http://xmpp.org/summit/summit8.shtml"&gt;XMPP
Summit&lt;/a&gt;. With several Java
libraries to choose from for desktop XMPP development, one would
imagine that these would work easily on Android, which is also Java
based. Unfortunately, for a variety of reasons, the currently Java
libraries don't seem to work. Thankfully, the
&lt;a href="http://buddycloud.com/"&gt;BuddyCloud&lt;/a&gt; team has released
&lt;a href="http://asmack.googlecode.com"&gt;asmack&lt;/a&gt;, which is a fork of the
&lt;a href="http://www.igniterealtime.org/projects/smack/"&gt;SMACK&lt;/a&gt; library
customized for the Android platform.&lt;/p&gt;

&lt;p&gt;If you're thinking of getting into mobile XMPP development on Android,
you should definitely check this out.&lt;/p&gt;
    &lt;img src="http://feeds.feedburner.com/~r/metajack/~4/9xyTlXg45rs" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://metajack.im/2010/02/10/xmpp-library-for-android-developers/</feedburner:origLink></entry>
  
</feed>
