<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tavish Armstrong&#039;s blog</title>
	<atom:link href="http://tavisharmstrong.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tavisharmstrong.com</link>
	<description></description>
	<lastBuildDate>Sun, 02 Dec 2012 05:03:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Phergie refactoring idea</title>
		<link>http://tavisharmstrong.com/2012/11/29/phergie-refactoring-idea/</link>
		<comments>http://tavisharmstrong.com/2012/11/29/phergie-refactoring-idea/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 19:14:58 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[The Performance of Open Source Applications]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[engineering]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=560</guid>
		<description><![CDATA[I&#8217;m taking a course this semester on software architecture &#8212; the high level design principles that go into building high-quality, maintainable software. The class is generally pretty decent, but the best part of it is the project. Over the course of the semester, teams have to learn and describe the architecture of an open source [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m taking a course this semester on software architecture &mdash; the high level design principles that go into building high-quality, maintainable software. The class is generally pretty decent, but the best part of it is the project. Over the course of the semester, teams have to learn and describe the architecture of an open source project; analyze how design patterns and design principles are applied; critique parts of the project that could benefit from refactoring; and then actually refactor the code &#8212; and if you&#8217;re feeling brave &#8212; submit the change back to the project.</p>
<p>My group is studying <a href="http://phergie.org/">Phergie</a>, an <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> bot that can moderate and perform administrative tasks on IRC channels. It can also do a few other fun things like pretend to &#8220;serve beer&#8221; to channel users, look up documentation for PHP code, etc.</p>
<p>We&#8217;re encouraged to get on project mailing lists and bug trackers and introduce ourselves to the developers. I did so and <a href="https://groups.google.com/forum/?fromgroups=#!topic/phergie/pb9IuHdAOhE/discussion">Matthew Turland</a> was kind enough to give us suggestions on how to contribute back to the project &mdash; and even give me feedback on my homework!</p>
<p>I&#8217;ll post that homework here with some context. The goal is to find a <a href="http://en.wikipedia.org/wiki/Code_smell">&#8220;code smell&#8221;</a> or some other kind of architectural defect; describe it; and then suggest a fix (a &#8220;refactoring&#8221;). We&#8217;re given points for ambition and we don&#8217;t actually have to <em>implement</em> the change &mdash; so we&#8217;re not limited by our ability to actually refactor the code.</p>
<h3>Refactoring a large class in Phergie</h3>
<div class="figure">
<img src="http://tavisharmstrong.com/phergie/commits.png" alt="Most often changed files. The blue line is the mean and the red line is one standard deviation above the mean." />
<p class="caption">Figure 1. Most often changed files. The blue line is the mean and the red line is one standard deviation above the mean.</p>
</div>
<p>I began my search for code smells by ranking the files by the number of commits in the git log that touched each file (see Figure 1.) <strong>(Edit: This idea comes from Michael Feathers&#8217;s talk <a href="http://www.youtube.com/watch?v=0eAhzJ_KM-Q">here</a> and if you think this sort of thing is cool, you should read his blog <a href="http://michaelfeathers.typepad.com/">here</a>.)</strong> The most committed-to file is also one of the largest at 740 lines of code &#8212; <code>Phergie/Driver/Streams.php</code>, which contains the <code>Phergie_Driver_Streams</code> class. Ostensibly, this class is for handling the TCP connection to the IRC server. I noticed two things immediately:</p>
<ol style="list-style-type: decimal">
<li><code>Phergie_Driver_Streams</code> is the sole child class of <code>Phergie_Driver_Abstract</code>. In my opinion, this is an over-generalization: there appears to be no reason (nor a plan) to have a non-streams-based implementation.</li>
<li><code>Phergie_Driver_Streams</code> is not only responsible for handling the connection to the server; it is also responsible for parsing and formatting IRC commands. The class is so large because it contains methods pertaining to both responsibilities, and methods that are (arguably) too large because they perform both duties as well.</li>
</ol>
<p>For 1), the obvious solution is to flatten the hierarchy and use only the <code>Streams</code> class. For 2), my proposed solution is (see the provided UML diagrams):</p>
<ol style="list-style-type: decimal">
<li>Move the parsing logic from <code>getEvent()</code> to its own method called <code>parseEvent()</code></li>
<li>Move the <code>parseEvent()</code> method to a new class called <code>Phergie_IRC_Command_Handler</code>.</li>
<li>Move the formatting logic from <code>send()</code> to its own method called <code>formatCommand()</code>.</li>
<li>Move the <code>formatCommand()</code> method and all methods starting with <code>do</code> to <code>Phergie_IRC_Command_Handler</code>.</li>
</ol>
<p>My best estimate is that this would split the class into two files with lengths of approximately 400 lines of code. This is closer to the mean (227 LOC) and in my opinion much more manageable and understandable &#8212; each class has more clearly defined responsibility.</p>
<div class="figure">
<img src="http://tavisharmstrong.com/phergie/refactor-1.png" alt="Current architecture of the IRC/TCP subsystem in Phergie" />
<p class="caption">Figure 2. Current architecture of the IRC/TCP subsystem in Phergie</p>
</div>
<div class="figure">
<img src="http://tavisharmstrong.com/phergie/refactor-2.png" alt="Proposed refactoring of the IRC/TCP subsystem in Phergie" />
<p class="caption">Figure 3. Proposed refactoring of the IRC/TCP subsystem in Phergie</p>
</div>
<h3>What did the lead Phergie developer think of it?</h3>
<p>I <a href="https://groups.google.com/forum/?fromgroups=#!topic/phergie/pb9IuHdAOhE">posted</a> an earlier draft of this to the mailing list and Matthew Turland, the lead developer responded:</p>
<blockquote><p>I agree that Phergie_Driver_Streams handling parsing and generation of IRC commands is part of why it&#8217;s so large, which is why I&#8217;m moving those into separate classes (and even libraries) in Phergie 3. See https://github.com/phergie/phergie-irc-parser and https://github.com/phergie/phergie-irc-generator. (These also use a Phergie\Irc subnamespace, in anticipation of one or more Jabber drivers also being developed.) See also https://github.com/phergie/phergie-irc-client-react, which is still very much in development but is an example of a driver implementation that still makes use of streams, but in a somewhat different way (because it uses the React library).</p></blockquote>
<p>So, that&#8217;s cool: I accidentally anticipated a change that he had already made for Phergie 3 (which I didn&#8217;t realize existed). He decided to split the new class into a parser and a generator &mdash; something I chose not to do in my report for the sake of simplicity.</p>
<p>I&#8217;m also really pleased at how welcoming Matt&#8217;s been so far; he&#8217;s getting practically nothing in return except a bug fix or two (maybe) and he&#8217;s still more than willing to take the time to coddle newcomers like us. What a nice guy!</p>
<h3>What a cool project!</h3>
<p>This is a really great idea for a project; although not everyone is going to feel like sticking their neck out and embarrassing themselves on the internet like I did, it&#8217;s still a great opportunity to learn from more experienced developers and think about theory in the context of actual software. I certainly learned a lot and had a blast doing it.</p>
<p>Now if only the course also spent some time looking at <a href="http://aosabook.org">more systems, as described by their developers&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/11/29/phergie-refactoring-idea/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Semi-Coherent Review of PyCon Canada 2012</title>
		<link>http://tavisharmstrong.com/2012/11/27/a-semi-coherent-review-of-pycon-canada-2012/</link>
		<comments>http://tavisharmstrong.com/2012/11/27/a-semi-coherent-review-of-pycon-canada-2012/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 22:20:36 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=547</guid>
		<description><![CDATA[Two weeks ago I was foolish enough to take a few days to escape from university life long enough to go to PyCon Canada, a nice little conference in Toronto that can only be described with words that end with exclamation marks: fantastic!, awesome!, etc. I’m no veteran of tech conferences — this was, I [...]]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago I was foolish enough to take a few days to escape from university life long enough to go to <a href="http://pycon.ca">PyCon Canada</a>, a nice little conference in Toronto that can only be described with words that end with exclamation marks: <em>fantastic!</em>, <em>awesome!</em>, etc. I’m no veteran of tech conferences — this was, I think, the ninth I’ve ever attended<sup><a href="#fn1" class="footnoteRef" id="fnref1">1</a></sup> — so I have a narrow view of what conferences can look like.</p>
<p>This was, however, the first non-student conference I’ve been to without it being related to work. That was <em>nice</em> — I could just relax and watch the talks and hang out with fellow Python enthusiasts like my friend (and former co-worker) <a href="http://j-vk.com">Jon “VK” Villemaire-Krajden</a>. That also drew attention to something I noticed about the conference: it was delightfully non-commercial, as far as conferences go. Sure, there were sponsors, and the sponsors said things at the microphone, and there was an area where you could schmooze with the sponsors — but on the whole, it felt like a conference of enthusiasts and open source people, not people trying to sell things.</p>
<h3 id="people-who-spoke-words">People who spoke words</h3>
<p><a href="http://pyvideo.org/video/1560/saturday-morning-keynote">Jessica McKellar</a> started things off with a talk on fostering a welcoming open source community. Near the beginning of her talk, she told a story about her time as an instructor at Hacker School: they took a few whiteboards and wrote questions on them like “What are your fears as a programmer?” She showed a slide with a bunch of students’ answers and it <em>really</em> resonated with me.</p>
<p>Sometimes programming is hard because it is hard, and sometimes programming is hard because of seemingly silly, trivial emotions. Sometimes programming is hard because you’re afraid of breaking something. Or because you’re afraid of looking stupid on the internet. Or because you’re afraid of looking stupid <em>off</em> the internet. Recognizing these things and talking about these things is more important than it sounds. To me, seeing this really smart open source hacker on a stage talk about these things and admit that they, too, are afraid of not being smart enough is so much more encouraging than just knowing that I <em>can</em> contribute to open source.</p>
<p><a href="https://www.youtube.com/watch?v=8gkrE6q9Tzw">Michael Feathers</a> spoke about functional programming. I’ve been drinking the FP Kool-Aid for a while now, so it wasn’t a mind-blowing talk for me; but he had a way with words and said what other people have been saying, but <em>better</em>. I’m not sure what his exact words are, but he said something along the lines of “these functional things are cool because you need to learn them only once,” that is, a lot of those functional programming tools that people talk about are pre-packaged general, common algorithms. Sure, you can get the job done in two nested for-loops, but maybe using someone <em>else</em>’s for-loops will work out better?</p>
<p><a href="http://pyvideo.org/video/1605/science-and-python-retrospective-of-a-mostly-s">Fernando Perez</a> ended the conference on a high note with his talk on the IPython Notebook, a browser-based tool for Python programming. The IPython Notebook is a bit like a REPL, a bit like an IDE, but the main idea is that it’s <em>in the browser</em>. That means if you write code that generates an image, it can show the image alongside your code. It means that if you have code that outputs a protein, the result can be an interactive 3D model. This project is so cool that I’ve wasted spent more time than I care to admit playing with it since the conference.</p>
<h3 id="code-sprints">Code Sprints!</h3>
<p>I wasn’t in town for long — and I wanted to spend some time with friends — but I did manage to drop by the code sprints for a while. The sprints were at the <a href="http://ladieslearningcode.com/">Ladies Learning Code</a> space near Honest Ed’s, a lovely little building with a pretty decent cafe in the basement.</p>
<p>Sleep deprivation might have done strange things to me, but I’m <em>pretty sure</em> these things happened:</p>
<ul>
<li>
<p>Pizza with beet slices instead of pepperoni (awesome)</p>
</li>
<li>
<p>I had a really nice chat with Fernando Perez about IPython. And then he got me a cortado, which was incredibly sweet of him.</p>
</li>
<li>
<p>After I thanked Diana Clark for putting on the conference and generally being awesome, <em>she gave me a hug</em>. I swear to Guido, she almost made me cry.</p>
</li>
</ul>
<p>Although I wasn’t around to see much, it does sound like a lot got done at the sprint. I’ll be sure to stick around longer next time.</p>
<h3 id="things-that-were-not-good-about-this-conference">Things that were not good about this conference</h3>
<p>I really don’t have anything bad to say about how the conference was run. Really. Sure, the venue was cold the first day. The wireless was a bit patchy here and there. But whatever. Did I mention my ticket cost $25?</p>
<p>Personally, I think all “code sprints” should be called “Happy Fun Best Friends Coding Club But Also Testing and Documentation and Learning Extravaganza,” but sports and athletics metaphors are, unfortunately, thoroughly entrenched in the software world and I suppose I’m not going to win this one. <em>Sigh</em>.</p>
<p>Oh, and it may not surprise you to hear that I detected a substantial dose of Python elitism. I like Python too, but can we all try not to alienate PHP and Java developers? Couldn&#8217;t hurt, anyways.</p>
<h3 id="would-i-go-again-would-i-bring-a-friend">Would I go again? Would I bring a friend?</h3>
<p>Yes and yes.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn1">
<p>Woah. When did that happen?<a href="#fnref1">↩</a></p>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/11/27/a-semi-coherent-review-of-pycon-canada-2012/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pizza</title>
		<link>http://tavisharmstrong.com/2012/11/01/pizza/</link>
		<comments>http://tavisharmstrong.com/2012/11/01/pizza/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 12:55:16 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[food]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=545</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://tavisharmstrong.com/photos/pizza.JPG" alt="Pizza" /></center></p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/11/01/pizza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting the Patriot USB wireless adapter to work with the BeagleBone</title>
		<link>http://tavisharmstrong.com/2012/10/31/getting-the-patriot-usb-wireless-adapter-to-work-with-the-beaglebone/</link>
		<comments>http://tavisharmstrong.com/2012/10/31/getting-the-patriot-usb-wireless-adapter-to-work-with-the-beaglebone/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 03:34:40 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=543</guid>
		<description><![CDATA[(For the benefit of fellow &#8220;embedded systems&#8221; students&#8230;) If you&#8217;re having trouble getting the Patriot USB wireless adapter working with the BeagleBone, I found this Raspberry Pi forum post really useful. You have to change the commands slightly for the Beagle. To download the driver and install it, run the following on your Beagle: ubuntu@arm [...]]]></description>
			<content:encoded><![CDATA[<p><em>(For the benefit of fellow &#8220;embedded systems&#8221; students&#8230;)</em></p>
<p>If you&#8217;re having trouble getting the Patriot USB wireless adapter working with the BeagleBone, I found <a href="http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;t=5590&amp;sid=1bb453d04b03963065d0bfd68c5ca54d">this Raspberry Pi forum post</a> really useful. You have to change the commands slightly for the Beagle.</p>
<p>To download the driver and install it, run the following on your Beagle:</p>
<pre class="sourceCode bash"><code class="sourceCode bash">ubuntu@arm $ <span class="kw">wget</span> http://tavisharmstrong.com/stuff/8192cu.tar.gz
ubuntu@arm $ <span class="kw">tar</span> xf 8192cu.tar.gz
ubuntu@arm $ <span class="kw">sudo</span> <span class="kw">install</span> -p -m 644 8192cu.ko /lib/modules/3.2.30-x14/kernel/drivers/net/wireless/
ubuntu@arm $ <span class="kw">sudo</span> depmod -a</code></pre>
<p>Then reboot the Beagle:</p>
<pre class="sourceCode bash"><code class="sourceCode bash">ubuntu@arm $ <span class="kw">sudo</span> reboot</code></pre>
<p>And then turn on wireless with <code>ifconfig</code></p>
<pre class="sourceCode bash"><code class="sourceCode bash">ubuntu@arm $ <span class="kw">sudo</span> ifconfig wlan0 up
ubuntu@arm $ <span class="kw">sudo</span> ifconfig
ubuntu@arm $ <span class="kw">sudo</span> iwlist wlan0 scanning</code></pre>
<p>The last command (the one with <code>scanning</code> in it) should output a list of the available wireless networks. If you&#8217;re in the lab, you should see ConcordiaUniversity on there.</p>
<p>Hope that works! Say so in the comments if it doesn&#8217;t work for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/10/31/getting-the-patriot-usb-wireless-adapter-to-work-with-the-beaglebone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Teensy/Arduino timer simulator</title>
		<link>http://tavisharmstrong.com/2012/10/03/teensyarduino-timer-simulator/</link>
		<comments>http://tavisharmstrong.com/2012/10/03/teensyarduino-timer-simulator/#comments</comments>
		<pubDate>Wed, 03 Oct 2012 21:52:37 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[school]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=536</guid>
		<description><![CDATA[I built a simulator for the 16-bit timer in the Teensy++/Arduino microcontroller in the hopes that people (e.g. fellow students of SOEN 422) might find it useful. Keep in mind that it&#8217;s a work in progress and has some bugs. A Simple and Interactive Explanation of the Teensy&#8217;s 16-bit timer (Timer1).]]></description>
			<content:encoded><![CDATA[<p>I built a simulator for the 16-bit timer in the Teensy++/Arduino microcontroller in the hopes that people (e.g. fellow students of SOEN 422) might find it useful. Keep in mind that it&#8217;s a work in progress and has some bugs. <a href="http://tavisharmstrong.com/timer1/">A Simple and Interactive Explanation of the Teensy&#8217;s 16-bit timer (Timer1)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/10/03/teensyarduino-timer-simulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The book is coming along&#8230;</title>
		<link>http://tavisharmstrong.com/2012/07/21/the-book-is-coming-along/</link>
		<comments>http://tavisharmstrong.com/2012/07/21/the-book-is-coming-along/#comments</comments>
		<pubDate>Sat, 21 Jul 2012 16:46:27 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[The Performance of Open Source Applications]]></category>
		<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=532</guid>
		<description><![CDATA[Yesterday, on the AOSA/POSA blog, I wrote: A few weeks ago Greg posted about the next book we’re doing: The Performance of Open Source Applications. Well, we don’t have a book yet, but we’ve made some progress. Earlier this week we had our 15th &#8220;yes&#8221; from an author, which puts us close to the chapter [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, on the <a href="http://www.aosabook.org/blog/2012/07/taste-posa/">AOSA/POSA blog</a>, I wrote:</p>
<blockquote><p>
A few weeks ago Greg posted about the next book we’re doing: The Performance of Open Source Applications. Well, we don’t have a book yet, but we’ve made some progress. Earlier this week we had our 15th &#8220;yes&#8221; from an author, which puts us close to the chapter counts of AOSA. We’re excited about that and we hope you are too.
</p></blockquote>
<p>Hooray!</p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/07/21/the-book-is-coming-along/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Performance of Open Source Applications</title>
		<link>http://tavisharmstrong.com/2012/06/28/the-performance-of-open-source-applications/</link>
		<comments>http://tavisharmstrong.com/2012/06/28/the-performance-of-open-source-applications/#comments</comments>
		<pubDate>Fri, 29 Jun 2012 03:51:29 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=527</guid>
		<description><![CDATA[If you&#8217;ve spoken to me in the last few weeks you&#8217;ve probably heard that I&#8217;m co-editing a book on software performance. Well, we&#8217;re finally announcing it. From the AOSA blog: We are pleased to announce that we are starting work on a third book in this series, which will be titled The Performance of Open [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve spoken to me in the last few weeks you&#8217;ve probably heard that I&#8217;m co-editing a book on software performance. Well, we&#8217;re finally announcing it. From the <a href="http://aosabook.org/blog/">AOSA blog</a>:</p>
<blockquote><p>We are pleased to announce that we are starting work on a third book in this series, which will be titled <em>The Performance of Open Source Applications</em>. Each chapter will discuss a performance issue in a real open source system—it could be an over-the-shoulder view of how a performance problem was fixed, a discussion of how design decisions affected performance in a particular application, or something else along those lines. Each entry will be 12-15 pages long, and we hope to have first drafts by October so that we can publish the book in Spring 2013. As with AOSA, royalties will go to Amnesty International and the book will be available for free online under a Creative Commons license. If you are interested in participating, please contact us at <a href="mailto:posabook@gmail.com">posabook@gmail.com</a>.</p>
<p>Why performance rather than architecture? Because it&#8217;s something that every programmer has to deal with eventually, but which is usually left out of their education. The last general book on making programs fast that we know of was Jon Louis Bentley&#8217;s <em><a href="http://www.amazon.com/Writing-Efficient-Programs-Prentice-Hall-Software/dp/0139702512/">Writing Efficient Programs</a></em>, which was published thirty years ago. There have been lots of more specialized books since (we&#8217;re particularly fond of Steve Souders&#8217; <em><a href="http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/">High Performance Web Sites</a></em> and <em><a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304/">Even Faster Web Sites</a></em>, and of John Lakos&#8217;s <em><a href="http://www.amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620/">Large-Scale C++ Software Design</a></em>), but we think the time is right for something that touches on everything from squeezing the last few cycles out of every precious milliwat in an embedded sensor to maximizing throughput of large-scale e-commerce applications. We hope you&#8217;ll think so too, and we look forward to hearing from you.</p>
</blockquote>
<p>My co-editor is Tony Arkles, a graduate student at the University of Saskatoon.</p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/06/28/the-performance-of-open-source-applications/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Architecture of Open Source Applications, Volume 2</title>
		<link>http://tavisharmstrong.com/2012/05/08/the-architecture-of-open-source-applications-volume-2/</link>
		<comments>http://tavisharmstrong.com/2012/05/08/the-architecture-of-open-source-applications-volume-2/#comments</comments>
		<pubDate>Wed, 09 May 2012 02:11:29 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=516</guid>
		<description><![CDATA[The second volume of The Architecture of Open Source Applications was just released thanks to the hard work of Amy Brown and Greg Wilson. I had the privilege of helping copyedit a few chapters of the book. Here&#8217;s the blurb: Architects look at thousands of buildings during their training, and study critiques of those buildings [...]]]></description>
			<content:encoded><![CDATA[<p>The second volume of <a href="http://aosabook.org/">The Architecture of Open Source Applications</a> was just released thanks to the hard work of <a href="http://www.amyrbrown.ca/index.html">Amy Brown</a> and <a href="http://third-bit.com/">Greg Wilson</a>. I had the privilege of helping copyedit a few chapters of the book. Here&#8217;s the blurb:</p>
<blockquote><p>
Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well &mdash; usually programs they wrote themselves &mdash; and never study the great programs of history. As a result, they repeat one another’s mistakes rather than building on one another’s successes. </p>
<p>This second volume of The Architecture of Open Source Applications aims to change that. In it, the authors of twenty-four open source applications explain how their software is structured, and why. What are each program&#8217;s major components? How do they interact? And what did their builders learn during their development? In answering these questions, the contributors to this book provide unique insights into how they think.
</p></blockquote>
<p>Go buy it <a href="http://www.lulu.com/shop/amy-brown-and-greg-wilson/the-architecture-of-open-source-applications-volume-ii/paperback/product-20111008.html">at Lulu</a> (ebook versions will also be available). It&#8217;ll be available on Amazon at some point, but Lulu is preferred, because a greater percentage of the price goes towards royalties &mdash; which are going to Amnesty International.</p>
<p><del>A free online version will be up at some point next week.</del> The online version is available <a href="http://aosabook.org" title="The Architecture of Open Source Applications">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/05/08/the-architecture-of-open-source-applications-volume-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diversity in practice: How the Boston Python User Group grew to 1700 people and over 15% women</title>
		<link>http://tavisharmstrong.com/2012/03/18/diversity-in-practice-how-the-boston-python-user-group-grew-to-1700-people-and-over-15-women/</link>
		<comments>http://tavisharmstrong.com/2012/03/18/diversity-in-practice-how-the-boston-python-user-group-grew-to-1700-people-and-over-15-women/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 23:37:05 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=512</guid>
		<description><![CDATA[The sheer humility, honesty, and deliberate action these two people took to fight a problem they saw in the world is inspiring. They listened to people, really listened to people, and didn&#8217;t shy away from the faults in their approach. This is the most practical guide for how to get fresh blood into programming that [...]]]></description>
			<content:encoded><![CDATA[<p><iframe width="500" height="369" src="http://www.youtube.com/embed/QrITN6GZDu4" frameborder="0" allowfullscreen></iframe></p>
<p>The sheer humility, honesty, and deliberate action these two people took to fight a problem they saw in the world is inspiring. They listened to people, <em>really</em> listened to people, and didn&#8217;t shy away from the faults in their approach. This is the most practical guide for how to get fresh blood into programming that I&#8217;ve seen yet.</p>
<p>I haven&#8217;t been programming for that long. Three years ago, when I was in my first year of school, I really wanted to learn how to program. At that point, I had considered going to Montreal Python meetups, but I was too shy and didn&#8217;t think I&#8217;d know what was going on, or that I wouldn&#8217;t fit in. So when people make an effort to reach shy outsiders, especially people who are minorities in the development community who may feel even more shy than I did for that reason, it makes me really happy.</p>
<blockquote><p>[On advertising workshops:] Make the tone very clear. We&#8217;re about being inclusive and growing communities, and not about being exclusive. So if you&#8217;re just a little bit careful about your language there, I think you&#8217;ll find that everyone is thrilled to support you in this. Men, women, everyone. &mdash; Jessica McKellar</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/03/18/diversity-in-practice-how-the-boston-python-user-group-grew-to-1700-people-and-over-15-women/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Winner of the 2012 Spam Comments Award goes to&#8230;</title>
		<link>http://tavisharmstrong.com/2012/03/15/winner-of-the-2012-spam-comments-award-goes-to/</link>
		<comments>http://tavisharmstrong.com/2012/03/15/winner-of-the-2012-spam-comments-award-goes-to/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 11:30:59 +0000</pubDate>
		<dc:creator>tavisharmstrong</dc:creator>
				<category><![CDATA[funny]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://tavisharmstrong.com/?p=504</guid>
		<description><![CDATA[Long time fan and reader of the Tavish Armstrong blog, 2012 UEFA Euro Football Cup, had this pithy quote to share: Make no judgments where you have no compassion. &#8212; Anne McCaffrey In that vein, Adrian Chen&#8217;s profile of Horse_ebooks is worth a read. Spambots are starting to get really weird.]]></description>
			<content:encoded><![CDATA[<p>Long time fan and reader of the Tavish Armstrong blog, 2012 UEFA Euro Football Cup, had this pithy quote to share:</p>
<blockquote><p>
Make no judgments where you have no compassion. &#8212; Anne McCaffrey
</p></blockquote>
<p>In that vein, Adrian Chen&#8217;s <a href="http://gawker.com/5887697/how-i-found-the-human-being-behind-horseebooks-the-internets-favorite-spambot">profile of Horse_ebooks</a> is worth a read. Spambots are starting to get really weird.</p>
]]></content:encoded>
			<wfw:commentRss>http://tavisharmstrong.com/2012/03/15/winner-of-the-2012-spam-comments-award-goes-to/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
