<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Passing Curiosity: Posts tagged old-post-is-old</title>
    <link href="https://passingcuriosity.com/tags/old-post-is-old/old-post-is-old.xml" rel="self" />
    <link href="https://passingcuriosity.com" />
    <id>https://passingcuriosity.com/tags/old-post-is-old/old-post-is-old.xml</id>
    <author>
        <name>Thomas Sutton</name>
        
        <email>me@thomas-sutton.id.au</email>
        
    </author>
    <updated>2017-01-02T00:00:00Z</updated>
    <entry>
    <title>Yow! Conference, Sydney 2013</title>
    <link href="https://passingcuriosity.com/2017/yow-developer-conference/" />
    <id>https://passingcuriosity.com/2017/yow-developer-conference/</id>
    <published>2017-01-02T00:00:00Z</published>
    <updated>2017-01-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<blockquote>
<p>It’s the beginning of a new year so I’m cleaning out some files in
my drafts directory. This post was started on December 13, 2013.</p>
</blockquote>
<ul>
<li>~40 speakers</li>
<li>~440 attendees</li>
<li>three cities</li>
</ul>
<p>YOW! LambdaJam in May was excellent and this was pretty great too. The YOW!
people seem to put on great conferences.</p>
<h2 id="day-one">Day one</h2>
<h3 id="jeff-hawkins-on-machine-intelligence">Jeff Hawkins on machine intelligence</h3>
<p>The day kicked off with Jeff Hawkins (of Palm and Handspring fame) giving a
keynote in which he described the neurologically-inspired approach to machine
intelligence being developed by his current company (<a href="https://groksolutions.com/">Grok Solutions</a>) and
others. The basis of this approach is in building learning systems with many of
the properties of biological intelligence (universality, robustness, etc.) by
modelling them on the operation of neural structures in the <a href="http://en.wikipedia.org/wiki/Neocortex">neocortex</a>.</p>
<p>One of the key points was the use of representations which enable data storage
and processing in ways which are efficient and accurate <em>enough</em> for machine
intelligence. In particular, the use of <em>sparse distributed representations</em>
(SDR) is key to the model of intelligence described. Dense representations
(such as ASCII) use a very small number of bits to represent particular states
but each bit is devoid of semantic information: the state of “bit 3” in an
ASCII character conveys no useful information. An SDR uses many more bits, each
representing a particular feature in the learning domain (e.g. a property of
objects or a word in a corpus); as such, most bits in a particular SDR instance
will be 0 (hence the “sparse” in the name).</p>
<p>SDRs have several properties which make them useful for learning tasks: similar
objects have similar representations; they allow sub-sampling without losing
all meaning; they behave well with union/membership and other set operations
(an SDR is, in some sense, similar to a <a href="http://en.wikipedia.org/wiki/Bloom_filter">Bloom filter</a>). According to Jeff:</p>
<blockquote>
<p>“All intelligent machines will be based on sparse distributed representations.”</p>
</blockquote>
<p>The <em>cortical learning algorithm</em> developed by Grok Systems and implemented in
the <a href="http://numenta.org/">Numenta Platform for Intelligent Computing</a> open source project
(GPLv3) builds on these ideas and implements a learning system modelled on a
cortical region to learn about “normal” inputs and then predict and detect
anomalies from streaming input. Jeff described two applications in which this
software has been deployed: monitoring and detecting anomalies in monitoring
server metrics, and natural language processing.</p>
<p>The first example (built by Grok Systems and included in the NuPIC open source
project) is used to monitor metrics from resources in Amazon Web Services and
to detect anomalies in their behaviour. This approach can identify conditions
which traditional (and, it must be said, much, much simpler) threshold-based
approaches cannot.</p>
<p>The second example – developed by <a href="http://www.cept.at/">CEPT Systems</a> – derives SDRs of words
from Wikipedia pages and then deploys these SDRs in particular learning
problems. This can be used to demonstrate the set-like properties of SDRs:
sdr(apple) - sdr(fruit) = sdr(computer). A CLA trained on inputs like “ANIMAL
VERB OBJECT” was able to make sensible predictions for new inputs it hadn’t
seen before, including “fox” and “eat” yielding “rodent”.</p>
<p>This was a pretty great talk and got the conference off to a great start!</p>
<h3 id="charles-nutter-on-language-engineering-for-the-jvm">Charles Nutter on language engineering for the JVM</h3>
<p>In the second session I saw <a href="http://blog.headius.com/">Charles Nutter</a>’s talk “Beyond JVM” in which
he discussed the engineering issues which face JVM-targeting languages like
<a href="http://jruby.org/">JRuby</a>. Charles discussed some of the pros and cons for targeting the JVM
(many of the pros <em>are</em> also cons) and then jumped into four of the key
challenges faced by the JRuby project: startup time, native interoperability,
language performance, and the lack of flexibility in the JVM (the big ball of
C++).</p>
<p>Charles discussed a number of ways to improve JVM and application <strong>startup
time</strong>: tweaking JVM flags helps, but can be fragile in the face of different
JVMs, JVM version changes, and typically impact later performance; keeping
persistent JVM instances (using tools like <a href="http://www.martiansoftware.com/nailgun/">Nailgun</a>) can be cause
problems cleaning up resources (memory leaks, background threads, etc);
pre-loading JVMs with tools like <a href="https://github.com/flatland/drip">Drip</a> can improve performance while
avoiding the cleanup problems with persistent JVMs.</p>
<p>The problem of <strong>native interoperability</strong> is a complex one with a range of
solutions. The traditional approach used JNI which is horrible: you write code
for both your intention (“I want to call getpid()”) <em>and</em> how to implement it.
The JNR project provide a real foreign function interface on the JVM structured
into a number of layers: jffi provides platform-specific FFI functionality,
jnr-ffi defines structures, etc. to interface with jffi, jnr-posix exposes a
range of POSIX APIs (the ones JRuby have needed so far) and jnr-constants
defines a range of constants as defined on the host platform, and jnr-enxio
implements Java NIO for arbitrary file descriptors (allowing a range of I/O
functionality which can’t otherwise be expressed on JVM). JNR generates code
which is as direct as possible for each particular case, resulting in very low
overheads for each call.</p>
<p>One of the key motivations for JRuby is <strong>language performance</strong>. While the JVM
specification made mention of non-Java languages, it didn’t go out of it’s way
to actually support them. The relatively new <code>invokedynamic</code> bytecode allows
language implementers to customise invocation mechanisms to suit the specifics
of their language. The JVM will cache and optimise the results of dynamic
invocations as normal. This can result in plain ruby code run on JRuby being
faster than using a native extension under CRuby (redblack tree benchmark).</p>
<p>Finally, Charles discussed approaches that language implementors can use to
deal with the <strong>inflexibility of the JVM internals</strong>. The <a href="http://openjdk.java.net/projects/graal/">Graal project</a>
allows language implementors to customise the way that their implementations
are optimised and emit the ASM/HotSpot intermediate representation appropriate
for the particular language’s constructs. Truffle, a framework built on top of
Graal, allows you to implement an interpreter for your language (structured and
annotated in a particular way) and to automatically derive a JIT for it. (This
sounds a little like the second Futamura projection to me.)</p>
<p>This talk was very well presented and very informative. If I’d known it was
“about” JRuby I probably wouldn’t have gone but I’m glad I did!</p>
<h3 id="julien-verlaguet-on-facebooks-static-typing-for-php">Julien Verlaguet on Facebook’s static typing for PHP</h3>
<p><a href="https://www.facebook.com/julien.verlaguet">Julien Verlaguet</a> is an engineer at Facebook and spoke about the work
they’ve done to improve on the PHP language with <a href="http://www.hiphop-php.com/">HHVM</a> and “Hack” - a
statically typed version of PHP which was the primary subject of the talk.</p>
<p>Contrary to Facebook’s earlier attempts at improving the deployment and runtime
story for PHP (the HipHop compiler translated PHP code into C++ which compiled
into a native binary), HHVM is a fairly traditional virtual machine with a JIT.
The <a href="http://www.hiphop-php.com/blog/">HHVM blog</a> has a bunch of interesting posts about the development of
the VM and the JIT both, go read it!</p>
<p>HHVM supports two source languages: normal PHP and Hack. Hack (the code name
might change) is a statically typed variant of PHP which is compatible with
PHP, uses the same run-time representations within the VM and was designed for
incremental adoption (a necessity when dealing with massive codebases like
Facebook.com).</p>
<p>The static typing for Hack requires that the programmer add type annotations to
class members, function parameters and return values and infers all other
types. The types supported include the basic types built-in to PHP, collections
and generics. It also distinguishes the types of nullable and non-nullable
values. PHP was not designed for type checking, so the type checker must make
several allowances. The most interesting is, perhaps, the delay of type
unification to call sites rather than function definitions.</p>
<p>The Hack type checker is implemented as a daemon which listens for file system
events on the code base and communicates with a client to “run” a check and
present errors. The errors are designed to give specific, useful feedback to
the programmer including references to each annotation which resulted in the
error (“it tells a story”). The checker is also able to output coloured
“coverage” style reports of code showing which code is checked/unchecked.</p>
<p>Conversion of existing PHP to Hack has happened in two ways: organic adoption
by developers as they and their teams take up Hack; and automatic conversion
using tools to analyse, refactor and monitor changes in the code base. This
includes support for “soft” conversions, which are monitored but not enforced
until they are known to be accurate.</p>
<p>Hack and HHVM sound like great improvements over PHP. I never got around to
trying HPHP before it went away but perhaps I’ll give HHVM a go.</p>
<h3 id="kevlin-henney-deconstructed-the-solid-principles">Kevlin Henney deconstructed the SOLID principles</h3>
<p><a href="http://kevlin.tel/">Kevlin Henney</a></p>
<p>I’m not really one for talks about methodologies and such, but Kevlin’s talk
“the <a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)">SOLID</a> Design Principles Deconstructed” was entertaining and not a
little informative.</p>
<h3 id="gilad-bracha-on-dart-and-newspeak">Gilad Bracha on Dart and Newspeak</h3>
<p><a href="http://bracha.org/">Gilad Bracha</a> is an engineer at Google where he works on Dart. He spoke
about Dart and Newspeak.</p>
<h3 id="joe-albahari-on-concurrency-in-.net">Joe Albahari on concurrency in .NET</h3>
<p><a href="http://www.albahari.com/">Joe Albahari</a> spoke about concurrency in C# 5.</p>
<h3 id="scott-hanselman-on-the-web-platform">Scott Hanselman on the web platform</h3>
<p><a href="http://www.hanselman.com/">Scott Hanselman</a> works on Azure and ASP.NET for Microsoft.</p>
<h2 id="day-two">Day Two</h2>
<h3 id="philip-wadler-reprised-the-first-monad-tutorial">Philip Wadler reprised the first monad tutorial</h3>
<p><a href="http://homepages.inf.ed.ac.uk/wadler/">Philip Wadler</a></p>
<h3 id="aaron-bedra-on-behaviour-and-reputation-based-security-controls">Aaron Bedra on behaviour and reputation based security controls</h3>
<p><a href="http://aaronbedra.com/">Aaron Bedra</a></p>
<h3 id="sam-newman-on-microservice-architecture">Sam Newman on microservice architecture</h3>
<p><a href="http://blog.magpiebrain.com/">Sam Newman</a></p>
<h3 id="functional-programming-in-industry">Functional programming in industry</h3>
<p><a href="http://korny.info/">Kornelis Sietsma</a>, <a href="http://www.michaelneale.net/">Michael Neale</a> and <a href="http://twitter.com/jedws">Jed Wesley-Smith</a>
gave a set of three talks about the adoption and use of functional programming
languages at three different companies.</p>
<h3 id="jay-fields-on-adopting-clojure">Jay Fields on adopting Clojure</h3>
<p><a href="http://jayfields.com/">Jay Fields</a></p>
<h3 id="daniel-spiewak-on-modules-and-the-expression-problem">Daniel Spiewak on modules and the expression problem</h3>
<p><a href="http://www.codecommit.com/blog/">Daniel Spiewak</a></p>
<h3 id="stewart-gleadow-on-mobile-app-and-their-apis">Stewart Gleadow on mobile app and their APIs</h3>
<p><a href="http://www.stewgleadow.com/">Stewart Gleadow</a></p>
<h2 id="sponsors-and-exhibitors">Sponsors and Exhibitors</h2>
<p>Sponsors include Suncorp, DiUS, ThoughtWorks, Mashery,</p>]]></summary>
</entry>
<entry>
    <title>Events in August 2014</title>
    <link href="https://passingcuriosity.com/2017/august-2014-events/" />
    <id>https://passingcuriosity.com/2017/august-2014-events/</id>
    <published>2017-01-02T00:00:00Z</published>
    <updated>2017-01-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<blockquote>
<p>It’s the beginning of a new year so I’m cleaning out some files in
my drafts directory. This post was started on August 18, 2014.</p>
</blockquote>
<p>In an effort to blog more regularly and to post content that is more mine
than transcriptions of others, I’ll be writing a regular round-up of the
events I attend. To start with, here are a few from the last three weeks.</p>
<h2 id="australian-openstack-user-group">Australian OpenStack User Group</h2>
<p>I’ve recently started working at <a href="http://www.anchor.net.au/">Anchor Systems</a> and sit next to some
of the people working on the new <a href="http://www.anchor.com.au/blog/category/cloud-computing/">Anchor OpenStack cloud</a>, so I’ve
been hearing (and overhearing) quite a bit about OpenStack and OpenStack
deployment recently. One of the things that sounded quite interesting is
“OpenStack On OpenStack” (or “Triple O”) – which uses an existing OpenStack
cloud to bootstrap and manage a new OpenStack cloud. The recent <a href="http://www.meetup.com/Australian-OpenStack-User-Group/events/189477362/">Australian
OpenStack User Group</a> at the Anchor Systems offices in Sydney had
several talks about Triple O.</p>
<h2 id="sydney-postgresql-user-group">Sydney PostgreSQL User Group</h2>
<p>I’ve always quite liked <a href="http://www.postgresql.org/">PostgreSQL</a> but my current project is my first
chance to work with it in a while. The <a href="http://www.meetup.com/Sydney-PostgreSQL-User-Group/events/197696352/">Sydney PostgreSQL User
Group</a> meeting last week had a presentation by Venkata B Nagothi
from Fujitsu Australia about the changes in the forthcoming PostgreSQL 9.4
release.</p>
<h2 id="port80-sydney">Port80 Sydney</h2>
<p>I was a regular attendee at Port80 in Perth for years, but haven’t been to
<a href="http://www.meetup.com/Port80-Sydney/events/192062222/">Post80 Sydney</a> since I moved here 18 months ago. The meeting last
week was hosted at Anchor, so I stuck around after work to eat some pizza and
listen to the talk about user experience design.</p>]]></summary>
</entry>
<entry>
    <title>Truncating git history</title>
    <link href="https://passingcuriosity.com/2017/truncating-git-history/" />
    <id>https://passingcuriosity.com/2017/truncating-git-history/</id>
    <published>2017-01-01T00:00:00Z</published>
    <updated>2017-01-01T00:00:00Z</updated>
    <summary type="html"><![CDATA[<blockquote>
<p>It’s the beginning of a new year so I’m cleaning out some files in my
drafts directory. This post was started on 18 July 2012.</p>
</blockquote>
<p>Sometimes you don’t actually want to keep the entire history of a
branch in a git repository. If it’s just one or two commits you want
to discard then <code>git rebase</code> and <code>git filter-branch</code> can be
helpful. If you just want to drop every commit before some arbitrary
point then you can do the following.</p>
<p>I want to rewrite the <code>master</code> branch to discard all commits before
<code>e41d7f633c45c46bd42e97cecf93204191d9e4c9</code>. My new history will take the
tree of this commit as its “inital commit”. The process is simple:</p>
<ol type="1">
<li><p>Make a new branch (I’ll call it <code>temp</code> below); and</p></li>
<li><p>Use <code>rebase</code> to replay every subsequent commit on top of the new
branch.</p></li>
</ol>
<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="fu">git</span> checkout <span class="at">--orphan</span> temp e41d7f633c45c46bd42e97cecf93204191d9e4c9</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> commit <span class="at">-m</span> <span class="st">&quot;Truncate history&quot;</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> rebase <span class="at">--onto</span> temp e41d7f633c45c46bd42e97cecf93204191d9e4c9 master</span></code></pre></div>]]></summary>
</entry>

</feed>
