<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Passing Curiosity: Posts tagged lca</title>
    <link href="https://passingcuriosity.com/tags/lca/lca.xml" rel="self" />
    <link href="https://passingcuriosity.com" />
    <id>https://passingcuriosity.com/tags/lca/lca.xml</id>
    <author>
        <name>Thomas Sutton</name>
        
        <email>me@thomas-sutton.id.au</email>
        
    </author>
    <updated>2010-01-18T00:00:00Z</updated>
    <entry>
    <title>Attribute Oriented Programming in PHP</title>
    <link href="https://passingcuriosity.com/2010/oplm2010-4-aop-in-php/" />
    <id>https://passingcuriosity.com/2010/oplm2010-4-aop-in-php/</id>
    <published>2010-01-18T00:00:00Z</published>
    <updated>2010-01-18T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The fourth talk at the <a href="http://blogs.tucs.org.au/oplm/">Open Programming Language Miniconf 2010</a> was
Peter Serwylo’s presentation about <em><a href="http://blogs.tucs.org.au/oplm/programme/#aopphp">Attribute Oriented Programming in
PHP</a></em>. His <a href="http://lca2010.serwylo.com/">notes</a> are available online.</p>
<h2 id="attributes">Attributes</h2>
<p>Attributes are “extra” bits embedded in source code that doesn’t <em>necessarily</em>
mean anything in the language. Common examples include the documentation
annotations in many comment systems (such as the tags used in Javadoc
comments), JVM annotations, and .Net attributes.</p>
<p>A testing framework, for example, might use a <code>TestFunction</code> attribute to
identify which methods should be called.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode java"><code class="sourceCode java"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="at">@TestFunction</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="kw">public</span> function <span class="fu">testValidation</span><span class="op">()</span> <span class="op">{</span><span class="kw">...</span><span class="op">}</span></span></code></pre></div>
<div class="sourceCode" id="cb2"><pre class="sourceCode cs"><code class="sourceCode cs"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="op">[</span>TestFunction<span class="op">]</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="kw">public</span> function <span class="fu">testValidation</span><span class="op">()</span> <span class="op">{...}</span></span></code></pre></div>
<h2 id="use-cases">Use cases</h2>
<p>In Java EE you have “beans” which encapsulate business logic. Each bean
requires a bunch of wrappers for remote access, “home” access (whatever that
means), XML files, etc. Keeping all this relatively “boiler-plate” code in
synch is painful. Annotating the bean classes and methods with attributes
makes it possible to generate most of this automatically. No more manual
synching XML files.</p>
<p>Java, though, (as of Java 5) has built in support for <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html">annotations</a> and
is a compiled language. This makes it relatively simple to do this analysis
and generation at build time. PHP, on the other hand, doesn’t have an
annotation mechanism and doesn’t <em>have</em> a built time.</p>
<p>Instead, Peter’s approach is to use PHP comments to add the attributes. At
load time, these comments are processed using the reflection API and this is
used to build a data structure to use for access control. See the
<a href="http://lca2010.serwylo.com/06_ivt_example.html">permissions example</a>.</p>
<h2 id="a-more-complex-case">A more complex case</h2>
<p>To take this a little further, Peter <a href="http://lca2010.serwylo.com/07_php_zend_example.html">wrote a Zend
extension</a> that makes it
possible to [sort of] do aspect oriented programming (on function points) in
PHP. The <code>add_function_hook()</code> function allows you to register an attribute
and a callback and the extension will call your callback before a function
with that attribute is executed:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode php"><code class="sourceCode php"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="kw">&lt;?php</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="kw">class</span> RequiresLogging</span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>{</span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>	<span class="co">/**</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="co">	 * </span><span class="an">@log</span><span class="co"> notice &quot;Secret action performed by user [user]</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a><span class="co">	 */</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a>	<span class="kw">public</span> <span class="kw">function</span> secretAction()</span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a>	{</span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a>		<span class="co">// perform secret action...</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a>	}</span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a>}</span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a><span class="co">// </span></span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a><span class="co">// The callback function</span></span>
<span id="cb3-17"><a href="#cb3-17" aria-hidden="true" tabindex="-1"></a><span class="co">//</span></span>
<span id="cb3-18"><a href="#cb3-18" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> performLog( <span class="va">$message</span> )</span>
<span id="cb3-19"><a href="#cb3-19" aria-hidden="true" tabindex="-1"></a>{</span>
<span id="cb3-20"><a href="#cb3-20" aria-hidden="true" tabindex="-1"></a>	<span class="va">$parts</span> <span class="op">=</span> <span class="cn">split</span>( <span class="st">&quot; &quot;</span><span class="ot">,</span> <span class="va">$message</span><span class="ot">,</span> <span class="dv">2</span> )<span class="ot">;</span></span>
<span id="cb3-21"><a href="#cb3-21" aria-hidden="true" tabindex="-1"></a>	<span class="va">$level</span> <span class="op">=</span> <span class="va">$parts</span>[<span class="dv">0</span>]<span class="ot">;</span></span>
<span id="cb3-22"><a href="#cb3-22" aria-hidden="true" tabindex="-1"></a>	<span class="va">$message</span> <span class="op">=</span> <span class="va">$parts</span>[<span class="dv">1</span>]<span class="ot">;</span></span>
<span id="cb3-23"><a href="#cb3-23" aria-hidden="true" tabindex="-1"></a>	Logger::<span class="fu">log</span>( <span class="va">$level</span><span class="ot">,</span> <span class="va">$message</span> )<span class="ot">;</span></span>
<span id="cb3-24"><a href="#cb3-24" aria-hidden="true" tabindex="-1"></a>}</span>
<span id="cb3-25"><a href="#cb3-25" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-26"><a href="#cb3-26" aria-hidden="true" tabindex="-1"></a><span class="co">// </span></span>
<span id="cb3-27"><a href="#cb3-27" aria-hidden="true" tabindex="-1"></a><span class="co">// Register the callback</span></span>
<span id="cb3-28"><a href="#cb3-28" aria-hidden="true" tabindex="-1"></a><span class="co">// </span></span>
<span id="cb3-29"><a href="#cb3-29" aria-hidden="true" tabindex="-1"></a>add_function_hook( <span class="st">&quot;log&quot;</span><span class="ot">,</span> <span class="st">&quot;performLog&quot;</span> )<span class="ot">;</span></span>
<span id="cb3-30"><a href="#cb3-30" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-31"><a href="#cb3-31" aria-hidden="true" tabindex="-1"></a><span class="co">// Now code like this will result in a log message being recorded</span></span>
<span id="cb3-32"><a href="#cb3-32" aria-hidden="true" tabindex="-1"></a><span class="va">$object</span> <span class="op">=</span> <span class="kw">new</span> RequiresLogging()<span class="ot">;</span></span>
<span id="cb3-33"><a href="#cb3-33" aria-hidden="true" tabindex="-1"></a><span class="va">$object</span>-&gt;secretAction()<span class="ot">;</span></span></code></pre></div>
<p>This type approach is flexible and extremely powerful. You can inject
permission checking code and raise an exception before the real function is
even called.</p>
<p>There are a bunch of memory leaks and possible bugs in the Zend extension, but
it is working and in production use!</p>]]></summary>
</entry>
<entry>
    <title>Notes on Preparing for PHP6</title>
    <link href="https://passingcuriosity.com/2010/oplm2010-3-php6/" />
    <id>https://passingcuriosity.com/2010/oplm2010-3-php6/</id>
    <published>2010-01-18T00:00:00Z</published>
    <updated>2010-01-18T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The third talk at the <a href="http://blogs.tucs.org.au/oplm/">Open Programming Language Miniconf 2010</a> was
by <a href="http://benbalbo.com/">Ben Balbo</a> presentation about <em><a href="http://blogs.tucs.org.au/oplm/programme/#php6">Preparing for PHP6</a></em>. Though the
slides were a little hard to read – Ben used one of those horrible
hand-writing style fonts – it was chockablock full of useful information.</p>
<p>He started with a list of things that have been removed or altered in PHP6 and
then described some of the new features. Some of the things from both lists
are present in version 5.3.</p>
<h3 id="removals-and-changes">Removals and changes</h3>
<p>In PHP6 <code>E_ALL</code> will include <code>E_STRICT</code> which may cause errors to be reported
in code that is OK in PHP5. A new <code>E_DEPRECATED</code> has been introduced and is
also included in <code>E_ALL</code>. This new error is raised when you use any deprecated
functions.</p>
<p>These deprecated functions and features include register globals, magic
quotes, safe mode and ASP-style <code>&lt;% %&gt;</code> tags. Also going/gone are the
<code>$HTTP_POST_VARS</code> and <code>$HTTP_GET_VARS</code> variables.</p>
<p>Other changes include assign-by-reference (using <code>=&amp;</code>) and <code>zend_compat</code>
raising <code>E_STRICT</code>. Class members defined without a visibility modifier will
be <code>public</code> by default (and will also raise <code>E_STRICT</code>).</p>
<p>Dynamically loading extensions is now disabled by default on all SAPIs except
the command-line interpreter. This needs to be enabled (in <code>php.ini</code>, I
assume) if required.</p>
<p>In a rather acrobatic backflip, the formerly deprecated <code>$str[1]</code> is no-longer
deprecated and its replacement <code>$str{1}</code> now <em>is</em> deprecated. You can also now
use the subscript syntax to take a slice of a string – like <code>$str[1,3]</code> – as
you in some other languages.</p>
<p>The wacky variable <code>break</code> feature (where one breaks out of a variable number
of looping constructs: <code>break $anint;</code>) is deprecated. It’s disappearance make
me wonder (again) why it was added in the first place. I can’t help but wonder
if there was a use-case in mind, or if it was just “because”.</p>
<p>The <code>microtime()</code> function now returns the float value by default; you’ll no
longer need to use <code>microtime(TRUE)</code> in every invocation.</p>
<p>The move to using the PCRE-based <a href="http://php.net/manual/en/book.pcre.php"><code>preg_*</code></a> functions for regular
expressions is finally complete. The <a href="http://php.net/manual/en/book.regex.php"><code>ereg_*</code></a> functions have been
removed from core and stuck in a PECL extension. At the same time,
<a href="http://php.net/manual/en/book.mime-magic.php"><code>mime_magic</code></a> has also been moved to a PECL extension and its
more useful and popular cousin <a href="http://php.net/manual/en/book.fileinfo.php"><code>fileinfo</code></a> has replaced it in core.</p>
<h3 id="additions">Additions</h3>
<p>The big ticket new item must be namespaces. The controversial choice to use
backslash as the separator was due to the simple fact that it is the only
single character available. This doesn’t make it any less silly, especially
because of the way that function “references” in PHP are just strings:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode php"><code class="sourceCode php"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="va">$func</span> <span class="op">=</span> <span class="st">&quot;\application</span><span class="sc">\n</span><span class="st">ames\afunc&quot;</span><span class="ot">;</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="va">$func</span>()<span class="ot">;</span></span></code></pre></div>
<p>All names refer to the current namespace, but prefixing a name with a
backslash will make it relative to the “root” namespace.</p>
<p>You can import things from other name spaces with the <code>use</code> keyword and, if
required – perhaps there is a clash – alias them by taking an <code>as</code> clause on
the end:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode php"><code class="sourceCode php"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="kw">use</span> \MyCompany\Blog\User <span class="kw">as</span> BlogUser<span class="ot">;</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="kw">use</span> \MyCompany\<span class="cn">CMS</span>\User <span class="kw">as</span> CMSUser<span class="ot">;</span></span></code></pre></div>
<p>Functions and classes both belong to namespaces and definitions are processed
top-down. Thus the following code defines a <code>foo()</code> function and then a
<code>bundle\foo()</code> function:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode php"><code class="sourceCode php"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> foo() { <span class="kw">echo</span> <span class="st">&quot;G&quot;</span><span class="ot">;</span> }</span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="kw">namespace</span> bundle<span class="ot">;</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> foo() { <span class="kw">echo</span> <span class="st">&quot;NS&quot;</span><span class="ot">;</span> }</span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a>bundle\foo()<span class="ot">;</span> <span class="co">// &quot;NS&quot;</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a>foo()<span class="ot">;</span> <span class="co">// &quot;G&quot;</span></span></code></pre></div>
<p>Another important change is the addition of late static binding. In previous
versions of PHP <code>self::foo</code> in the code of a superclass method refers the
<code>foo</code> member of that superclass, even if the subclass defines a <code>foo</code> member.
This problem is ameliorated with the addition of a new <code>static</code> keyword.
<code>static::foo</code> will do what you expect: look in subclass, then in the parent/s.</p>
<p>All in all, it looks like PHP6 is a great big leap forward in the evolution of
PHP. A few more major versions and it might catch up to modern languages.</p>]]></summary>
</entry>
<entry>
    <title>Notes on Introducing Gearman</title>
    <link href="https://passingcuriosity.com/2010/oplm2010-2-gearman/" />
    <id>https://passingcuriosity.com/2010/oplm2010-2-gearman/</id>
    <published>2010-01-18T00:00:00Z</published>
    <updated>2010-01-18T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The second talk at the <a href="http://blogs.tucs.org.au/oplm/">Open Programming Language Miniconf 2010</a> was
by <a href="http://datacharmer.blogspot.com">Giuseppe Maxia</a>’s <em><a href="http://blogs.tucs.org.au/oplm/programme/#gearman">Introducing Gearman – Distributed server for all
languages</a></em>. Though there were a few issues – the power dropped out,
taking the projector, audio, and recording gear out – it was an interesting
introduction to a system that I want to learn more about.</p>
<p>After a bit of background on the mainframe, mini, server, desktop progression,
Guiseppe introduced the space that Gearman operates in: distributed
heterogenous system (like the web). Amongst Gearman’s peers in the space
(not to say that they fill the same role 2at all) is <code>memcached</code>.</p>
<p>Gearman is a client/server system for distributing jobs from clients to a
number of workers. Guiseppe drew an analogy to a manager in a company: the
manager gets a request from a customer, delegates it to one or more employees,
and hands the result back to the client (monitoring progress along the way and
assigning the job to new employee/s if the current ones are, e.g., hit by a
bus).</p>
<p>The Gearman server fills the role of the manager: it accepts connections from
clients and one or more workers (which can be local to the server or on other
hosts). The Gearman server is responsible for then farming the jobs submitted
by the clients out to appropriate worker/s for execution.</p>
<p>There are a numerous ways that this can be useful. It can help to decouple
applications and features from each other. Rather than re-writing existing
components for use in projects in another language or on a different platform,
you can use Gearman to mediate the invocation of the existing code from the
new system. Similarly, you can use it to offload computationally intensive
tasks to more capable systems.</p>
<p>Using Gearman is reasonably simple: the <code>gearmand</code> server is written in C and
there are client libraries available for, according to Guiseppe, “everything
that counts”: C/C++, PHP, Python, etc. You just start a server, start one or
more workers, and then use one (or more) of the available client libraries to
submit jobs.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Start a server</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="va">PORT</span><span class="op">=</span>1234</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="ex">gearmand</span> <span class="at">-d</span> <span class="at">-v</span> <span class="at">-p</span> <span class="va">$PORT</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="co"># Start a worker</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="ex">gearman</span> <span class="at">-p</span> <span class="va">$PORT</span> <span class="at">-f</span> count_lines <span class="at">--</span> wc <span class="at">-l</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="co"># Submit a job</span></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="ex">gearman</span> <span class="at">-p</span> <span class="va">$PORT</span> <span class="at">-h</span> localhost <span class="at">-f</span> count_lines <span class="op">&lt;</span> /etc/passwd</span></code></pre></div>
<p>The above code starts a Gearman server, starts a worker that can compute the
<code>count_lines</code> function (by running <code>wc -l</code> on its input), and submits a job.</p>
<p>There are some rather more complex uses. One of those that Guiseppe mentioned
is using the client in user defined functions in a relational database server
(he used <a href="http://forge.mysql.com/tools/tool.php?id=235">MySQL</a>, but PostgreSQL is also supported). With appropriate
jobs and workers this can be used to retrieve status information from, e.g.,
MySQL slave servers and store it in a database on the master (which will then
be replicated to the slaves giving all nodes knowledge of the health of the
whole cluster).</p>
<p>To help avoid introducing a single point of failure, you can deploy multiple
servers and use all of them: if one fails, then clients and workers will try
the next. It wasn’t clear, though, if the client libraries do this sensibly
(re-submitting jobs, etc.)</p>
<p>For more information, your first stop should probably be the official
<a href="http://gearman.org/">Gearman</a> web-site. There are also a number of posts on <a href="http://datacharmer.blogspot.com">Guiseppe’s
blog</a>.</p>]]></summary>
</entry>
<entry>
    <title>Notes on Haskell, and all the wonderful things it doesn’t let you do</title>
    <link href="https://passingcuriosity.com/2010/oplm2010-1-haskell/" />
    <id>https://passingcuriosity.com/2010/oplm2010-1-haskell/</id>
    <published>2010-01-18T00:00:00Z</published>
    <updated>2010-01-18T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The first talk at the <a href="http://blogs.tucs.org.au/oplm/">Open Programming Language Miniconf 2010</a> was
by Stephen Blackheath’s <em><a href="http://blogs.tucs.org.au/oplm/programme/#haskell">Haskell, and all the wonderful things it doesn’t let
you do</a></em>. This was cool – given that Haskell is my favourite language
– but I didn’t get much out of it beyond a link to <a href="http://en.wikibooks.org/wiki/Haskell/StephensArrowTutorial">Stephen’s Arrows
Tutorial</a>.</p>
<p>The talk, aimed at newcomers, covered a lot of ground. It started with a
characterisation of Haskell as a pure, functional, non-strict, strongly,
statically typed, programming language and gave all the usual reasons that
those are nice properties for a programming language to have.</p>
<p>After a few examples of the syntax, Stephen talked about recursion and
mentioned that idiomatic Haskell tends to use a higher-order function
implementing a particular recursions scheme, but didn’t really point any out
(other than using <code>map</code> in example).</p>
<p>Next was a brief discussion of the type system: it’s strong and static, but it
also features type inference so you don’t need to supply signatures for
everything. It’s probably important to note though, that it’s still a good
idea for top level definitions for documentation purposes, if for no other
reason. Next was a mention of QuickCheck and automatic testing.</p>
<p>Finally, there was a bit about Haskell’s non-strict semantics and the usual
points about concurrency (being hard in imperative languages and rather easier
in Haskell). Laziness is useful as it makes it possible to represent
[potentially] infinite data structures and looping data structures without
destructive updates, alas it can make it hard (or, at least, harder) to reason
about and predict the time and space behaviour of a program.</p>
<p>It was a pretty good talk, but I though Stephen missed a few opportunities to
make some important points that the audience might have appreciated. In
particular, I’d have mentioned the various higher-order recursion operators
and opportunity they provide for automatic application-specific optimisations
through fusion. This is the sort of thing that is difficult or impossible in a
lot of languages but are seriously cool!</p>]]></summary>
</entry>
<entry>
    <title>Welcome to LCA2010</title>
    <link href="https://passingcuriosity.com/2010/lca2010-newcomers/" />
    <id>https://passingcuriosity.com/2010/lca2010-newcomers/</id>
    <published>2010-01-17T00:00:00Z</published>
    <updated>2010-01-17T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>So LCA2010 is underway. It’s been busy and it’s only day two (day one really),
so I’ll give a brief recap so that I can remember it later. Registration was
quick and painless and the swag is decent:</p>
<ol type="1">
<li>a nice-ish bag;</li>
<li>a few note books;</li>
<li>a USB flash drive with the programme and such;</li>
<li>the requisite t-shirt (and a hat)</li>
<li>some sunscreen (optimistic) and Lynx stuff (a very good idea!)</li>
</ol>
<p>and some other stuff that I forget.</p>
<p>The newcomers session afterward with Rusty Russell and a woman whose name I
didn’t catch me was informative and entertaining. They covered the programme
and talked about past LCAs, but the most useful is likely to be the “Advice,
Secrets and Lies” that many people wish they’d known before their first LCA.</p>
<blockquote>
<h3 id="do">Do</h3>
<p>Attend the full conference, especially the keynotes!</p>
<p>Turn up to talks and actually pay attention! Don’t turn up and spend the
session reading email.</p>
<p>If you see something wrong, help out!</p>
<p>Don’t leave rubbish in the theatres or anywhere else!</p>
<p>Get some rest! The week is something of a marathon. You’ll need it.</p>
<p>Blog, photograph, tweet, etc. Use the #lca2010 tag so that people can find
your stuff.</p>
<h3 id="do-not">Do not!</h3>
<p>See nothing while hanging out on IRC.</p>
<p>Drink more than you usually do. (There’s a tradition that at least one
attendee or speaker is hospitalised each year: don’t be that person.)</p>
<p>Fanboy!!!! the speakers.</p>
<p>Harass others.</p>
<p>Join or start more than one new project. It seems like a good idea, but it’s
not. Pick <em>one</em> thing to get enthusiastic, you’ll never have time for more
than one anyway.</p>
<p>Believe that your ssh keys have changed.</p>
<h3 id="secrets">Secrets</h3>
<p>The attendees are the conference. They are interesting (and some of them are
speakers!) so speak to them.</p>
<p>The badge has annotations on it. There’s a colour scheme (orange for
hobbyists; blue for professionals; red for speakers or something), the fish
heads represent tickets to the Penguin Dinner, the radio thingo to the
Professional Networking Session, the map your origin, and a few other
things.</p>
<p>Surprises (often at keynotes, yet another reason to attend them)</p>
<p>The in jokes (laugh along, write them down and ask about them later)?</p>
<p>Next year’s conference (usually announced at the Penguin Dinner).</p>
<p>All the stories about things that “always happen” at pretty much lies. It’s
different every time and, while there’s a few things that happen often, they’re</p>
<p>Now, we’re off to the Green Man pub.</p>
</blockquote>]]></summary>
</entry>
<entry>
    <title>In Wellington for LCA2010 and DrupalSouth</title>
    <link href="https://passingcuriosity.com/2010/lca2010-and-drupalsouth/" />
    <id>https://passingcuriosity.com/2010/lca2010-and-drupalsouth/</id>
    <published>2010-01-15T00:00:00Z</published>
    <updated>2010-01-15T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I’m currently in Wellington, New Zealand for <a href="http://www.lca2010.org.nz/">linux.conf.au 2010</a> and
then <a href="http://wellington2010.drupalsouth.net.nz/">DrupalSouth</a>. It’s going to be a pretty awesome week! I’m
looking forward to getting back up to speed with Linux which I’ve used only
superficially for the last few years after switching, on a lark, to FreeBSD
and then to Mac OS X.</p>
<p>I’m looking forward to seeing just how much Linux has changed since I last
built my own kernel (circa 2003).</p>
<p>I’ll be going to the <a href="http://blogs.tucs.org.au/oplm">Open programming languages</a>, <a href="http://multicorenz.wordpress.com/lca2010-miniconf/">Multicore and
Parallel Computing</a>, <a href="http://miniconf.osda.asn.au/">Data Storage &amp; Retrieval</a>, and <a href="http://sysadmin.miniconf.org/">System
Administration</a> miniconfs. Session wise, I intend to look in on most
of the kernel and low-level user space talks that I can.</p>
<p>After LCA per se is done (but during open day, unfortunately) I’ll be at
DrupalSouth to pick up some more Drupal-fu by osmosis.</p>
<p>If you’re interested, you can see more LCA and Drupal specific articles in the
<a href="/lca/">LCA archive</a> and <a href="/drupal/">Drupal archive</a>.</p>]]></summary>
</entry>

</feed>
