<?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>sirhc.us maxim.us &#187; Damian Conway</title>
	<atom:link href="http://sirhc.us/tag/damian-conway/feed/" rel="self" type="application/rss+xml" />
	<link>http://sirhc.us</link>
	<description>the pathological prattle of a primal perl programmer</description>
	<lastBuildDate>Fri, 06 Jan 2012 05:04:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OSCON 2008: The Twilight Perl</title>
		<link>http://sirhc.us/oscon-2008-the-twilight-perl/</link>
		<comments>http://sirhc.us/oscon-2008-the-twilight-perl/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 19:22:10 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Damian Conway]]></category>
		<category><![CDATA[ocon2008]]></category>
		<category><![CDATA[OSCON]]></category>
		<category><![CDATA[oscon08]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sirhc.us/journal/?p=277</guid>
		<description><![CDATA[It&#8217;s the last session of the conference, and I saw Damian Conway&#8217;s name on the schedule. So here I am, attending The Twilight Perl. I have no idea what to expect, but come on, it&#8217;s Damian. It&#8217;s got to be &#8230; <a href="http://sirhc.us/oscon-2008-the-twilight-perl/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s the last session of the conference, and I saw Damian Conway&#8217;s name on the schedule.  So here I am, attending <a href="http://en.oreilly.com/oscon2008/public/schedule/detail/2438">The Twilight Perl</a>.  I have no idea what to expect, but come on, it&#8217;s Damian.  It&#8217;s got to be good.</p>
<p>Based on past experience, this is likely to be a fast-paced, highly-entertaining talk.  One which will be impossible to summarize, or no doubt even to explain, here.  Needless to say, if you&#8217;re not here, you&#8217;re missing out.  I intend to sit back, relax, and enjoy.</p>
<p>He&#8217;s talking about the defining characteristic of a hacker.  Particularly when they&#8217;re told that something is impossible and can&#8217;t be done.  The reaction is typically, &#8220;you wanna bet?&#8221;</p>
<p>He just presented a slide that read, &#8220;Let&#8217;s leave behind the shackles of sanity&#8230;&#8221;</p>
<p>Now I&#8217;m scared.</p>
<p>This is a great talk.  It&#8217;s a series of examples of things &#8220;you can&#8217;t do in Perl.&#8221;  At least, not until Damian shows us how.</p>
<p>I think Brad may have <a href="http://www.canspice.org/2008/07/25/oscon-2008-the-twilight-perl-by-damian-conway/">taken notes</a>.  Which is good, because now I wish I had.</p>
<p>[tags]oscon, oscon08, ocon2008, Perl, Damian Conway[/tags]</p>
]]></content:encoded>
			<wfw:commentRss>http://sirhc.us/oscon-2008-the-twilight-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSCON 2008: Tuesday Night Extravaganza</title>
		<link>http://sirhc.us/oscon-2008-tuesday-night-extravaganza/</link>
		<comments>http://sirhc.us/oscon-2008-tuesday-night-extravaganza/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 03:52:37 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Damian Conway]]></category>
		<category><![CDATA[Mark Shuttleworth]]></category>
		<category><![CDATA[OSCON]]></category>
		<category><![CDATA[oscon08]]></category>
		<category><![CDATA[r0ml]]></category>
		<category><![CDATA[White Camel Awards]]></category>

		<guid isPermaLink="false">http://sirhc.us/journal/?p=209</guid>
		<description><![CDATA[It&#8217;s Tuesday evening and all of the tutorials are behind us. I&#8217;ve learned things about Perl no mere mortal should be trusted with, and I found out that Erlang is a really cool language. Now I&#8217;m in the Tuesday evening &#8230; <a href="http://sirhc.us/oscon-2008-tuesday-night-extravaganza/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s Tuesday evening and all of the tutorials are behind us.  I&#8217;ve learned things about Perl no mere mortal should be trusted with, and I found out that Erlang is a really cool language.  Now I&#8217;m in the Tuesday evening keynotes&mdash;or extravaganza, if you believe the marketing hype.  They&#8217;ve started out with a real bang.  Someone, whose name I didn&#8217;t catch, is talking about Python.  As <a href="http://radar.oreilly.com/allison/">Alison Randall</a>, the OSCON program chair said, &#8220;We have three of my favorite speakers, but first,&#8221; there&#8217;s this guy.  Actually, I&#8217;m sure he&#8217;s a perfectly decent chap, I just have very little interest in Python.</p>
<p>Originally, I hadn&#8217;t planned on arriving at the keynote until 9:00pm, when Damian Conway is schedule to speak on <a href="http://en.oreilly.com/oscon2008/public/schedule/detail/4549">Temporally Quaquaversal Virtual Nanomachine Programming In Multiple Topologically Connected Quantum-Relativistic Parallel Timespaces&#8230;Made Easy!</a>.  I mean, granted, I&#8217;m sure I already know all there is to know about it, but it still might be a little interesting.</p>
<p>Anyway, the keynotes got started with <a href="http://en.oreilly.com/oscon2008/public/schedule/speaker/14790">Mark Shuttleworth</a>, the founder of the <a href="http://www.ubuntu.com/">Ubuntu</a> project.  He&#8217;s here to speak to us about &#8220;Free software and the art of software engineering.&#8221;  It (whatever &#8220;it&#8221; is) boils down to three things: innovation, methodologies, and economics.</p>
<p><b>Innovation</b>.  Society has a responsibility to stimulate it.  Innovation is extremely non-linear and the key to this is disclosure, as is done in (or was once done in) academia.  Free Software is the scaffolding for innovation.  The real successes are accessible.  The Mozilla products are examples of wildly successful open platforms, with the extension architecture they have provided.</p>
<p><b>Methodologies</b>.  The purpose of methodologies is to organize talent.  How is Free software changing the direction of these methodologies.  The Free Software people, that is us, are organized and motivated by interest.  A second driving factor is that developers are almost never located near each other, so things like pair programming completely fall apart.  Creating architecture for collaboration and participation is essential to the success of any Free Software process.  While a common set of tools can never be forced upon the community, the ability for a diverse set of tools to communicate with each other is vital.</p>
<p><b>Economics</b>.  It is the combination of the technical change and innovation in economics that really moves the world forward.  For example, we had the Web for years before the business models started to spring up around it and really drove us forward, both technologically and economically.  Today, there is an increasing use of online services, which both drive technology forward and allow platforms to work together, and more often than not, these services are built on Free Software.</p>
<p>Our great task over the next two years is to lift the Linux desktop from something that is stable and works and is not-so-pretty, to something that is art.  At this point, someone started clapping, and a couple of people joined in.  As <a href="http://www.jwz.org/">Jaime Zawinsky</a> once said, &#8220;We should design software that helps our users get laid.&#8221;  But really, we need to make software that is phenomenally useable, beautiful, and functional.</p>
<p>Next up, <a href="http://egofood.blogspot.com/">Chris DiBona</a>, the Open Source program manager at Google, joined Allison on stage to present the <a href="http://en.oreilly.com/oscon2008/public/schedule/detail/3705">Google O&#8217;Reilly Open Source Awards</a>.</p>
<p>Next up, with <a href="http://en.oreilly.com/oscon2008/public/schedule/detail/4717">Exceptional Software Explained: Embrace Error</a> is <a href="http://en.oreilly.com/oscon2008/public/schedule/speaker/6635">Robert &#8220;r0ml&#8221; Lefkowitz</a>.  He is fast becoming one of my favorite speakers.  He&#8217;s here to talk about software development methodologies in Open Source.  This talk is almost a sequel to one he gave last year, <a href="http://sirhc.us/journal/2007/07/27/oscon-2007-an-open-source-lexicon/">An Open Source Lexicon</a>.  He has a real penchant for language, particularly classical language, and how to apply it to themes in the Open Source community.  Unfortunately, because of this very quality, it&#8217;s extremely difficult to write about it as he speaks.  It&#8217;s hard to summarize as he speaks, and he&#8217;s far too entertaining to chance missing what he&#8217;ll say next.</p>
<p>Josh McAdams then took the stage to continue the long standing tradition&mdash;10 years now&mdash;of the <a href="http://en.oreilly.com/oscon2008/public/schedule/detail/4718">White Camel Awards</a>.  So here&#8217;s something I don&#8217;t understand.  What is it that drives people to design award trophies that have a high potential for lethality?  Honestly, don&#8217;t run with them.  They&#8217;re worse than scissors.</p>
<p>Finally, it&#8217;s time for Damian&#8217;s keynote.  But you know what?  I&#8217;m not going to miss any of it to write about it here.  If you missed it, well, you should have been here.</p>
]]></content:encoded>
			<wfw:commentRss>http://sirhc.us/oscon-2008-tuesday-night-extravaganza/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OSCON 2008: Perl Worst Practices</title>
		<link>http://sirhc.us/oscon-2008-perl-worst-practices/</link>
		<comments>http://sirhc.us/oscon-2008-perl-worst-practices/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 18:36:52 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[clever]]></category>
		<category><![CDATA[Damian Conway]]></category>
		<category><![CDATA[obfuscation]]></category>
		<category><![CDATA[OSCON]]></category>
		<category><![CDATA[oscon08]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sirhc.us/journal/?p=198</guid>
		<description><![CDATA[I&#8217;m sitting in Portland 252 for my first tutorial of the day, Perl Worst Practices with Damian Conway. He&#8217;s started off by complimenting us on our intelligence and our ability to convince our bosses or significant others that paying for &#8230; <a href="http://sirhc.us/oscon-2008-perl-worst-practices/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sitting in Portland 252 for my first tutorial of the day, Perl Worst Practices with Damian Conway.  He&#8217;s started off by complimenting us on our intelligence and our ability to convince our bosses or significant others that paying for a worst practices course was a good idea.</p>
<p>Most of us are, of course, aware of the concept of best practice when coding.  Writing code that&#8217;s maintainable, predictable, and follows the rules.  Oh, and uses Java.</p>
<p>Worst practice is, by contrast, code that is obfuscated, unmaintainable, and breaks all of the rules.  Today, we will be studying code that Damian has submitted to the Obfuscated Perl contest.  This promises to be very, very scary.</p>
<p>Damian&#8217;s entry to this contest was <a href="http://www.perlfoundation.org/perl5/index.cgi?selfgol">SelfGOL</a>, a program capable of self-replication, rewriting other Perl programs to themselves self-replicate, detecting un-rewritable programs, playing Conway&#8217;s &#8220;Game of Life,&#8221; and, as if that wasn&#8217;t enough, animating any text as a cycling marquee banner.  The main constraint of the contest is that the entry must be under 1,000 bytes of code, so it shouldn&#8217;t be too difficult to understand.  Obviously it doesn&#8217;t use any modules, because that would be too easy.  Not only that, but it doesn&#8217;t use a single control structure.  This is going to be great.</p>
<p>Following an amusing demonstration of SelfGOL, we moved into treating it as a case study for a set of principles.  Principles that will focus on the very practices SelfGOL embodies, and why they should never, ever be used.  As I intend to enjoy the discussion, I won&#8217;t spend much time writing about the discussion and examples accompanying these principles, but rather simply note the principles for my own benefit (documentation for the win).  After all, sharing all my new tips and tricks would suck all the fun out of it.</p>
<p>Principle 1: Sane and consistent layout makes code more maintainable (but it isn&#8217;t a magic bullet if the code itself is beyond help).</p>
<p>Principle 2: Using built-in features isn&#8217;t necessarily smarter or cleaner (even though fellow developers&#8217; futile struggles to recall those features can be highly amusing).</p>
<p>Principle 3: Obscure obsolete features are obscure and obsolete for a reason (and restasking them for even more obscure purposes is not helping).</p>
<p>Principle 4: Each statement should do one thing only (since that&#8217;s the upper limit most brains can comprehend).</p>
<p>Principle 5: Relying on default behavior makes code very slightly easier to write and vastly harder to read (because most readers can see better than they can think).</p>
<p>Principle 6: Randomly placed subroutine definitionss are static (in the radio interference sense).</p>
<p>Principle 7: Choose data structures that simplify your task (even if the task is to make those data structures incomprehensible).</p>
<p>Principle 8: Just because you use some operation frequently doesn&#8217;t mean it should be in a utility function (especially if it&#8217;s in a function merely to abbreviate its name).</p>
<p>Principle 9: Encapsulating the familiar can decrease maintainability (refactoring isn&#8217;t a substitute for sanity).</p>
<p>Principle 10: Treat any clever one-line solution as an alarm bell (or as an antipersonnel mine with a six-month delay fuse).</p>
<p>Principle 11: Familiarity breeds comprehension (it breeds contempt (but hey, what&#8217; doesn&#8217;t?)).</p>
<p>Principle 12: Table-driven solutions are clean, efficient, and extensible (as long as you don&#8217;t mind losing a little comprehensibility).</p>
<p>Principle 13: Building a messy data structure and then cleaning it up is often easier than building it cleanly in the first place (and to hell with the purists).</p>
<p>Principle 14: Some code is better compiled at run-time (but the urge to use <tt>eval</tt> is Nature&#8217;s way of letting you know there&#8217;s not yet enough pain or misey in your life).</p>
<p>Principle 15: Parentheses are our friends (cos, if you can remember all 24 levels of Perl&#8217;s precedence, you gotta get a life, dude!).</p>
<p>Principle 16: Edge cases suck (and edge cases of familiar constructs suck worst of all).</p>
<p>Principle 17: Code should do what it seems to be doing (especially when it seems to be doing something subtle).</p>
<p>Principle 18: Conceptual elegance is no guarantee of actual maintainability (nor a good substitute for it).</p>
<p>Principle 19: If you&#8217;re going to have default values, define them near the place they may actually be used (or, at least, somewhere they have a slim chance of being discovered).</p>
<p>Principle 20: No matter how good you think your error messages are, they&#8217;re still too brief, too obscure, and too hard to decipher (even if you&#8217;ve already taken Principle 20 into account).</p>
<p>Principle 21: Avoid using obsolete and arcane magic punctuation variables with unfamiliar default values and unexpected global effects (even if you happen to enjoy a little self-inflicted pain in other recreational activities).</p>
<p>Principle 22: The fundamental complexity of any problem is irreducible (optimizations merely redistribute the pain differently).</p>
<p>Principle 23: Code that breaks when it&#8217;s reformatted is already broken (though on a much more profound and interesting level).</p>
<p>Principle 24: If it&#8217;s impossible to understand, it&#8217;ll be impossible to maintain (on the bright side, of course, such code is highly stable).</p>
<p>This last one should, but often doesn&#8217;t, go without saying.</p>
<p>Principle 25: Phenomimetic retrodeterministic nominativism generally does not improve code comprehension (then again, did it sound like it would?).</p>
<p>Principle 26: Don&#8217;t allow dynamic behavior to violate static expectations (and the easiest way to do that is reusing over-scoped variables for unrelated purposes).</p>
<p>Principle 27: Explicit behaviors are better than implicit behaviors (especially when the specification of the implicit behavior is syntactically baroque and hard-to-spot, and the behavior itself is unknown to the majority of developers).</p>
<p>At this late point of the tutorial, <a href="http://www.canspice.org/">Brad</a> pointed out to me that all of these principles are in the included materials.  Now that I&#8217;ve already transcribed so much from the slides, I don&#8217;t have the heart to delete it all.  Of course, since I haven&#8217;t been commenting on all of the black magic to this point, there would then be very little in the end to post.  Brad also has a much better <a href="http://www.canspice.org/2008/07/22/oscon-2008-perl-worst-practices-by-damian-conway/">post</a> about this tutorial, since he actually took real notes.</p>
<p>Principle 28: Code that pre-caches or precomputes its data is much easier to maintain than code that caches or computes on-the-fly (when you&#8217;re running at multiple gigahertz, acquiring your data a few thousand operations early is still plenty JIT enough).</p>
<p>Principle 29: Coding is an art, but code shouldn&#8217;t be art (evolution made programmers boring, pedestrian, and aesthetically challenged for good reasons).</p>
<p>It&#8217;s mesmerizing to listen to the thought process behind Damian&#8217;s obfuscated code.  I can&#8217;t help but wonder if this well-organized, well-thought-out explanation is anything close to how Damian designed this program.  Or, rather, if there are extremely convoluted, scary, and most importantly, evil gears grinding away inside his head.  In fact, I suspect this entire tutorial may have been designed purely as a way of documenting SelfGOL so Damian himself can remember how it works.  Clever.</p>
<p>This kind of programming is silly and fun, but it serves a real purpose.  Pushing the limits of a language teaches about its dark places.  The understanding that comes from it vastly improves the skills of the programmer, even if&mdash;especially if&mdash;the bad things are never, ever used.  Perl, even more than other languages, encourages this kind of play, thanks to its rich diversity and culture.</p>
<p>Important safety tip: keep these tricks and contrivances for recreational purposes only.</p>
<p>I don&#8217;t know what&#8217;s more disturbing, how much of the tutorial I understood, or how much I already knew coming in.</p>
<p>[tags]oscon, oscon08, Perl, Damian Conway[/tags]</p>
]]></content:encoded>
			<wfw:commentRss>http://sirhc.us/oscon-2008-perl-worst-practices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

