<?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 type="text">bitquabit - Technology</title>
  <id>http://bitquabit.com/feeds-noredirect/atom/technology/</id>
  <updated>2011-10-07T15:34:16Z</updated>
  <link href="http://bitquabit.com/" />
  
  <subtitle type="text">Opinionated Rants on Life and Software - Articles in Technology</subtitle>
  <generator>Werkzeug</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/bitquabit-technology" /><feedburner:info uri="bitquabit-technology" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Why how is boring and how why is awesome</title>
    <id>/post/why-how-is-boring-and-how-why-is-awesome/</id>
    <updated>2011-04-28T11:48:18Z</updated>
    <published>2011-04-28T11:48:18Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/d7ME_c4pzlo/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;Last fall, Joel came to me and said, &amp;#8220;Congratulations! We&amp;#8217;re doing another World Tour. Also, we want to teach distributed version control. That&amp;#8217;s your job. Make it happen.&amp;#8221;&lt;/p&gt;

&lt;p&gt;This sounded totally awesome. Not only would I get to one-up George Clooney in flight time; I was &lt;em&gt;made&lt;/em&gt; for doing something like this. In high school, I was in the NFL, which, sadly, means the National Forensics League, which means the National People Who Talk Good &lt;a href="http://en.wikipedia.org/wiki/Zoolander"&gt;and Wanna Learn To Do Other Stuff Good Too&lt;/a&gt;, and not the National Football League. My specialty was original oratory, where you give an original speech you&amp;#8217;ve rehearsed ahead of time. Add in there that I love to teach, and that I&amp;#8217;m the one who introduced Fog Creek to Mercurial in the first place, and I should be the perfect person to do this.&lt;/p&gt;

&lt;p&gt;I of course said yes, went back to my office, and fired up Emacs, ready to &lt;em&gt;go!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And then promptly suffered through two weeks of intermittent writer&amp;#8217;s block.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the problem: yes, I love using distributed version control. Yes, I love teaching. And yes, &lt;a href="http://blog.bitquabit.com/2011/03/14/have-a-mission/"&gt;I believe I have a mission to teach people about DVCS&lt;/a&gt;. But the talk I had to give, by definition, was an introduction to the &lt;em&gt;basics&lt;/em&gt; of distributed version control.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been using distributed version control for over half a decade, first as &lt;a href="http://en.wikipedia.org/wiki/GNU_arch"&gt;arch&lt;/a&gt; and &lt;a href="http://wiresong.ca/monticello/"&gt;Monticello&lt;/a&gt;, then &lt;a href="http://darcs.net/"&gt;Darcs&lt;/a&gt;, then super-early versions of Mercurial. The basics of &lt;em&gt;how do you do this?&lt;/em&gt; were super old-hat to me, and, well, &lt;em&gt;boring.&lt;/em&gt; There was nothing exciting to me about how to commit a file, or do an elementary merge, but I &lt;em&gt;had&lt;/em&gt; to cover that material.&lt;/p&gt;

&lt;p&gt;Further, if you only cover the basics, you can&amp;#8217;t possibly demonstrate &lt;em&gt;why you want to use a DVCS&lt;/em&gt;. There are minor benefits you can note&amp;#8212;hey, you can work offline!, or: hey, things are actually fast now!&amp;#8212;but you don&amp;#8217;t really get to any of the actual &lt;em&gt;meat&lt;/em&gt;, the things that teach you &lt;em&gt;why do you want to make this transition.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After two weeks of running in circles, I sat down with my friend &lt;a href="http://shipordie.com/"&gt;Jason&lt;/a&gt; (who now works for the &lt;a href="http://www.khanacademy.org/"&gt;Khan Academy&lt;/a&gt;, named after Genghis Khan, who invaded the Enterprise in Star Wars II to teach Captain Kirk calculus), and asked him how to get out of this mess. Over half an hour of conversation, I realized that I already had the answer.&lt;/p&gt;

&lt;p&gt;Yes, I needed to cover the basics. No, those would not be super-interesting. But I could keep that as short as humanly possible, and as soon as I&amp;#8217;d done that, I could spend the rest of the talk discussing &lt;em&gt;why you should care.&lt;/em&gt; We could cover workflows that it took lots of trial and error to discover. We could show merge scenarios that caused traditional tools to barf. We could show how Mercurial made it really easy for us to ship lots of versions of FogBugz without dropping bug fixes. In other words: spend half the talk with the basics of basics, just enough to understand how things worked, but then jump straight ahead to answering the question of what did distributed version control ever do for you.&lt;/p&gt;

&lt;p&gt;I went back to Emacs, and quickly identified what I thought were two of DVCS&amp;#8217; killer scenarios: maintaining multiple versions of a product without dropping bug fixes, and being able to reliably develop new features of a product while always being ready to ship a bugfix in a heartbeat. I built the talk so that the audience would start with nothing, and build up to understanding how to realize those two workflows.&lt;/p&gt;

&lt;p&gt;The result? Distributed Version Control System University, or: &lt;a href="http://www.fogcreek.com/kiln/worldtour2010-dvcsu.html?fccmp=bqb-howteach"&gt;how do I actually use distributed version control in a meaningful way&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m actually really happy with how everything turned out. Even though the code I ended up using was silly, audiences responded well, and understood the potential power and flexibility that distributed version control provides. They asked intelligent questions, they were engaged, and a lot of them signed up for Kiln trial accounts and decided to start playing with Mercurial.&lt;/p&gt;

&lt;p&gt;One of my goals in the future is to try to beef up &lt;a href="http://hginit.com/"&gt;hg init&lt;/a&gt; with some of the workflow examples in my talk. I also want to take some time to go into more detail about how we do workflow here at Fog Creek. But if you or a coworker has been wondering what the big deal is about distributed version control, watch the video. I think it provides a great overview in a way that any dev can immediately relate to and get excited about.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/d7ME_c4pzlo" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/why-how-is-boring-and-how-why-is-awesome/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Supporting the Giants</title>
    <id>/post/supporting-giants/</id>
    <updated>2011-04-05T08:32:00Z</updated>
    <published>2011-04-05T08:32:00Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/nXCTCVMubBc/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;One of the things that I love about Fog Creek is that we give back. Kiln can only exist because of the amazing foundation provided by &lt;a href="http://mercurial.selenic.com/"&gt;the Mercurial distributed version control system&lt;/a&gt;, so we try to help them out whenever we can. In the past, we&amp;#8217;ve done that by &lt;a href="http://mercurial.selenic.com/sponsors/"&gt;making Fog Creek one of the top Mercurial sponsors&lt;/a&gt;. Given how small Fog Creek is, I can&amp;#8217;t tell you how proud I am to see that we&amp;#8217;re placing up there amongst Google and Microsoft for supporting open-source software.&lt;/p&gt;

&lt;p&gt;This year, we&amp;#8217;ve decided to help contribute in an even more hands-on way: by devoting developer resources. Not only will Fog Creek be helping to sponsor the upcoming Mercurial 1.9 code sprint; we&amp;#8217;re also sending one of our awesome Kiln developers, &lt;a href="http://kevingessner.com/"&gt;Kevin Gessner&lt;/a&gt;, to help contribute. And, in the weeks leading up to the sprint, we&amp;#8217;ll be using Kiln team developers to help contribute bug fixes and features to the Mercurial project. In other words, we&amp;#8217;ll be supporting Mercurial both financially and with developer resources.&lt;/p&gt;

&lt;p&gt;Kiln stands on the shoulders of giants, so I&amp;#8217;m happy to support those giants in return.&lt;/p&gt;

&lt;p&gt;After all, the higher the giant gets, the taller Kiln stands.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/nXCTCVMubBc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/supporting-giants/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Have a mission</title>
    <id>/post/have-a-mission/</id>
    <updated>2011-03-14T08:23:36Z</updated>
    <published>2011-03-14T08:23:36Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/NOwdeVvL6bc/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;You know why I love working on &lt;a href="http://www.fogcreek.com/kiln/"&gt;Kiln&lt;/a&gt; every day?&lt;/p&gt;

&lt;p&gt;Because we&amp;#8217;ve got a &lt;em&gt;mission&lt;/em&gt;, dammit.&lt;/p&gt;

&lt;p&gt;Mission, not mission statement. The Kiln team doesn&amp;#8217;t have a mission statement, and I&amp;#8217;ll fight to keep it that way. Mission statements, no matter how well intentioned, become these trite little soundbites that you parrot indefinitely until they just become a meaningless jumble of syllables&amp;#8212;kind of like what happens if you just say the word &amp;#8220;marmalade&amp;#8221; about 40 times in a row.&lt;/p&gt;

&lt;p&gt;But that&amp;#8217;s totally different from &lt;em&gt;having a mission&lt;/em&gt;. Everyone who works on Kiln knows what we&amp;#8217;re trying to accomplish. They&amp;#8217;ll phrase it in their own way, but no matter who you talk to on my team, we&amp;#8217;ll all tell you why Kiln exists: we believe that distributed version control is so much more awesome than old-school centralized crap that we have an &lt;em&gt;obligation&lt;/em&gt; to bring that awesomeness to as many developers as possible. Every time I write a line of code, I have in my head that I&amp;#8217;m trying to further that goal.&lt;/p&gt;

&lt;p&gt;Distributed version control is having trouble making inroads at companies, you say? Fine. We&amp;#8217;ve make Kiln an awesome system for companies: we&amp;#8217;ve made a kickass project-centric workflow, given teams a way of handling large numbers of repositories, added asset management, permissions models, code reviews, rich APIs, and piles more. People having trouble leaving their old system behind? No problem: we&amp;#8217;ll draft Joel into &lt;a href="http://hginit.com"&gt;writing awesome tutorials&lt;/a&gt;, &lt;a href="http://worldtour.fogcreek.com/"&gt;we&amp;#8217;ll give talks on distributed version control all over the world&lt;/a&gt;, &lt;a href="http://www.fogcreek.com/fogbugz/training/"&gt;we&amp;#8217;ll provide training services&lt;/a&gt; to help bring people up to speed, and we&amp;#8217;ll make an importer to help you get your existing code moved over. We&amp;#8217;ll even &lt;a href="http://kiln.stackexchange.com/"&gt;create a StackExchange&lt;/a&gt; just for helping people figure out Mercurial, Kiln, and distributed version control, so that there&amp;#8217;s a good, central location to get answers about tools, workflows, and everything else. These things probably all help Kiln, but we&amp;#8217;re not doing them because of that; we&amp;#8217;re doing them because &lt;em&gt;we have to do them to achieve what we believe we need to do&lt;/em&gt;. The rest is a footnote.&lt;/p&gt;

&lt;p&gt;I feel like I can tell you any good product&amp;#8217;s mission really easily for similar reasons. iPhone? Make using a smartphone fun. The App Store, iBooks, and so on are just fall-out.&lt;/p&gt;

&lt;p&gt;Kindle? Make digital books completely pervasive. And you know that&amp;#8217;s the goal, because you can read Kindle books on practically &lt;em&gt;any&lt;/em&gt; device in wonderful, intuitive applications.&lt;/p&gt;

&lt;p&gt;Google? Make it possible to find good, relevant data, quickly.&lt;/p&gt;

&lt;p&gt;Facebook? Keep people from losing touch.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s a common theme here: in all of these cases, the mission isn&amp;#8217;t about the product as such. The mission is &amp;#8220;just&amp;#8221; something that, if you&amp;#8217;re really serious about, &lt;em&gt;requires&lt;/em&gt; that the product become absolutely amazing, so you make that happen. If you prefer: these missions are all the answer to, &lt;strong&gt;&lt;em&gt;why&lt;/strong&gt; did we just add that new feature?&lt;/em&gt;, not, &lt;strong&gt;&lt;em&gt;what&lt;/strong&gt; new feature are we adding&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;What the hell is Windows&amp;#8217; mission in life? The best I can come up with, at this point, is to keep Windows from getting too dated, but not breaking backwards compatibility, so that Microsoft can make money while they find something that actually sticks. That&amp;#8217;s&amp;#8230;pretty pathetic. Not to single out Microsoft here; I&amp;#8217;m not really convinced the OS X team has a terribly coherent mission right now, either. They have a clear &lt;em&gt;goal&lt;/em&gt;&amp;#8212;they want to bring the experience of the iPhone and iPad to OS X&amp;#8212;but I don&amp;#8217;t quite grok &lt;em&gt;why&lt;/em&gt; they&amp;#8217;re doing it, and I would argue that the somewhat haphazard mishmash of app UIs in the Lion previews (compare Address Book with the new Mail, for example) is a pretty good indication that &lt;em&gt;they&lt;/em&gt; don&amp;#8217;t quite know, either.&lt;/p&gt;

&lt;p&gt;When you don&amp;#8217;t really know &lt;em&gt;why&lt;/em&gt; you&amp;#8217;re doing something&amp;#8212;when it&amp;#8217;s just a goal that you&amp;#8217;ve got and you&amp;#8217;ve lost track of your original motivation&amp;#8212;it&amp;#8217;s really tough to have a good product, or to be excited when you come into work every day. Yes, &lt;em&gt;someone&lt;/em&gt; has to fix Windows. But why me? Why can&amp;#8217;t I be making something awesome? So you&amp;#8217;ll do the minimal amount necessary to achieve your best understanding of the goal, rather than everything required to maximize your chance of actually achieving your mission in life.&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t just latch onto something because it&amp;#8217;s neat. Latch onto it because you really fucking &lt;em&gt;believe&lt;/em&gt; that you have something to accomplish here, and since no one else is going to do it, it&amp;#8217;s going to have to be you. That&amp;#8217;s your mission.&lt;/p&gt;

&lt;p&gt;Make it happen.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/NOwdeVvL6bc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/have-a-mission/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Approved for Abusiveness</title>
    <id>/post/approved-abusiveness/</id>
    <updated>2011-02-23T08:40:15Z</updated>
    <published>2011-02-23T08:40:15Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/XinwvuRP554/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;Speaking of fascinating user experiences, I had to crack a smile when going through Disqus today and approving a pile of comments that got locked in the queue for some reason. On every single one, after clicking on the &lt;key&gt;Approve&lt;/key&gt; button, I was greeted with:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.bitquabit.com/blog/2011/02/approvedabusiveness.png" alt="This comment has been Approved for possible abusiveness" /&gt;&lt;/p&gt;

&lt;p&gt;While I&amp;#8217;m still trying to puzzle out what the engineer who wrote that string had in mind, I really think I&amp;#8217;m going to have to order a pile of stickers with that message on them for liberal distribution to our interns this summer.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/XinwvuRP554" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/approved-abusiveness/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Buying VMware Fusion</title>
    <id>/post/buying-vmware-fusion/</id>
    <updated>2011-02-22T20:47:37Z</updated>
    <published>2011-02-22T20:47:37Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/v7cCfPJhiXw/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: VMware followed up with me this morning, and has done a great job getting me help and outlining how they&amp;#8217;re planning to address a lot of the complaints I&amp;#8217;ve had. We&amp;#8217;ll have to see what happens over the next few months, but so far, VMware has convinced me that they get they have a problem and are going to try to fix it. Kudos, VMware.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So about a week ago I decide to buy VMware Fusion.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;really&lt;/em&gt; like VMware.  They make awesome products, they have good support.  They&amp;#8217;re not perfect&amp;mdash;the VMware Workstation updater and the Adobe updaters can go neck-in-neck for absolute single most horrible upgrade experience, for example&amp;mdash;but in general, the products are stellar.  So when I decided to ditch Bootcamp and go the virtualization route for running Windows 7, VMware Fusion just made sense to me.  I know Parallels Desktop might be slightly faster, but my friends assured me VMware&amp;#8217;s plenty fast, it has Unity, it has 3D support, and I trust it due to using Workstation so heavily at Fog Creek. I&amp;#8217;ll stick with a solution I trust over one that&amp;#8217;s fast. So I head on over to vmware.com to make magic happen.&lt;/p&gt;

&lt;p&gt;I then go through what I can only describe as the single worst purchasing experience I have had, ever.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I begin by purchasing VMware Fusion. This part goes well, and I&amp;#8217;m out $65.&lt;/li&gt;
&lt;li&gt;I get an email confirming my order with a download link, so I start downloading. So far, so good.&lt;/li&gt;
&lt;li&gt;While I&amp;#8217;m downloading, I click the link to register Fusion.  I&amp;#8217;m taken to a page (with broken images) asking me for my license key, so I start to&amp;#8230;wait. License key?  The email I got has a customer number, which, now that I look at it, doesn&amp;#8217;t match my actual VMware customer number. And it has an order number. But I don&amp;#8217;t see any license key.
 Uh oh.&lt;/li&gt;
&lt;li&gt;I check the &amp;#8220;Manage Licenses&amp;#8221; part of the &lt;code&gt;vmware.com&lt;/code&gt; site, since I know that&amp;#8217;s where I find licenses for the copies of VMware Workstation we have at work. But it&amp;#8217;s empty. After about 23958 clicks, I find that this is a common problem that&amp;#8217;s usually resolved in &amp;#8220;several hours.&amp;#8221; I grit my teeth and hope that this does not mean what I think it means.&lt;/li&gt;
&lt;li&gt;I try to install Fusion. It installs fine. So far, so good. But then Fusion launches..and wants a license key. D&amp;#8217;oh!&lt;/li&gt;
&lt;li&gt;About half an hour passes, most of which is filled with me getting absolutely livid as I try to figure out how the holy hell to get a license key and debating preemptively challenging the purchase out of spite.&lt;/li&gt;
&lt;li&gt;Just before I do in fact challenge the purchase, I get an email from VMware telling me that my license key is ready. Why the badingo it took half an hour, I have no idea, but at least it&amp;#8217;s there!&lt;/li&gt;
&lt;li&gt;But wait! It&amp;#8217;s telling me that to get my license code, I need to go to&amp;#8230;&lt;a href="http://findmyorder.com"&gt;findmyorder.com&lt;/a&gt;?  The hey?&lt;/li&gt;
&lt;li&gt;I know better than to do this, but I go to &lt;code&gt;findmyorder.com&lt;/code&gt;, and am greeted by something that looks like it was cobbled together by the best that ColdFusion and MS Paint have to offer.&lt;/li&gt;
&lt;li&gt;There are two ways to get my order: my order number, or the last five digits of my credit card, which, if you know anything about how credit cards work, are probably the five most valuable digits on the card (you can frequently guess most of the rest based on just the picture on the card). Needless to say, entering my order number fails, meaning my credit card is the only option. On top of everything else, this probably means that VMware kept my card on file somewhere. Not impressive.&lt;/li&gt;
&lt;li&gt;I google around to learn about &lt;code&gt;findmyorder.com&lt;/code&gt;, read some stuff in a French forum, take a look at their SSL cert chain, and a few other things, and conclude that, while web design may not be their strong suit, they &lt;em&gt;might&lt;/em&gt; actually be legitimate.&lt;/li&gt;
&lt;li&gt;Breath held, I enter the last five digits of my credit card and my email address&amp;#8230;and amazingly, am in fact, really and truly, actually given my VMware Fusion license key, on a fully VMware-branded page! Most amazingly of all, I enter the license key into Fusion, and amazingly, it works! This seems so unlikely an outcome at this point that I have a beer in celebration.&lt;/li&gt;
&lt;li&gt;I click the &amp;#8220;Contact Us&amp;#8221; link on the bottom of the VMware-branded page&amp;#8230;and &lt;a href="https://www.findmyorder.com/company/contact.html"&gt;am given a good indication how much they want to be contacted&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;After looking around, I realize that it&amp;#8217;s not that the contact page is down; it&amp;#8217;s that the VMware lookalike page was made by copying the actual VMware home page and redoing all the content area, so all the links go to places that would be valid on &lt;code&gt;vmware.com&lt;/code&gt;, but are invalid on &lt;code&gt;findmyorder.com&lt;/code&gt;.  I give up telling VMware how much they suck at this point and decide to just focus on using Fusion, if that&amp;#8217;s even possible.&lt;/li&gt;
&lt;li&gt;Now that I &lt;em&gt;have&lt;/em&gt; a registration key, I try to go register it on &lt;code&gt;vmware.com&lt;/code&gt;&amp;#8230;and am told it&amp;#8217;s invalid. I now find myself drifting back to the &amp;#8220;it&amp;#8217;s a scam&amp;#8221; hypothesis. The license key is unsurprisingly rejected by the license manager, too.  Oh well.  At least Fusion took it.  Maybe that&amp;#8217;s good enough for me.&lt;/li&gt;
&lt;li&gt;A week later, in a fit of pique, I try to register VMware Fusion again. This time, it works! Not only that; the license manager decides to accept the key, too! Huzzah!&lt;/li&gt;
&lt;li&gt;Armed with this new knowledge that the license key is, in fact, really truly kosher, I decide to attempt to recover &lt;a href="http://www.rebates-vmware.com/f3fusionrebate/"&gt;the $30 rebate that VMware Fusion has going right now&lt;/a&gt; that I was promised, why not.  So I start that process, and&amp;#8230;they want the email that has the license key in it.  &lt;strong&gt;There is no such email you farking morans.&lt;/strong&gt;  Are you guys even reading this blog post, do you&amp;mdash;er, right, I hadn&amp;#8217;t written this yet. My bad.&lt;/li&gt;
&lt;li&gt;But by now, I&amp;#8217;ve figured out how to handle &lt;em&gt;this&lt;/em&gt; problem: I go back to my trusty &lt;code&gt;findmyorder.co.hk&lt;/code&gt;, enter in various random personal identifying numbers, and, sure enough, the faux VMware page has the license key on it, so I print that to PDF and send it off to VMware.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, to recap:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I bought a product that I couldn&amp;#8217;t use out-of-the-box;&lt;/li&gt;
&lt;li&gt;in order to use it, I was sent to a site I had never dealt with before;&lt;/li&gt;
&lt;li&gt;the site requires me to enter part of my credit card to use it;&lt;/li&gt;
&lt;li&gt;it then takes me to a totally broken page, which, thankfully, has a license key;&lt;/li&gt;
&lt;li&gt;that license key is rejected for some indeterminate amount of time by &lt;code&gt;vmware.com&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;once it&amp;#8217;s finally not rejected, vmware.com still merrily asks me to give it an email that it knows damn well it didn&amp;#8217;t give me.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;VMware: if you were trying to convince me that you have absolutely no clue whatsoever how to interact with consumers, you win.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/v7cCfPJhiXw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/buying-vmware-fusion/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Making Your Interns Addicts: a How-To Guide</title>
    <id>/post/making-your-interns-addicts-howto/</id>
    <updated>2011-05-27T08:22:15Z</updated>
    <published>2011-05-27T08:22:15Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/q4NZXHdU2vI/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;I was thinking back last week on why I started working at Fog Creek.  If you don&amp;#8217;t know, I got started on this thing called &lt;a href="http://projectaardvark.com/"&gt;Project Aardvark&lt;/a&gt;, which eventually ended up becoming &lt;a href="https://www.copilot.com/"&gt;Copilot&lt;/a&gt;, the project I worked on for my first couple of years at Fog Creek.  I don&amp;#8217;t generally reminisce much about that time, simply because that was a very different point in my life, back before I found fashion, yet after I figured out how to end up in front of cameras constantly.&lt;/p&gt;

&lt;p&gt;&lt;div style="display: float; float: right"&gt;&lt;img src="http://media.bitquabit.com/blog/2011/05/jumpjumpjumparound.png" alt="Jump, jump, jump around..." /&gt;&lt;/div&gt; So my friends are usually quite good at reminiscing about that time on my behalf, which is &lt;em&gt;plenty&lt;/em&gt;.  But with this summer&amp;#8217;s batch of new Fog Creek interns arriving in just over a week, I&amp;#8217;ve been thinking about it a lot.  What was good, what was bad, what about the experience made me need to stay at Fog Creek.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve realized there are quite a few parallels between what got me into Fog Creek and what gets people hooked on hard-core drugs.&lt;/p&gt;

&lt;p&gt;Not in the bad way, mind you. I have yet to see an intern maniacally chase source code into a dirty toilet, for example.&lt;sup class="footnote-ref" id="fnref-ts"&gt;&lt;a href="#fn-ts"&gt;1&lt;/a&gt;&lt;/sup&gt;  What I mean is, I almost feel like our internship is custom-tailored to pound the crap out our interns&amp;#8217; sense of awesome so that they just &lt;em&gt;have&lt;/em&gt; to come back for more. Just, unlike with drugs, the effect is that they have a great summer, &lt;em&gt;and&lt;/em&gt; they want to work for us, &lt;em&gt;and&lt;/em&gt; I honestly feel they end up being way more productive in the process. What I find remarkable is that while nearly every part of Fog Creek has changed since my initial internship, the actual way we run our internships continues almost unedited.&lt;/p&gt;

&lt;p&gt;I really want all the interns in the world to come work for us, but I also want all the interns in the world to have amazing summers, and the best way to do that is to tell you what we&amp;#8217;re doing to get our interns hooked.  So without further ado, I&amp;#8217;m happy to begin my first and last guide to deliberately getting someone addicted. &lt;/p&gt;

&lt;h4&gt;Step 1: Get Them Excited&lt;/h4&gt;

&lt;p&gt;The first thing that matters is getting them psyched just to be there.  When I was an Aardvark, that was easy: we knew we were going to be in a movie.  Being in a movie is &lt;em&gt;exciting&lt;/em&gt;.  It&amp;#8217;s even more exciting when the film-maker comes to your house before the summer starts just to interview you and film you doing a really botched version of a Chopin nocturne that he manages to edit so you sound competent.  I mean, who could say no to that?&lt;/p&gt;

&lt;p&gt;Our interns this year may not be excited because they&amp;#8217;ll be in a movie, but they can be excited for a different reason: they&amp;#8217;re going to be working on a young project that still has thousands of customers and manages over half a terabyte of data across nearly 25,000 active repositories.  They&amp;#8217;ll get a chance to be making a difference.&lt;/p&gt;

&lt;p&gt;Find something that you yourself are excited about, and get your interns excited in that.  Or, if you don&amp;#8217;t have anything at your job that excites you, &lt;a href="http://www.fogcreek.com/Careers.html"&gt;find another job&lt;/a&gt;.  We&amp;#8217;re hiring, after all.&lt;/p&gt;

&lt;h4&gt;Step 2: Get Them Doing Real Work&lt;/h4&gt;

&lt;p&gt;Of course, if the thing you&amp;#8217;re getting your interns excited about is playing with a widely used application, it &lt;em&gt;does&lt;/em&gt; require you let them, you know, &lt;em&gt;touch the code&lt;/em&gt;.  My first coding internship, at a company that shall remain nameless,&lt;sup class="footnote-ref" id="fnref-mordor"&gt;&lt;a href="#fn-mordor"&gt;2&lt;/a&gt;&lt;/sup&gt; involved me writing a tremendous amount of Ruby code.  That could be awesome, and in a way, it was.  Except that the Ruby code I was writing were scripts to do things like automatically upload new advertisement photos to the intranet, collated by the date the photograph was taken.  Or, when I wasn&amp;#8217;t so lucky, it was to make a blog engine that could hold exactly one blog post, and then display a little red icon if the blog post it was showing at the time was Bad For The Company&amp;trade;.  Not exactly central to the product, you know?&lt;/p&gt;

&lt;p&gt;So at Fog Creek, we always make sure our interns are doing real stuff for the project they&amp;#8217;re working on.  When I was an intern on Aardvark, I wrote most of the Windows helpers.  Other intern classes have written a new wiki for FogBugz, and given Kiln its API and its large files support.  Hell, an intern class was integral to getting the first version of Kiln done in the first place.  It feels &lt;em&gt;so much better&lt;/em&gt; to actually be contributing code to something you know is going to make a real difference to the product.&lt;/p&gt;

&lt;p&gt;Or, you know, have them write a one-post blog engine or whatever.  It&amp;#8217;s cool.  Just make sure they know at the end of their internship that &lt;a href="http://www.fogcreek.com/Careers.html"&gt;we&amp;#8217;re still hiring&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Step 3: Give Them Instant Feedback&lt;/h4&gt;

&lt;p&gt;You know what sucks about automating some random task that you&amp;#8217;ve been assigned to do as an intern?  Getting absolutely no feedback on what anyone thinks about it.  Is it useful?  Does it stink?  Who knows.  It&amp;#8217;s a fricking &lt;em&gt;compilation of advertisements on a corporate intranet.&lt;/em&gt;  For all I know, no one even reads this at all.&lt;sup class="footnote-ref" id="fnref-reading"&gt;&lt;a href="#fn-reading"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;With one exception,&lt;sup class="footnote-ref" id="fnref-perfection"&gt;&lt;a href="#fn-perfection"&gt;4&lt;/a&gt;&lt;/sup&gt; Fog Creek interns always get to see Creekers using their code &lt;em&gt;immediately&lt;/em&gt;, because we code right alongside them.  We&amp;#8217;re running their changes on our development systems, and, in many cases, running that code on our &lt;a href="http://en.wikipedia.org/wiki/Eating_your_own_dog_food"&gt;dogfood systems&lt;/a&gt; just a day or two after it&amp;#8217;s written.  Not only does this generally mean that our products are better, because we&amp;#8217;re using new features heavily ourselves long before they ever reach our customer&amp;#8217;s hands; it means that our interns are getting feedback almost immediately, both from within and outside their team, on what worked and what didn&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;Or you can send feedback three weeks after the internship ends.  By email.  That works, too.&lt;/p&gt;

&lt;h4&gt;Step 4: Make Them Feel Awesome&lt;/h4&gt;

&lt;p&gt;People like feeling good.  And the simple fact is, if you&amp;#8217;re using your interns&amp;#8217; code almost immediately, and giving them rapid feedback, you&amp;#8217;re going to end up having your interns produce really great stuff.  So: &lt;em&gt;tell them that.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Not in a fake way, mind you: some things just honestly take a lot of revisions before they&amp;#8217;re good, no matter &lt;em&gt;how&lt;/em&gt; awesome the people involved are, and your interns are going to know you&amp;#8217;re offering them bull if you tell them something&amp;#8217;s awesome that they know isn&amp;#8217;t.  But there&amp;#8217;s all those intermediate steps, the little victories, the occasional big one, where you owe it to your team to acknowledge that, yup, they did well.&lt;/p&gt;

&lt;p&gt;Saying &amp;#8220;good job&amp;#8221; is one way to show you care, but actually &lt;em&gt;getting to know your interns&lt;/em&gt; is even better.  At Fog Creek, we hang out with our interns outside of work by taking them to documentaries like &lt;em&gt;Harry Potter 7&lt;/em&gt;, to Yankees &amp;#8220;games&amp;#8221;&lt;sup class="footnote-ref" id="fnref-pummel"&gt;&lt;a href="#fn-pummel"&gt;5&lt;/a&gt;&lt;/sup&gt; at the new stadium, and, my personal favorite, to &lt;a href="http://www.bowlmor.com/"&gt;top-shelf-martini-powered bowling&lt;/a&gt;.  If you don&amp;#8217;t have these available in your town, take them to the airport so they can bond over a TSA freaky frisk-fest.  The point is, do something with your interns so you actually get to know and like them as something other than a coding automaton.&lt;/p&gt;

&lt;h4&gt;Step 5: Ship, dammit!&lt;/h4&gt;

&lt;p&gt;But all of that comes to naught if you don&amp;#8217;t &lt;em&gt;actually ship stuff.&lt;/em&gt;  Sure, maybe you worked on Kiln, and sure, maybe &lt;em&gt;Kiln&lt;/em&gt; makes a difference to the company, and sure, maybe your boss likes you.  But what about your own stuff?  Do customers care?  Does it just go into a bit bucket at the end of the summer, never to be seen again?&lt;/p&gt;

&lt;p&gt;&lt;div style="display: float; float: left"&gt;&lt;img src="http://media.bitquabit.com/blog/2011/05/party.png" alt="Celebrate the successes" /&gt;&lt;/div&gt; Our interns won&amp;#8217;t have to wonder too much about that: thanks to &lt;a href="http://blog.fogcreek.com/release-cycles-of-the-fast-and-the-furious/"&gt;Kiln&amp;#8217;s fast release schedule&lt;/a&gt;, they&amp;#8217;ll be seeing their code go out to customers multiple times this summer, get feedback from customers about their changes, and probably even do a second round or two that integrates that feedback.  So while they&amp;#8217;re busy being excited, writing production code, getting feedback, and doing fun stuff, they&amp;#8217;ll also be knowing, &lt;em&gt;even during their internship&lt;/em&gt;, exactly what a difference they&amp;#8217;re making.&lt;/p&gt;

&lt;p&gt;You see what I mean?  It&amp;#8217;s exactly like an addiction.  Just because our interns are awesome, work on great products, and make a real difference, they get this crazy positive feedback loop that means they not only have a great summer, but that they want to keep coming back, again and again.  We&amp;#8217;ve literally had freshman interns who come back every single summer because they love it here so much.  We&amp;#8217;re doing something right.&lt;/p&gt;

&lt;p&gt;And I hope that, if your interns aren&amp;#8217;t already feeling the same way, this guide can help you get there.  I remember what it was like to feel like an undervalued intern, and I remember what it was like to feel like I was king of the world.&lt;/p&gt;

&lt;p&gt;Help your interns have their own king-of-the-world moments, and everyone wins.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn-ts"&gt;
&lt;p&gt;I hate Trainspotting so hard.&amp;nbsp;&lt;a href="#fnref-ts" class="footnoteBackLink" title="Jump back to footnote 1 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn-mordor"&gt;
&lt;p&gt;The East India Company.&amp;nbsp;&lt;a href="#fnref-mordor" class="footnoteBackLink" title="Jump back to footnote 2 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn-reading"&gt;
&lt;p&gt;Actually, I know people read it, because I got bored and figured out how to use &amp;#8220;DHTML&amp;#8221; to log who was viewing the page.  But you get the point.&amp;nbsp;&lt;a href="#fnref-reading" class="footnoteBackLink" title="Jump back to footnote 3 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn-perfection"&gt;
&lt;p&gt;It turns out that, try as we might, even Fog Creek can&amp;#8217;t achieve perfection.  Just reallygoodtion, with an eye towards learningfromyourmistakesery.&amp;nbsp;&lt;a href="#fnref-perfection" class="footnoteBackLink" title="Jump back to footnote 4 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn-pummel"&gt;
&lt;p&gt;My editor informed me that calling them &amp;#8220;Red Sox beat-downs&amp;#8221; was not appropriate if I didn&amp;#8217;t want to offend my audience.&amp;nbsp;&lt;a href="#fnref-pummel" class="footnoteBackLink" title="Jump back to footnote 5 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/q4NZXHdU2vI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/making-your-interns-addicts-howto/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Enslaving your interns for evil and profit</title>
    <id>/post/enslaving-your-interns-for-evil-and-profit/</id>
    <updated>2011-10-07T15:34:16Z</updated>
    <published>2011-10-07T15:34:16Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/090mGMvnUKw/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;I should be in the middle of an interview right now.  About fifteen minutes into it, in fact.  About the part of my interview where we stop talking about awesome stuff the candidate has worked on in the past and start diving into writing some actual code.  A stack with O(1) data access that also always knows its maximum, for example.  Or perhaps a rudimentary mark-and-sweep garbage collector.  It&amp;#8217;s usually my favorite part of the interview: I get to see how the candidate thinks, how they process information, how they problem solve, and how they code.  The best candidates even teach me something in the process.&lt;/p&gt;

&lt;p&gt;But I&amp;#8217;m not in the middle of an interview right now.  I&amp;#8217;m in Emacs.  And instead of being excited about watching someone solve an interesting problem, I&amp;#8217;m upset and full of righteous indignation on behalf of the now-former job candidate.&lt;/p&gt;

&lt;p&gt;&lt;div style="float: right"&gt;&lt;img src="http://media.bitquabit.com/blog/2011/10/dracula.png" alt="The Kiln Dodo monitors your success with gusto" /&gt;&lt;/div&gt;You see, the candidate works for a company that is &lt;em&gt;very scared&lt;/em&gt;.&lt;sup class="footnote-ref" id="fnref-1"&gt;&lt;a href="#fn-1"&gt;1&lt;/a&gt;&lt;/sup&gt;  I know this because they made the candidate&amp;mdash;let&amp;#8217;s call him Bob&amp;mdash;they made Bob sign a non-compete contract.&lt;/p&gt;

&lt;p&gt;Non-competes are annoying, but not the end of the world.  I can understand why, say, Apple, might be legitimately angry to have a senior iPhone manufacturing executive jump ship to HTC: a large part of the candidate&amp;#8217;s value to HTC would be his knowledge of the internals of Apple&amp;#8217;s manufacturing process.  But &lt;em&gt;very few&lt;/em&gt; jobs work like that.  And even there, most companies don&amp;#8217;t forbid you from working &lt;em&gt;at all&lt;/em&gt; for a competitor; they forbid you from working in the same area of expertise.  So, for example, maybe the iPhone executive couldn&amp;#8217;t work on HTC&amp;#8217;s manufacturing operations, but he could still head a software development team.&lt;/p&gt;

&lt;p&gt;But Bob&amp;#8217;s company decided that, nope, Bob couldn&amp;#8217;t come work for us, because the existence of Joel on Software&amp;#8217;s &lt;a href="http://careers.joelonsoftware.com/jobs"&gt;careers board&lt;/a&gt; made us a direct competitor with them.&lt;/p&gt;

&lt;p&gt;Let me tell you something about the Joel on Software careers board: Fog Creek doesn&amp;#8217;t even make it.  We outsource the whole thing to a little-known company called StackOverflow.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s true.  The lie exposed.  If you&amp;#8217;re in doubt, take a look and notice the admittedly subtle similarities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://careers.joelonsoftware.com/jobs"&gt;Joel on Software Careers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://careers.stackoverflow.com/jobs/"&gt;StackOverflow Careers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shocking, I&amp;#8217;m sure.&lt;/p&gt;

&lt;p&gt;Yet based on this, Bob&amp;#8217;s company told him that Fog Creek and his firm were direct competitors, and therefore he couldn&amp;#8217;t even come to work with us on, say, Kiln.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the thing: &lt;strong&gt;Bob&amp;#8217;s a junior in college, and the company doing this to him is one he merely interned at.&lt;/strong&gt;  There is no way that Bob has inside knowledge of how a job board runs that could help us.  And even if he somehow &lt;em&gt;did&lt;/em&gt; have that knowledge, &lt;em&gt;we don&amp;#8217;t even run the job board!&lt;/em&gt;  There&amp;#8217;s no way he could actually give us anything that would help us!  But Bob&amp;#8217;s company made him turn us down, before we could even interview him, because they were absolutely, utterly &lt;em&gt;terrified&lt;/em&gt; that their intern, who is still in college, was so amazing that his coming to work for us could crash their entire company.&lt;/p&gt;

&lt;p&gt;I actually feel really bad for Bob&amp;#8217;s company.  They&amp;#8217;re so unsure of their own ideas, so negative on their own potential,  that they believe a former intern being physically near a company with an outsourced jobs board would be enough for that company to absolutely crush them.  I don&amp;#8217;t want to imagine what it feels like to get up every day and face that world.  But that&amp;#8217;s no reason to inflict such a morose world view on your interns.&lt;/p&gt;

&lt;p&gt;So I&amp;#8217;m upset on Bob&amp;#8217;s behalf.  Bob got shafted by a company he interned at.  A company that has so little confidence that they&amp;#8217;ve decided the best route to their success is to limit Bob&amp;#8217;s choices.  Limits that mean we miss out on an awesome candidate, and Bob misses out on an awesome job.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve got two real points to make, at the end of the day:&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re an intern, &lt;strong&gt;don&amp;#8217;t sign a non-compete contract.&lt;/strong&gt;  You have absolutely no idea where your life is going to take you, and you don&amp;#8217;t want your direction being shaped by one crappy employer.  And, trust me on this: no reputable software company I know of (Google, Microsoft, or Fog Creek) makes their interns sign non-compete contracts.  You can find a job that won&amp;#8217;t make you do that.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re a company, &lt;strong&gt;don&amp;#8217;t be a vampire.&lt;/strong&gt;  If you&amp;#8217;re so scared of everyone else that you believe that you have to give your interns a non-compete contract in order to stay competitive, then guess what?  You&amp;#8217;re not competitive.  Get a better idea.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn-1"&gt;
&lt;p&gt;And based on the quality of their homepage, probably with good reason, but that&amp;#8217;s neither here nor there.&amp;nbsp;&lt;a href="#fnref-1" class="footnoteBackLink" title="Jump back to footnote 1 in the text."&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/090mGMvnUKw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/enslaving-your-interns-for-evil-and-profit/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Talking to HipChat from Kiln</title>
    <id>/post/talking-hipchat-kiln/</id>
    <updated>2010-12-22T13:28:49Z</updated>
    <published>2010-12-22T13:28:49Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/t1A2O-jjYhc/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;At Fog Creek, we heavily use &lt;a href="http://www.hipchat.com/"&gt;HipChat&lt;/a&gt; to handle quick internal communication. One thing we decided we wanted on the Kiln team was to get real-time notifications whenever anyone pushed to one of our main repositories. Thankfully, &lt;a href="http://kiln.stackexchange.com/questions/952/does-kiln-support-web-hooks"&gt;Kiln has a feature called webhooks&lt;/a&gt; that cause Kiln to broadcast repository events to a random web URL, and &lt;a href="http://www.hipchat.com/docs/api"&gt;HipChat has a nice little API&lt;/a&gt; to post notifications in chat rooms. So I whipped up a little web service, called &lt;a href="https://bqb.kilnhg.com/Repo/Public/Popular/Squawker/Files"&gt;Squawker&lt;/a&gt;, to handle this kind of thing for us.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://bqb.kilnhg.com/Repo/Public/Popular/Squawker/Files"&gt;download Squawker&lt;/a&gt; from &lt;a href="https://bqb.kilnhg.com/"&gt;my public Kiln account&lt;/a&gt; (yup! Kiln now does public repos!) that you can customize for your particular environment. Whenever you push to a central repository, Squawker will notify the HipChat channel of your choice. Branch repositories are explicitly ignored so that everyone&amp;#8217;s little experiments don&amp;#8217;t flood the channel, but it&amp;#8217;s obvious in the code how to change that if you want different behavior.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/t1A2O-jjYhc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/talking-hipchat-kiln/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Join the Fog Creek World Tour!</title>
    <id>/post/join-fog-creek-world-tour/</id>
    <updated>2010-08-26T14:33:05Z</updated>
    <published>2010-08-26T14:33:05Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/3qdWXvrafEg/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;I&amp;#8217;m really proud of all the work that we&amp;#8217;ve been able to pour into &lt;a href="http://www.kilnhg.com"&gt;Kiln&lt;/a&gt; over the last two years. In March of 2009, we had nothing more than a prototype. By October, we had a beta. By January, we were shipping Kiln 1.0. And just a few months later, we followed with Kiln 1.2, which added a massive number of features and really paved the way to making Kiln feel like a well-rounded product.&lt;/p&gt;

&lt;p&gt;Well, we&amp;#8217;re getting ready to launch Kiln 2.0, and we&amp;#8217;re so psyched about it that we&amp;#8217;re doing another &lt;a href="http://worldtour.fogcreek.com/"&gt;World Tour&lt;/a&gt;! So if you&amp;#8217;d like to come take a look at all the new awesomeness in Kiln, or see its awesomeness for the first time, or talk with me about why Kiln is awesome, or tell me why Kiln is totally &lt;em&gt;not&lt;/em&gt; awesome and you&amp;#8217;d never buy, thereby enabling me to fix those things and make it awesome for you anyway, or even just punch me in the face for saying &amp;#8220;awesome&amp;#8221; too much, then you should come. It&amp;#8217;s free, we&amp;#8217;ll have coffee and something that tastes almost but not quite entirely unlike tea, and &lt;a href="http://hicks-wright.net"&gt;Tyler&lt;/a&gt; and I will be giving a mini-boot-camp on why DVCSes will rock your world and how to make that happen. We&amp;#8217;ll even have a nice Q&amp;amp;A session, in case you have specific questions about Mercurial internals, Kiln arcana, or anything else.&lt;/p&gt;

&lt;p&gt;So if you&amp;#8217;re near Denver, Los Angeles, Boston, D.C., or one of the other dozen cities we&amp;#8217;re hitting, &lt;a href="http://worldtour.fogcreek.com/"&gt;sign up for the World Tour&lt;/a&gt;! Worst-case, you can say you met &lt;a href="http://projectaardvark.com"&gt;the star of a major motion picture&lt;/a&gt; and got some free coffee. And who can say no to that?&lt;/p&gt;

&lt;p&gt;See you there!&lt;/p&gt;

&lt;!--99230ef85a4c473a99a71bbe9caf6d17--&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/3qdWXvrafEg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/join-fog-creek-world-tour/</feedburner:origLink></entry>
  <entry xml:base="http://bitquabit.com/feeds-noredirect/atom/technology/">
    <title type="text">Announcing Miniredis</title>
    <id>/post/announcing-miniredis/</id>
    <updated>2010-06-23T10:06:43Z</updated>
    <published>2010-06-23T10:06:43Z</published>
    <link href="http://feedproxy.google.com/~r/bitquabit-technology/~3/VYRgCgr-Tcc/" />
    <author>
      <name />
    </author>
    <content type="html">&lt;p&gt;When I attended &lt;a href="http://opensourcebridge.org/"&gt;Open Source Bridge&lt;/a&gt; two weeks ago, I wanted something to hack on while I was there. The upcoming version of &lt;a href="http://www.kilnhg.com"&gt;Kiln&lt;/a&gt; moves from relying on a combination of explicit threads and &lt;a href="http://www.fogbugz.com"&gt;FogBugz&amp;#8217;&lt;/a&gt; heartbeat mechanism to using a very lightweight queuing system backed by &lt;a href="http://code.google.com/p/redis/"&gt;Redis&lt;/a&gt;. The only problem is that Redis doesn&amp;#8217;t run on Windows, and while that&amp;#8217;s not a problem for Kiln On Demand, where we rely heavily on &lt;a href="http://www.freebsd.org/"&gt;FreeBSD&lt;/a&gt; for key parts of Kiln&amp;#8217;s infrastructure, the licensed version Kiln needs to run on pure Windows systems.&lt;/p&gt;

&lt;p&gt;To fix that, I&amp;#8217;m happy to announce &lt;a href="http://github.com/bpollack/miniredis/"&gt;Miniredis&lt;/a&gt;, a tiny, crappy, pure Python clone of exactly the features in Redis that Kiln&amp;#8217;s queuing system needs in order to work properly for an on-site Windows&amp;#8212;and no others. Say goodbye to TTLs, append-only storage, about 3/4ths of Redis&amp;#8217; command set, and servicing multiple requests simultaneously. But say hello to a quick and dirty way to test and debug a Redis client on a Windows system if you don&amp;#8217;t have a Unix VM handy&amp;#8212;or, like us, you want to do a really lightweight queuing system or similar where you don&amp;#8217;t expect to have a lot of Redis-oriented activity at any given point.&lt;/p&gt;

&lt;p&gt;In the long term, I suspect that Redis will be ported to Windows, making Miniredis&amp;#8217; existence meaningless. If not, maybe some intrepid soul will take the time to add the rest of Redis&amp;#8217; command set (which should actually be easy; just time-consuming). But for now, hopefully you can find a use for it.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bitquabit-technology/~4/VYRgCgr-Tcc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://bitquabit.com/post/announcing-miniredis/</feedburner:origLink></entry>
</feed>

