<?xml version="1.0" encoding="iso-8859-1" ?>

<rss version="2.0">
<channel>
<title>Eric.Weblog()</title>
<link>http://software.ericsink.com/</link>
<description>Thoughts about software from yet another person who invented the Internet</description>
<copyright>Copyright 2001-2010 Eric Sink. All Rights Reserved</copyright>
<generator>mine</generator>


<item>
<title>Video of my presentation from OSCON 2010</title>
<guid>http://software.ericsink.com/entries/oscon_2010_video.html</guid>
<link>http://software.ericsink.com/entries/oscon_2010_video.html</link>
<pubDate>Sat, 14 Aug 2010 08:56:34 CST</pubDate>
<description>
<![CDATA[
<p><img width=324 height=317 src="http://software.ericsink.com/entries/1791_image001.jpg"
align=right hspace=12>For those who are interested, we've posted the video of
my presentation at OSCON on <a href="http://www.youtube.com/user/SourceGear">YouTube</a>.</p>

<p>I had a few problems when displaying my slide deck at the
conference.&nbsp; When I'm speaking at an event, I usually like to use whatever
equipment is provided.&nbsp; To be assured of compatibility between my MacBook Pro
and the projector, I would need to bring like [what seems like] 23 different
video adapters.&nbsp; It's easier to just bring my slide deck on a thumb drive.</p>

<p>The email from the conference organizers told us there would
be "Dell laptops" in the room.&nbsp; I remember thinking how boneheaded it was of
them to be running Windows at the Open Source convention, but I complied and
brought my slides as a PowerPoint file.</p>

<p>And then I got there and discovered that I was the one being
a bonehead for assuming that "Dell laptop" == "Windows + Office".&nbsp; Actually, those
Dell laptops were running Linux with OpenOffice.org.&nbsp; Anyway, OO.org imported
my .pptx file, but it botched the formatting in some rather unexpected and
entertaining ways.</p>

<h3>Moving Forward</h3>

<p>Since OSCON ended three weeks ago, folks on our team have
been taking their summer vacations, but we've still made some good progress:</p>

<ul style='margin-top:0in' type=disc>
 <li >After hearing lots of (well deserved) complaints from
     people trying to build 64-bit Veracity, we expanded our continuous
     integration build farm to do both 32 and 64 bit builds, debug and release,
     on all our platforms.<br>
     <br>
 </li>
 <li >We had just missed our goal of dogfooding Veracity's
     bug-tracking features before OSCON, but after another round of
     improvements to the Web UI stuff, now we're using Veracity not just for
     source control, but also for project tracking.<br>
     <br>
 </li>
 <li >We implemented Mercurial-style version numbers.&nbsp; They're
     specific to one instance of a repo, but still kind of handy.<br>
     <br>
 </li>
 <li >We started work on letting Veracity run through mainstream
     web servers (instead of only using its embedded web server).<br>
     <br>
 </li>
 <li >We did lots of bug fixes, including some deep polishing
     and testing work on patterns for include/exclude settings.<br>
     <br>
 </li>
 <li >I've been working in a private branch, focused mostly on
     improving performance:<br>
     <br>
 </li>
 <ul style='margin-top:0in' type=circle>
  <li >Every changeset record has a blob list which is used for
      making things like push/pull and incremental indexing efficient.&nbsp; For
      changesets which are a DAG merge (more than one parent), we need to
      normalize that blob list to ensure that the exact same list is
      constructed on each side of the merge.&nbsp; Our previous normalization code
      was additive.&nbsp; It walked the DAG back to the lowest common ancestor and
      added any blob which wasn't present on both sides.&nbsp; Gradually, this
      caused those blob lists to keep getting bigger and bigger, which turned
      out to be a nasty performance probem that gets worse as the repo grows.&nbsp;
      So, I switched the normalization code to remove any blob which was
      present in the blob list of any ancestor.&nbsp; This is a lot harder to
      calculate, but it results in a much tighter list.<br>
      <br>
  </li>
  <li >The changeset record for a database DAG includes a
      delta.&nbsp; When that changeset is a merge, the delta is calculated against
      the lowest common ancestor of the two parents.&nbsp; However, when it comes
      time to store that delta for later use by the indexing code, it would be
      better to calculate an equivalent delta against one of the two parents.<br>
      <br>
  </li>
  <li >In a Veracity database, every record has two fields:&nbsp;
      recid and rectype.&nbsp; However, some our databases just don't need both of
      these fields.&nbsp; For example, recid is really only useful if you plan to
      modify records, but the audit DBs are filled with record that never get
      modified.&nbsp; Similarly, if a DB only has one record type, we don't need
      every single record to have a field reminding us what the name of that
      type is.&nbsp; So, I made a bunch of changes to allow a Veracity DB to exclude
      one or both of these fields.&nbsp; Eliminating the need to store, retrieve,
      index and obey these superfluous fields resulted in a nice perf increase.<br>
      <br>
  </li>
  <li >I went through and made dozens of little optimizations in
      the indexer.&nbsp; Remember to always use SQLite's prepared statements in
      loops.&nbsp; Make sure every blob getting indexed only gets loaded once.&nbsp; Tune
      the hash table which represents JSON objects.<br>
      <br>
  </li>
  <li >I found and fixed a few GC rooting bugs in our SpiderMonkey
      code.&nbsp; BTW, I can't wait until we can upgrade to <a
      href="http://blog.mozilla.com/rob-sayre/2010/08/02/mozillas-new-javascript-value-representation/">new
      and improved version</a> of the JS engine.&nbsp; I greatly dislike the fact
      that SpiderMonkey doesn't have a wider int.<br>
      <br>
  </li>
  <li >Unfortunately, some of my changes break compatibility, so
      I've been writing a script to migrate all our data.&nbsp; This week I'll merge
      with the trunk and we'll do what we call a "repository reboot".<br>
      <br>
  </li>
  <li >This firehose of detail is mostly just the ramblings of
      yet another blogger who is under the delusion that anybody cares about
      the mundane elements of his day.&nbsp; Which reminds me, Thursday morning for
      breakfast I had iced coffee with an omelet made of red peppers,
      Portobello mushrooms, and provolone.&nbsp; Anyway, on the off chance that
      anything here wants to get discussed, meet me on the <a
      href="http://www.sourcegear.com/veracity/mailinglist.html">Veracity
      mailing list</a>.<br>
      <br>
  </li>
 </ul>
</ul>

<p style='margin-left:.25in'>After things settle down just a
bit more, we'll be ready to start publishing nightly tarballs.</p>
]]>
</description>
</item>

<item>
<title>Slides from my presentation at OSCON 2010</title>
<guid>http://software.ericsink.com/entries/oscon_2010_slides.html</guid>
<link>http://software.ericsink.com/entries/oscon_2010_slides.html</link>
<pubDate>Tue, 27 Jul 2010 09:47:30 CST</pubDate>
<description>
<![CDATA[
<p>Several folks have asked for a copy of the slides from my
talk at OSCON last week, so <a
href="http://software.ericsink.com/entries/oscon_2010.pdf">here they are</a> (PDF, 2
MB).&nbsp; They might be a little hard to follow without the narrative that goes
with them.&nbsp; A videotape of the talk will be posted in a week or so.</p>

<p>Thanks to all who attended my presentation.&nbsp; The turnout was
great, and folks seemed quite enthusiastic about Veracity.</p>

<p>My apologies to the <a href="http://syncwith.us/">Prophet
and SD</a> developers (one of whom attended my talk) for neglecting to mention
them.&nbsp; A silly oversight on my part.</p>

<p>I was especially appreciative of the attendance and
expressions of support from several members of the original Subversion
development team.&nbsp; Subversion is one of the most successful version control
tools ever, and I watched its early development closely enough to develop an
admiration for the folks who built it.&nbsp; So it was a very pleasant surprise to
find a few "celebrities" in attendance at my session.&nbsp; <b>:-)</b></p>
]]>
</description>
</item>

<item>
<title>Veracity Technology Overview</title>
<guid>http://software.ericsink.com/entries/veracity_tech_overview.html</guid>
<link>http://software.ericsink.com/entries/veracity_tech_overview.html</link>
<pubDate>Mon, 19 Jul 2010 15:13:45 CST</pubDate>
<description>
<![CDATA[
<p>When I encounter a new piece of software, I usually ask,
"What's in it?"</p>

<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
 style='border-collapse:collapse;border:none'>
 <tr>
  <td colspan=2 valign=top style='border:solid windowtext 1.0pt;background:
  #D9D9D9;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p align=center style='text-align:center'><b>Tools and
  technologies we've been using to build Veracity</b></p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>C</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>The core library and the command-line app are written
  entirely in C.&nbsp; Some folks won't like our coding conventions.&nbsp; I'll probably
  do a whole blog entry sometime to ((apologize for) &amp;&amp; (defend)) the
  liberties we've taken with the C preprocessor.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>JavaScript</p>
  <p>jQuery</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>On the browser side of things, Veracity is a web app
  written in JavaScript using jQuery. </p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>SVG</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Burn down charts and other web graphics are done using
  SVG.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>JSON</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Veracity uses JSON all over the place.&nbsp; All serialized
  structures in the repo are JSON.&nbsp; Database records and templates are JSON.&nbsp;
  We have a bunch of C code for parsing JSON, writing JSON, and dealing with JSON-like
  data in memory.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>SQLite</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>We use SQLite in several places as a more scalable disk
  format, and also as an index. </p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Mongoose</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>The Veracity command-line app has an embedded web server
  for personal use.&nbsp; It's based on Mongoose.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Curl</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>The client side of push/pull is done by calling libcurl.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>UTF-8</p>
  <p>ICU</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Early on in the Veracity project, we did a lot of work to
  make sure that stuff was done right with respect to Unicode.&nbsp; Our preferred
  encoding is UTF-8.&nbsp; The ICU library from IBM has been helpful in a number of
  places.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>REST</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>The Veracity web API is very RESTy.&nbsp; And of course,
  everything serialized over the network is in JSON.&nbsp; </p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>CMake</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Our build system is CMake, with which we have a love/hate
  relationship.&nbsp; We love it because it generates makefiles, Xcode projects or
  Visual Studio solutions.&nbsp; We hate it because its language makes Forth look
  sane.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>CTest</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>We have a huge suite of automated tests.&nbsp; CMake's
  integrated test stuff actually works pretty well.&nbsp; Just run 'ctest' at the
  top level directory.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>SpiderMonkey</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>A lot of our tests are written in Javascript.&nbsp; We have a
  command-line executable called 'vscript' which is basically the Spidermonkey
  Javascript engine glued to the main Veracity library.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Continuous Integration</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Our CI system system rebuilds from scratch and runs the
  main tests after every checkin, on Mac, Linux and Windows.&nbsp; Results are
  published to an internal web page and sent to the team by email.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Scrum</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>The more we use Scrum, the more I like it.&nbsp; We're patient
  with ourselves.&nbsp; We just try to get a little better in our Scrum practices
  each iteration.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>gcov</p>
  <p>lcov</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Nightly builds run the entire test suite with code
  coverage done by gcov.&nbsp; Our current coverage level is 81%.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>vcdiff</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>For binary deltas, Veracity uses the algorithm described
  in RFC 3284.&nbsp; (Actually, the use of binary deltas is currently turned off by
  default, so if you notice that repositories seem big, that's why.&nbsp; All the
  plumbing is done.&nbsp; We're just not using it yet.)&nbsp; Anyway, we've got our own
  implementation of vcdiff.&nbsp; We may consider switching to Google's open-vcdiff
  at some point if its performance is better.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>zlib</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>For simple non-deltified compression in repo
  implementations, Veracity uses zlib.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Valgrind</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>When coding in C, valgrind is indispensable.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Shark</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>I do most of my coding on the Mac, so I use the Shark
  profiler.&nbsp; Very cool.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>emacs</p>
  <p>vim</p>
  <p>Eclipse</p>
  <p>Visual Studio</p>
  <p>bash</p>
  <p>gdb</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Every developer on our team chooses their own tools.&nbsp; We
  have a good representation of most of the major religions.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Firefox</p>
  <p>Safari</p>
  <p>Chrome</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Similarly, every developer chooses their own web browser.&nbsp;
  I'm not sure what feelings to have upon noticing that nobody is using
  Internet Explorer.&nbsp; It seems so wrong. &nbsp;And yet, so right.</p>
  </td>
 </tr>
 <tr>
  <td colspan=2 valign=top style='border:solid windowtext 1.0pt;border-top:
  none;background:#D9D9D9;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p align=center style='text-align:center'><b>A few notable
  things we'll probably be using later</b></p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>.NET</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Even though Veracity was not built fundamentally on the
  .NET platform, we are committed to providing excellent support for Windows
  developers.&nbsp; Visual Studio integration is a high priority.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Java</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Similarly, we didn't use Java to build the core libraries
  for Veracity, but we plan to deliver excellent integration into the Java
  world, including an Eclipse plugin.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>IIS</p>
  <p>Apache</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>The embedded web server is fine for personal use on the
  desktop, but large teams will want to run a real web server for their central
  repository.&nbsp; We designed for this case early, but have not yet implemented
  something like an IIS plugin. </p>
  </td>
 </tr>
 <tr>
  <td colspan=2 valign=top style='border:solid windowtext 1.0pt;border-top:
  none;background:#D9D9D9;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p align=center style='text-align:center'><b>A few notable
  things we are NOT using (and maybe never will)</b></p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>C++</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Here's another blog article I need to write.&nbsp; Basically,
  we only considered two choices:&nbsp; C, and the C-like subset of C++.&nbsp; We chose
  plain C.&nbsp; I just wish the Microsoft C compiler supported C99.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Flash</p>
  <p>Silverlight</p>
  <p>GWT</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>We seriously considered other ways of building our web
  apps.&nbsp; We ended up choosing basic HTML/CSS/jQuery/Ajax.&nbsp; No regrets, but I
  sometimes wonder how things are going for people using GWT.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>NSPR</p>
  <p>APR</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>Sorry folks, in an apparent fit of NIH syndrome, we wrote
  our own portability layer. And I am completely unrepentant.</p>
  </td>
 </tr>
 <tr>
  <td valign=top style='border:solid windowtext 1.0pt;border-top:none;
  padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>XML</p>
  </td>
  <td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;
  border-right:solid windowtext 1.0pt;padding:5.75pt 5.75pt 5.75pt 5.75pt'>
  <p>JSON won.&nbsp; What can I say?&nbsp; I just like curly braces a lot
  more than angle brackets.</p>
  </td>
 </tr>
</table>

<p>&nbsp;</p>
]]>
</description>
</item>

<item>
<title>Veracity screenshot:  Burndown Chart</title>
<guid>http://software.ericsink.com/entries/burndown.html</guid>
<link>http://software.ericsink.com/entries/burndown.html</link>
<pubDate>Thu, 15 Jul 2010 10:13:59 CST</pubDate>
<description>
<![CDATA[
<p><a href="http://software.ericsink.com/entries/veracity_early.html">Yesterday</a>
I tried to describe Veracity in a thousand words.&nbsp; Today, let's try a picture.</p>

<p><a href="http://software.ericsink.com/entries/veracity_burndown.png"><span
style='color:windowtext;text-decoration:none'><img border=0 width=574
height=308 src="http://software.ericsink.com/entries/1786_image001.jpg"></span></a></p>

<p>Veracity's distributed work item tracking feature is one of
several things which is built on that "decentralized database" I mentioned.&nbsp;
This screenshot is Veracity displaying a burndown chart for a Scrum iteration.</p>

<p>The thing on the left is an activity stream.&nbsp; It's a
Twitter-like feature with other notifications mixed in, such as code checkins
and comments on work items.</p>
]]>
</description>
</item>

<item>
<title>Veracity:  The next step in DVCS</title>
<guid>http://software.ericsink.com/entries/veracity_early.html</guid>
<link>http://software.ericsink.com/entries/veracity_early.html</link>
<pubDate>Wed, 14 Jul 2010 08:00:00 CST</pubDate>
<description>
<![CDATA[
<p>One week from today, at the <a
href="http://www.oscon.com/oscon2010">O'Reilly Open Source Convention</a>,
SourceGear will be making a big announcement.&nbsp; Today I'm giving you an early
preview.&nbsp; We've been building something new.&nbsp; <b>:-)</b></p>

<ul style='margin-top:0in' type=disc>
 <li >It's called Veracity.</li>
 <li >It's a Distributed Version Control System (DVCS), somewhat
     like Mercurial or Git.</li>
 <li >It has some cool new capabilities no other DVCS has.</li>
 <li >It will be open source, released one week from today under
     the Apache License, Version 2.0.</li>
</ul>

<p>This project has been consuming the bulk of my time, and I
am glad to finally be able to write and speak about it.&nbsp; I'll have a lot to say
going forward, but for today I just want to answer some questions we anticipate
folks will be asking.</p>

<h2>Why build yet another DVCS?</h2>

<p>At OSCON next week we will be referring to Veracity as "the
next step in DVCS".&nbsp; This description may sound a bit audacious, but it
describes exactly what we have built Veracity to be.</p>

<p>Git, Mercurial and Bazaar are all great, but we don't think
they are the last word. This model of distributed development is the future of
our industry. Things are just getting started.&nbsp; We're building Veracity to push
forward.</p>

<p>So let me try to explain how our vision is different from
what is available from the popular DVCS tools today.</p>

<p>Please understand that my intent here is not to criticize
existing tools or start a war with their fans (especially because Veracity
needs to simmer a bit longer before it's ready). I simply know that the easiest
way to explain something new is to compare it to something well-known.</p>

<h3>Decentralized Database</h3>

<p>Veracity goes beyond versioning of directories and files to
provide management of records and fields, with full support for pushing,
pulling and merging database changesets, just like source tree changesets.</p>

<p>Veracity's decentralized, template-driven database is used
for all kinds of administrative data, including user accounts, tags, commit
messages, and history. This database is also the platform on which we are
building features like work item tracking.</p>

<h3>User accounts</h3>

<p>Existing DVCS tools have no real concept of user accounts. Enterprise customers need robust administration features like auditing and permissions.
Veracity supports these features with a user system built on its decentralized
database engine.</p>

<h3>Pluggable storage layers</h3>

<p>Veracity wraps all the actual storage of a repository in an
API. This allows different implementations to offer different tradeoffs. For
example, an organization may want to use an enterprise SQL database to store
repository data on a central server, while developer desktop machines may use a
simpler filesystem-oriented storage engine.&nbsp; You can push and pull changesets
across different storage implementations seamlessly.</p>

<h3>Hash functions</h3>

<p>Just as with Mercurial and Git, Veracity identifies all
repository objects using a cryptographic hash of the contents. Veracity
supports SHA1 like current tools, but is ready for the future with full support
for SHA2 and Skein, at 256 or even 512 bits.</p>

<p>Veracity's default hash is SHA1.&nbsp; Our dogfooding repo is
SHA2/256.</p>

<h3>Robust tracking for rename and directories</h3>

<p>Like Bazaar, Veracity assigns every repository object an ID
which remains constant when the object is renamed or moved to a different path.
This handles the situation where a developer changes both the contents of a
file and its path in the same transaction, and is a critical feature for robust
merge operations.</p>

<p>Veracity also tracks directories as first-class repository
objects, just like files.</p>

<h3>Cross-Platform C</h3>

<p>From the beginning, we wanted to make it easy to integrate
Veracity into all kinds of other systems on a wide variety of platforms. So we
wrote everything in C, with Windows, Mac OS and Linux all on equal footing. We
love Python too, but C is a lowest common denominator that can be ported or integrated
everywhere we need to go.</p>

<h3>Apache License Version 2.0</h3>

<p>Current DVCS tools do not yet have much penetration with
enterprise customers. &nbsp;This is largely due to lack of features and company
infrastructure.&nbsp; But even if Git or Mercurial were enterprise-ready in every
other way, many companies will hesitate because of the GPL.</p>

<p>We chose the Apache License Version 2.0 (instead of the GPL)
because we wanted there to be no obstacles for Veracity to be adopted in
commercial and enterprise scenarios.</p>

<h2>Open Source? How are you guys gonna make money?</h2>

<p>The core of Veracity will be open source, but we do plan to
sell add-on products built on the core.</p>

<h2>Does this news mean you are abandoning Vault?</h2>

<p>Heck no. Vault is like, 100% of our revenue. And there are
still thousands of teams on SourceSafe that need to be rescued from their
plight.&nbsp; <b>:-)</b></p>

<p>We looked hard at the notion of morphing Vault into a DVCS
and decided it just isn't feasible.&nbsp; If we had forced the square peg into the
round hole, the result would either have fallen short of being a true DVCS or
it would have been an incredibly painful upgrade for Vault customers.</p>

<p>Vault will continue to be supported and improved for
centuries.</p>

<h2>Is Veracity ready for people to actually use?</h2>

<p>Not yet.</p>

<p>We are dogfooding Veracity here at SourceGear, but if anybody
else tries to use it, they'll be frustrated. &nbsp;File formats, command syntax and
APIs are all still in flux.&nbsp; We have a lot of stuff to finish up before we give
it a 1.0 version number.</p>

<p>In the meantime, if you need a DVCS that is ready to use
now, Mercurial, Git and Bazaar offer you three great choices.</p>

<h2>How can I give feedback?</h2>

<p>My blog currently does not have a comments feature, but I
would still welcome feedback from anyone who has something to say.&nbsp; If you want
to say something privately, feel free to email me directly (<a
href="mailto:eric@sourcegear.com">eric@sourcegear.com</a>).&nbsp; Or you can use
Twitter (<a href="http://www.twitter.com/eric_sink">eric_sink</a>).</p>

<p>We'll be hosting a project mailing list which will be opened
next week when the source is released.&nbsp; And we'll have a "modern" website for
the Veracity community a bit later.</p>

<h2>Coming Soon...</h2>

<p>Remember, this is open source stuff, so it's not real until
the source is actually available.&nbsp; That'll happen a week from today with the "official"
announcement.&nbsp; For now, I just wanted to let you know what's coming.</p>
]]>
</description>
</item>

<item>
<title>Going to OSCON</title>
<guid>http://software.ericsink.com/entries/going_to_oscon.html</guid>
<link>http://software.ericsink.com/entries/going_to_oscon.html</link>
<pubDate>Wed, 07 Jul 2010 15:37:00 CST</pubDate>
<description>
<![CDATA[
<p>Hey folks, I just wanted to let my readers know that I'll be
at the O'Reilly Open Source Convention (<a href="http://www.oscon.com/oscon2010">OSCON</a>)
a couple weeks from now in Portland, Oregon.&nbsp; SourceGear will have an exhibitor
booth with, as usual, the very coolest free T-shirts.</p>

<p>Stop by and say hello!&nbsp; <b>:-)</b></p>
]]>
</description>
</item>

<item>
<title>Two Weeks with an iPad</title>
<guid>http://software.ericsink.com/entries/two_weeks_with_an_ipad.html</guid>
<link>http://software.ericsink.com/entries/two_weeks_with_an_ipad.html</link>
<pubDate>Mon, 19 Apr 2010 09:08:54 CST</pubDate>
<description>
<![CDATA[
<p>I mostly bought an iPad just to see what the hype was all
about.&nbsp; I never expected to actually use it, for two reasons:</p>

<ul style='margin-top:0in' type=disc>
 <li >The iPad is a tweener, like a 6'5"" guy who wants to play power
     forward in the NBA.&nbsp; It's just the wrong size.&nbsp; There isn't enough space
     between my phone and my laptop for this thing.</li>
 <li >The iPad is just another character in the story Apple
     started telling back in 1985, "the computer for the rest of THEM".&nbsp; I
     think it's kind of cute that people who don't know how to deal with
     non-blocking socket I/O can still use the Web.</li>
</ul>

<p>So, even though this thing was not designed for me, after
two weeks with my iPad, I am surprised to admit that I really like it.</p>

<p>Surprised and a little embarrassed.&nbsp; This challenges my
geekhood.&nbsp; I mean really, what's wrong with me?&nbsp; The next thing you know I'll be
giving up my RPN calculator.&nbsp; Or using Finder instead of bash.&nbsp; How far is this
spiral toward normalcy going to go?</p>

<p>But I can't help it.&nbsp; The iPad is just really pleasant to
use:</p>

<ul style='margin-top:0in' type=disc>
 <li >The email UI is nearly perfect.</li>
 <li >Using the web is far nicer than my Nexus One or my iPod
     Touch.&nbsp; The larger screen makes all the difference.</li>
 <li >It's really fast.&nbsp; Everything on my netbook feels like it
     moves at 1997 speeds.</li>
 <li >Instant-on is a critical feature.&nbsp; I hate waiting for my
     netbook to boot or unhibernate.</li>
 <li >Physically the iPad is a lot more convenient to grab than
     my laptop or even my netbook.&nbsp; It never feels unwieldy.</li>
 <li >The battery life is surprisingly good.</li>
</ul>

<p>Not that the iPad is perfect:</p>

<ul style='margin-top:0in' type=disc>
 <li >I really need an openvpn client.</li>
 <li >Getting the mail client to talk with my IMAP server was
     harder than it should have been.</li>
 <li >I still haven't figured out how to make the calendar app
     sync with Google Apps for my domain.</li>
 <li >I want Flash.</li>
 <li >Nobody has the Apple iPad Case in stock, and I really want
     one.&nbsp; This isn't really a criticism of the device itself, but it's really
     exasperating and I want to vent.</li>
</ul>

<p>Bottom line, for me the iPad is one of those anomalies of
theory and practice.&nbsp; In theory, I should hate this thing.&nbsp; In practice, it
competes with four other excellent devices for my attention, and it wins a lot.</p>
]]>
</description>
</item>

<item>
<title>Twitter!  Curse your sudden but inevitable betrayal!</title>
<guid>http://software.ericsink.com/entries/dual_class_computing.html</guid>
<link>http://software.ericsink.com/entries/dual_class_computing.html</link>
<pubDate>Wed, 31 Mar 2010 08:27:48 CST</pubDate>
<description>
<![CDATA[
<p>Last night I saw <a
href="http://sachin.posterous.com/the-finder-is-dead-soon-a-pc-wont-have-files">this
article</a>, which basically says the one day soon computers won't present the
user with the ability to manipulate "files" anymore.</p>

<p>Suddenly, I had stuff to say.&nbsp; But I've been using Twitter,
which limits me to 140 characters.&nbsp; So, I Tweeted this:</p>

<p style='margin-left:.5in'><i>We're heading toward two classes
of computers: one for people like me, and one for people like my Mom.</i></p>

<p>(And BTW, Mom, usually when I mention you on the Internet,
I'm not really talking about you.&nbsp; You're a metaphor for "normal people", those
who use computers to get things done, as opposed to geeks like me, who use
computers just because they are shiny.)</p>

<p>Anyway, I thought the tweet would be enough.&nbsp; It wasn't.</p>

<p>In the beginning, we were the only ones here.&nbsp; Normal people
didn't use computers at all.&nbsp; Only the geeks used computers, and we certainly
weren't using them to get anything done.</p>

<p>I remember my Mom saying that she would never use a
computer.&nbsp; (Mom, this one is actually you.)&nbsp; And I certainly can't blame her
for thinking that at the time.&nbsp; She had no reason to see computers as a way of
getting things done.&nbsp; All she knew is that I would periodically run into the
family room to announce to my parents that I had just shaved three more
instructions out of the main loop so now my graphics move faster.&nbsp; And Mom just
wanted me to at least stack my Byte magazines in the corner so she could get
the vacuum cleaner through.</p>

<p>Fast forward to today.&nbsp; Computers, by and large, are still
designed for geeks.&nbsp; This is why we all buy T-shirts that say "No, I will not
fix your computer".&nbsp; The genius of the iPad is that it cannot get things like
viruses.&nbsp; It is a closed platform.&nbsp; You can't put apps on it.&nbsp; You can't write
and distribute software for it without Apple's permission.&nbsp; This is why geeks
hate it and normal people will love it.</p>

<p>Your Mom wants a computer she doesn't have to ask you to
fix.&nbsp; She is willing to trade power and flexibility to get simplicity.&nbsp; The
iPad is another major step.</p>

<p>I find this interesting because it raises all kinds of
questions:</p>

<ul style='margin-top:0in' type=disc>
 <li >The industry is finally ready to sell things that make
     geeks feel frustrated instead of things that make normal people feel
     helpless.&nbsp; What does this mean for geeks and our role in society?<br>
     <br>
 </li>
 <li >How is the terminology going to shake out?&nbsp; Surely we need
     two different names?&nbsp; Things that geeks use should probably still be
     called "computers".&nbsp; What should we call the class of devices that help
     normal people manage their Amazon wish list?<br>
     <br>
 </li>
 <li >We geeks will become the minority market niche.&nbsp; How will
     this affect the pricing of things?&nbsp; Will there be sufficient economies of
     scale to sell computers to geeks at margins that are tolerable to both
     buyer and seller?<br>
     <br>
 </li>
 <li >What kinds of computers/devices will get caught in the
     middle and suddenly have no place in the world?<br>
     <br>
 </li>
 <li >What classes of users are going to be special cases?&nbsp; I'm
     talking about folks that are not geeks but that for some other reason
     cannot accept the power/simplicity tradeoff of devices designed for normal
     people.</li>
</ul>

<p>This is a major wave of change.&nbsp; I don't know the answers to
these questions.&nbsp; The only thing that seems clear to me is that Microsoft will
miss this wave just like they missed the last one.</p>
]]>
</description>
</item>

<item>
<title>Better late than never?</title>
<guid>http://software.ericsink.com/entries/late_to_twitter.html</guid>
<link>http://software.ericsink.com/entries/late_to_twitter.html</link>
<pubDate>Sat, 27 Mar 2010 08:19:43 CST</pubDate>
<description>
<![CDATA[
<p>OK, so I finally created a <a
href="http://twitter.com/eric_sink">Twitter account</a>.</p>

<p>I might have done this earlier if there weren't some nitwit
squatting the "ericsink" user name.&nbsp; I considered registering as the National
Waffle Institute and posting "French Toast Sucks" as my first tweet, but in the
end I settled for "eric_sink".</p>

<p>I've been on Facebook for quite a while.&nbsp; I apologize for
turning down all the friend requests from blog readers, but I mostly just use
Facebook for family stuff.&nbsp; Unfortunately that means Facebook is a lousy place
for me to make snarky comments about the technology world.&nbsp; Most of my friends
there either don't get it or don't care.</p>

<p>But Twitter should fill this hole in my life nicely.&nbsp; Now,
when it occurs to me that my German Shepherd is smarter, bigger and
better-looking than Spolsky's <a
href="http://www.joelonsoftware.com/items/2010/03/14.html">husky</a> will ever
be, I can just let the world know immediately, and everyone will be better off.</p>

<p>At first I was worried about the length limit, but I've been
practicing, and it is surprising how often 140 characters are enough.&nbsp; For
example, this one leaves plenty of room to spare:</p>

<p style='text-indent:.5in'>Everything Borland ever created is
now owned by someone who will destroy it.</p>

<p>But some of my practice tweets didn't go so well.&nbsp; This one
is way over the limit, but I could probably make the point without being so
wordy:</p>

<p style='margin-left:.5in'>Imagine what the software industry
would be like if Bjarne Stroustrup had chosen a career with less potential for
harm to the world, such as the intentional destruction of all tropical
rainforests.</p>

<p>For me Twitter looks like a solution at the intersection of
two problems.&nbsp; With verbal remarks, it's easy to speak before thinking, but it
just doesn't scale.&nbsp; With blogging, I can reach lots of people, but I always
end up thinking carefully before I post.&nbsp; Twitter allows me to spew hasty,
poorly-thought-out observations to a potentially worldwide audience.&nbsp; I'm
obviously a newbie, but that seems like a great feature.</p>
]]>
</description>
</item>

<item>
<title>Obstacles to an enterprise DVCS</title>
<guid>http://software.ericsink.com/articles/vcs_trends.html</guid>
<link>http://software.ericsink.com/articles/vcs_trends.html</link>
<pubDate>Fri, 29 Jan 2010 07:00:00 CST</pubDate>
<description>
<![CDATA[
<p>On 26 January 2010 I gave a presentation to <a
href="http://softwaregr.org/">Software GR</a>.&nbsp; The talk was an overview of
several trends that we have seen in the version control tools market over the
last 40 years.&nbsp; I often like to follow a talk like this by publishing the same
content here on my blog in the form of a complete article.&nbsp; This time I think
I'll just eliminate a lot of the <a
href="http://www.urbandictionary.com/define.php?term=tl%3Bdr">tldr</a> problem
and summarize the highlights:</p>

<ul style='margin-top:0in' type=disc>
 <li  style='margin-bottom:6.0pt'>The two big trends in version
     control today are Integration and Decentralization.</li>
 <li  style='margin-bottom:6.0pt'>Integration is driven by ALM.&nbsp;
     It is the desire to have all tools used by a development team fully
     integrated together.</li>
 <li  style='margin-bottom:6.0pt'>Decentralization is driven by
     the recent wave of DVCS tools like Git and Mercurial.&nbsp; They offer
     compelling benefits such as performance, a different kind of scalability,
     and more flexible workflows.</li>
 <li  style='margin-bottom:6.0pt'>The ALM trend is happening in
     the enterprise market.&nbsp; Enterprises want everything integrated with
     everything else, and they want everything to support their ability to
     enforce process.</li>
 <li  style='margin-bottom:6.0pt'>The DVCS trend is happening in
     the open source community.&nbsp; Born of the legendary cat fight between
     BitKeeper and the Linux kernel developers, Git and Mercurial are maturing
     and gathering momentum at a remarkable rate.</li>
 <li  style='margin-bottom:6.0pt'>These two trends are going to
     clash in a big way.&nbsp; SourceGear's graphic designer drew me a nice diagram
     to depict this.<br>
     <img border=0 width=576 height=439 src="http://software.ericsink.com/articles/1775_image001.jpg"></li>
 <li  style='margin-bottom:6.0pt'>The two trends cannot stay
     separate.&nbsp; Each one has advantages which are too important for the other community
     to ignore.</li>
 <li  style='margin-bottom:6.0pt'>But the two trends and their
     respective communities are a bit like oil and water.</li>
 <li  style='margin-bottom:6.0pt'>Enterprises want tools that
     constrain.&nbsp; The open source community wants tools that empower.</li>
 <li  style='margin-bottom:6.0pt'>The benefits of a DVCS would
     be diluted by integrating it with a bunch of other tools that are highly
     centralized.</li>
 <li  style='margin-bottom:6.0pt'>Enterprises need a least a
     little centralization for things like user administration.&nbsp; In their eyes,
     complete decentralization without accountability and auditing features is
     a bug.</li>
 <li  style='margin-bottom:6.0pt'>Even as enterprise attitudes
     about open source are changing, that change is happening slowly, and the
     GPL (used by both Git and Mercurial) is still considered the scariest
     license.</li>
 <li  style='margin-bottom:6.0pt'>So Git and Mercurial are not even
     close to being enterprise-ready.&nbsp; Similarly, none of the leading
     enterprise ALM tools are even close to being a DVCS.</li>
 <li  style='margin-bottom:6.0pt'>I believe that the main enterprise
     ALM providers (IBM/Rational, Microsoft, Serena and Borland) will all
     attempt to add DVCS features to their products.&nbsp; At least two of these
     companies (IBM/Rational, in a talk by Jean-Michel Lemieux at the Rational
     Conference in 2009, and <a
     href="http://blogs.msdn.com/bharry/archive/2010/01/27/codeplex-now-supports-mercurial.aspx">Microsoft</a>)
     have already made public remarks about a desire to move in that direction.</li>
 <li  style='margin-bottom:6.0pt'>And I predict that they will
     all fail.&nbsp; It is impossible to turn any of these systems into a true DVCS
     without a nearly complete rewrite.&nbsp; The D in DVCS is not a feature which
     can be added.</li>
 <li  style='margin-bottom:6.0pt'>But all of them will do it
     anyway, by making compromises.&nbsp; They will try to add "just enough"
     Decentralization.&nbsp; Some of their customers will find the results to be
     sufficient.</li>
 <li  style='margin-bottom:6.0pt'>Meanwhile, the true DVCS tools
     will continue to move forward, but their progress toward credible ALM will
     be slow.&nbsp; Enterprise-level integration is grunge work, not the kind of coding
     that hackers do as a labor of love.&nbsp; Nobody does this stuff without
     getting paid.</li>
 <li  style='margin-bottom:6.0pt'>So these two trends will
     continue to be distinct for a while, but the pressure and tension between
     them will remain, and the areas of overlap are going to continue getting
     messier.</li>
</ul>
]]>
</description>
</item>


</channel>
</rss>
