<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hacker School on yomimono - something to read</title>
    <link>http://localhost:1313/tags/hacker-school/</link>
    <description>Recent content in Hacker School on yomimono - something to read</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 20 Jul 2015 00:09:32 +0000</lastBuildDate>
    <atom:link href="http://localhost:1313/tags/hacker-school/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Retrospective</title>
      <link>http://localhost:1313/blog/2015/07/20/retrospective/</link>
      <pubDate>Mon, 20 Jul 2015 00:09:32 +0000</pubDate>
      <guid>http://localhost:1313/blog/2015/07/20/retrospective/</guid>
      <description>&lt;p&gt;In 2014, I spent 12 weeks at &lt;a href=&#34;https://www.recurse.com&#34;&gt;the Recurse Center&lt;/a&gt;, formerly (and at the time) known as Hacker School.  After finishing up my time there in May of that year, a lot of people asked me reasonable questions like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How was the Recurse Center?&lt;/li&gt;&#xA;&lt;li&gt;Was attending RC worth your time?&lt;/li&gt;&#xA;&lt;li&gt;What did you learn at the Recurse Center?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My response to these questions was &amp;ldquo;I don&amp;rsquo;t know yet!  It&amp;rsquo;s too early to say.&amp;rdquo;  Now that more than a year has passed, I think I might have some idea of where to start.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hacking Your Hacker School T-Shirt</title>
      <link>http://localhost:1313/blog/2014/06/25/hacking-your-hacker-school-t-shirt/</link>
      <pubDate>Wed, 25 Jun 2014 16:01:55 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/06/25/hacking-your-hacker-school-t-shirt/</guid>
      <description>&lt;figure class=&#34;left&#34;&gt;&lt;img src=&#34;http://localhost:1313/images/blink-shirt/blinky.gif&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;On the last day of our &lt;a href=&#34;http://www.hackerschool.com&#34;&gt;Hacker School&lt;/a&gt; batch, we got some cool commemorative T-shirts with the stylish Hacker School logo on them.  Now, this is an excellent T-shirt, and the only way I know of to get an official one is to attend the last day of a batch of Hacker School, so it&amp;rsquo;s already a pretty rad shirt.  I wanted to make it radder, and I did, and now I want to tell you how.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Verb Your Own Noun</title>
      <link>http://localhost:1313/blog/2014/04/23/verb-your-own-noun/</link>
      <pubDate>Wed, 23 Apr 2014 12:03:04 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/04/23/verb-your-own-noun/</guid>
      <description>&lt;p&gt;This blog has been running on a &lt;a href=&#34;http://www.openmirage.com&#34;&gt;Mirage OS unikernel&lt;/a&gt; hosted on &lt;a href=&#34;http://ec2.aws.amazon.com&#34;&gt;Amazon EC2&lt;/a&gt; since April 3rd:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ec2-get-console-output --region the-best-region i-0123abcd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2014-04-03T16:42:58+0000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Xen Minimal OS!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In that time, I&amp;rsquo;ve done some stuff:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;submitted &lt;a href=&#34;http://www.github.com/mirage/mirage-tcpip/pull/48&#34;&gt;a successful pull request to Mirage&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;made a permanent home for &lt;a href=&#34;http://www.github.com/yomimono/glow-cloud&#34;&gt;Secret Project Glow Cloud&amp;rsquo;s code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;successfully applied to &lt;a href=&#34;https://gnome.org/opw/&#34;&gt;the Outreach Program for Women&lt;/a&gt; to work on Mirage some more&lt;/li&gt;&#xA;&lt;li&gt;broke and fixed my OCaml development environment repeatedly&lt;/li&gt;&#xA;&lt;li&gt;sang in public in front of other Hacker Schoolers&lt;/li&gt;&#xA;&lt;li&gt;looked at &lt;a href=&#34;http://www.metmuseum.org&#34;&gt;a lot&lt;/a&gt; of &lt;a href=&#34;http://www.brooklynmuseum.org&#34;&gt;neat objects&lt;/a&gt; and &lt;a href=&#34;http://www.themorgan.org&#34;&gt;buildings&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;started work on a &lt;a href=&#34;https://www.owasp.org/index.php/Fuzzing&#34;&gt;fuzzing&lt;/a&gt; framework to scratch my own itch for testing network clients&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I figured it was time to tell you about some of it, but first I did some other stuff:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;upgraded some packages on my build machine&lt;/li&gt;&#xA;&lt;li&gt;broke the build on my blog&lt;/li&gt;&#xA;&lt;li&gt;learned about how Mirage makefiles are generated by trying to get mine working again&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You&amp;rsquo;d rather hear about all of that, right?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tying the Knot</title>
      <link>http://localhost:1313/blog/2014/04/02/tying-the-knot/</link>
      <pubDate>Wed, 02 Apr 2014 14:58:53 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/04/02/tying-the-knot/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;This is a pretty strange piece of code,&#xA;and it may take a few moments of thought&#xA;to figure out what&amp;rsquo;s going on.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ndash; Real World OCaml&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A few weeks ago, &lt;a href=&#34;http://chenlin.io&#34;&gt;fellow Hacker Schooler Chen Lin&lt;/a&gt; and I were trying to solve a simple graph problem in Haskell.  I was all ready to charge forward with something quite like &lt;a href=&#34;http://pages.cs.wisc.edu/~siff/CS367/Notes/graphs.html&#34;&gt;the Java implementation I learned back in undergrad&lt;/a&gt;, but my fellow Hacker Schooler had some hesitation around whether this kind of structure would work in Haskell.&lt;/p&gt;&#xA;&lt;p&gt;After a little bit of Googling, I found out that the canonical solution in Haskell involves something intriguingly dubbed &lt;a href=&#34;http://www.haskell.org/haskellwiki/Tying_the_Knot&#34;&gt;tying the knot&lt;/a&gt;.  I stared blankly at this HaskellWiki page with my fellow Hacker Schooler, trying to understand it quickly enough to have a useful conversation about it, and failed.  We threw a couple of other ideas around and then decided to both pursue other projects.  I moved on, Chen moved on, and I&amp;rsquo;m not sure either of us thought much about it&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip;until yesterday, when I ran into &lt;a href=&#34;https://realworldocaml.org/v1/en/html/imperative-programming-1.html#memoization-and-dynamic-programming&#34;&gt;tying the knot&lt;/a&gt; again.  This time, it was hiding deep within (of all things!) the chapter on imperative programming in &lt;a href=&#34;https://realworldocaml.org&#34;&gt;Real World OCaml&lt;/a&gt;, and I was unhurried and determined.  &amp;ldquo;Abstract concept, I am going to understand you &lt;em&gt;so hard&lt;/em&gt;,&amp;rdquo; I thought, jaw set.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arriving At the Mirage</title>
      <link>http://localhost:1313/blog/2014/03/24/arriving-at-the-mirage/</link>
      <pubDate>Mon, 24 Mar 2014 17:57:37 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/03/24/arriving-at-the-mirage/</guid>
      <description>&lt;p&gt;When last we left our hero, I was strugging valiantly to get a &lt;a href=&#34;http://www.openmirage.org&#34;&gt;Mirage unikernel&lt;/a&gt; version of this blog running on Amazon EC2.  All unikernels built and shipped off to EC2 would begin booting, but never become pingable or reachable on TCP port 80.  &lt;code&gt;ec2-get-console-output&lt;/code&gt; on any instance running a Mirage unikernel would show the beginning stages of a &lt;a href=&#34;http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol&#34;&gt;DHCP transaction&lt;/a&gt;, then the disappointing &lt;code&gt;RX exn Invalid_argument(&amp;quot;String.sub&amp;quot;)&lt;/code&gt;, then&amp;hellip; silence.&lt;/p&gt;&#xA;&lt;p&gt;When all you had for many years was a hammer, stuff is still going to look an awful lot like nails to you, even if it&amp;rsquo;s pretty distinctly screw-shaped.  I wanted to take a &lt;a href=&#34;http://www.tcpdump.org&#34;&gt;packet trace&lt;/a&gt; of this transaction pretty badly.  I could do three things that were &lt;em&gt;almost&lt;/em&gt; like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;get a packet trace of another machine getting a DHCP lease on EC2&lt;/li&gt;&#xA;&lt;li&gt;get a packet trace of a unikernel getting a DHCP lease on my local Xen server&lt;/li&gt;&#xA;&lt;li&gt;print out an awful lot of diagnostic data from the EC2 unikernel and read it from the console&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Trying to draw some conclusions from the first option above led me down the wrong path for about a day or so.  I did manage to cause the DHCP client to fail on my local Xen server by sending a DHCP reply packet with no &lt;code&gt;server-identifier&lt;/code&gt; set, using &lt;code&gt;scapy&lt;/code&gt; and some hackery to cause the &lt;code&gt;xid&lt;/code&gt; to always match:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advancing Toward the Mirage</title>
      <link>http://localhost:1313/blog/2014/03/16/advancing-toward-the-mirage/</link>
      <pubDate>Sun, 16 Mar 2014 15:11:09 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/03/16/advancing-toward-the-mirage/</guid>
      <description>&lt;p&gt;I left off last time telling you about &lt;a href=&#34;http://localhost:1313/blog/2014/03/14/its-a-mirage/&#34;&gt;getting Mirage to not work&lt;/a&gt;.  I&amp;rsquo;m still working hard to get this blog &amp;ndash; yes, this one you&amp;rsquo;re reading now &amp;ndash; up and running as a unikernel on EC2.&lt;/p&gt;&#xA;&lt;p&gt;It became clear to me last week that I needed to fork my own instance of the &lt;code&gt;mirage-tcpip&lt;/code&gt; repository and compile my kernels with it, if I were to make any progress in debugging the DHCP problems I was having.  A few naive attempts to monkey with version of &lt;code&gt;mirage-tcpip&lt;/code&gt; downloaded by &lt;code&gt;opam&lt;/code&gt; weren&amp;rsquo;t successful, so I set about to figure out how actual OCaml developers develop in OCaml with &lt;code&gt;opam&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;First stop: &lt;a href=&#34;https://opam.ocaml.org/doc/Developing.html&#34;&gt;the opam documentation on doing tricky things.&lt;/a&gt;  This is a little short of a step-by-step &amp;ldquo;do this, dorp&amp;rdquo; guide, unfortunately; here&amp;rsquo;s what I end up doing, and it sorta seems to work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>It&#39;s a mirage! (Or, how to shave a yak.)</title>
      <link>http://localhost:1313/blog/2014/03/14/its-a-mirage/</link>
      <pubDate>Fri, 14 Mar 2014 15:53:00 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/03/14/its-a-mirage/</guid>
      <description>&lt;p&gt;A week or so ago, I heard about the &lt;a href=&#34;http://www.openmirage.org&#34;&gt;Mirage project&lt;/a&gt;, a library OS project that makes tiny virtual machines running on top of Xen to run a given application, and do nothing else.  I was intrigued, and started working through &lt;a href=&#34;http://www.openmirage.org/wiki/hello-world&#34;&gt;the excellent intro documentation&lt;/a&gt;, and got to the point where I wanted to replace my ho-hum statically-compiled blog hosted from &lt;a href=&#34;https://wiki.ubuntu.com/LTS&#34;&gt;Ubuntu LTS&lt;/a&gt; with a unikernel that would serve my static site and do nothing else.&lt;/p&gt;&#xA;&lt;p&gt;There are excellent instructions on doing this with a Jekyll site on &lt;a href=&#34;http://amirchaudhry.com/from-jekyll-to-unikernel-in-fifty-lines/&#34;&gt;Amir Chaudhry&amp;rsquo;s blog&lt;/a&gt;.  Octopress, which I use to generate this site, is built on top of Jekyll, and I only had a few extra goodies to throw in before I was able to make a unikernel that would run my blog with a few &lt;code&gt;rake&lt;/code&gt; invocations.  After getting the first unikernel up and running via Xen on my laptop, I entertained myself by throwing a few &lt;code&gt;nmap&lt;/code&gt; commands at it; I was particularly curious to see whether my unikernel knew what to do with UDP packets:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo nmap -sO 192.168.2.13&#xA;&#xA;Starting Nmap 6.40 ( http://nmap.org ) at 2014-03-14 23:26 EDT&#xA;Nmap scan report for 192.168.2.13&#xA;Host is up (0.00037s latency).&#xA;Not shown: 254 open|filtered protocols&#xA;PROTOCOL STATE SERVICE&#xA;1        open  icmp&#xA;6        open  tcp&#xA;MAC Address: 00:16:3E:53:E0:1B (Xensource)&#xA;&#xA;Nmap done: 1 IP address (1 host up) scanned in 17.72 seconds&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hee hee hee.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finding Kitten</title>
      <link>http://localhost:1313/blog/2014/03/09/finding-kitten/</link>
      <pubDate>Sun, 09 Mar 2014 16:57:45 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/03/09/finding-kitten/</guid>
      <description>&lt;h2 id=&#34;robot-finds-kitten&#34;&gt;Robot Finds Kitten&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;http://localhost:1313/images/digital_clock.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA; Sometime way back in the past, a human who wanted me to feel joy introduced me to &lt;a href=&#34;http://www.robotfindskitten.org&#34;&gt;Robot Finds Kitten&lt;/a&gt;, a Zen simulation which is pretty close to exactly what it says on the tin.  There are already &lt;a href=&#34;http://robotfindskitten.org/aw.cgi?main=software.rfk&#34;&gt;quite a lot of ports&lt;/a&gt; of the original POSIX implementation, but none of them were written in &lt;a href=&#34;http://elm-lang.org/&#34;&gt;Elm&lt;/a&gt;.  Obviously this is a problem that needs fixing.&lt;/p&gt;&#xA;&lt;p&gt;Before I get into the gory details of learning Elm via robots, I should tell you that my implementation is available for free play (edit: sorry, this has bitrotted too much to be included anymore), and &lt;a href=&#34;https://www.github.com/yomimono/elm-finds-kitten&#34;&gt;you can also go look at the source code&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;elm&#34;&gt;Elm&lt;/h2&gt;&#xA;&lt;p&gt;I got a really wonderful introduction to Elm when Evan Czaplicki came to &lt;a href=&#34;http://www.hackerschool.com&#34;&gt;Hacker School&lt;/a&gt; in our second week.  We got a slightly adapted version of &lt;a href=&#34;http://www.infoq.com/presentations/elm-reactive-programming&#34;&gt;this talk from StrangeLoop 2013&lt;/a&gt;, which moved me to make a browser game (something I&amp;rsquo;ve never wanted to do at any previous point in life).  The language seemed elegant and expressive, for lack of less cliched words, and I thought it might be relatively simple to make a succinct Robot Finds Kitten clone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sometimes it&#39;s no fun to be right.</title>
      <link>http://localhost:1313/blog/2014/02/25/sometimes-its-no-fun-to-be-right/</link>
      <pubDate>Tue, 25 Feb 2014 19:05:30 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/02/25/sometimes-its-no-fun-to-be-right/</guid>
      <description>&lt;p&gt;I promised a lot of people that I would let them know how Hacker School is.  It&amp;rsquo;s difficult for me to answer this question (&lt;a href=&#34;http://jvns.ca/blog/2014/02/15/how-was-hacker-school&#34;&gt;although Julia Evans, a previous batch process, has done a fantastic job&lt;/a&gt;), both because it feels so early in the batch and because Hacker School is a lot of things.  I also promised a lot of people that I would let them know how New York is, and that&amp;rsquo;s a little easier, so I&amp;rsquo;ll start there and then move on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Early Thoughts on Hacker School</title>
      <link>http://localhost:1313/blog/2014/02/12/hacker-school/</link>
      <pubDate>Wed, 12 Feb 2014 03:47:52 +0000</pubDate>
      <guid>http://localhost:1313/blog/2014/02/12/hacker-school/</guid>
      <description>&lt;p&gt;I got my acceptance notification for the winter 2014 batch of &lt;!-- raw HTML omitted --&gt;Hacker School&lt;!-- raw HTML omitted --&gt; on January 3rd, six weeks ago.  Right after being accepted, I wrote a bit in the same directory where I&amp;rsquo;d saved my application answers:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
