<?xml version='1.0' encoding='utf-8' ?>

<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Tim&apos;s journal</title>
  <link>http://tim.dreamwidth.org/</link>
  <description>Tim&apos;s journal - Dreamwidth Studios</description>
  <lastBuildDate>Thu, 23 May 2013 03:13:35 GMT</lastBuildDate>
  <generator>LiveJournal / Dreamwidth Studios</generator>
  <lj:journal>tim</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='self' href='http://tim.dreamwidth.org/data/rss' />
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://www.dreamwidth.org/userpic/5424584/234887</url>
    <title>Tim&apos;s journal</title>
    <link>http://tim.dreamwidth.org/</link>
    <width>93</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1802556.html</guid>
  <pubDate>Thu, 23 May 2013 03:13:35 GMT</pubDate>
  <title>TMI: Slowness</title>
  <link>http://tim.dreamwidth.org/1802556.html</link>
  <description>A frustrating day. On the plus side, I did solve yesterday&apos;s problem with the duplicate &lt;tt&gt;__test&lt;/tt&gt; identifier. It turned out I was calling the driver functions wrong and it was literally synthesizing a test module twice. I was able to fix that bug.&lt;br /&gt;&lt;br /&gt;Once I fixed that, I got this horrible resolve error:&lt;br /&gt;&lt;pre&gt;
&amp;lt;intrinsic&amp;gt;:58:37: 58:41 error: found value name used as a type: def_fn({crate: 1, node: 160381}, impure_fn)
&amp;lt;intrinsic&amp;gt;:58         fn visit_estr_uniq(&amp;self) -&amp;gt; bool;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The error refers to the code for intrinsics (primops, basically) that rustc injects everywhere. It&apos;s complaining that &lt;tt&gt;bool&lt;/tt&gt; is a function but is being used like a type. But... &lt;tt&gt;bool&lt;/tt&gt; is a type! A primitive one, at that. I&apos;d expect this to happen if there was a function somewhere called &lt;tt&gt;bool&lt;/tt&gt; (maybe), but there isn&apos;t.&lt;br /&gt;&lt;br /&gt;This was when I was trying to use rustpkg to build a test module. So next I decided to just compile a regular &lt;tt&gt;main&lt;/tt&gt; module. So then I got:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
rust: task failed at &apos;ty_fn_ret() called on non-fn type: &amp;ty_nil&apos;, /Users/tjc/rust2/src/librustc/middle/ty.rs:2822&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;as an ICE in trans.&lt;br /&gt;&lt;br /&gt;Given that all of this just comes from changing search paths so rustpkg can find libstd and not treat it as a remote-package-to-download, I&apos;m... flummoxed.&lt;br /&gt;&lt;br /&gt;Also, rustc as a whole seemed to get a lot slower sometime in the past two days. As in, even running three builds in different workspaces, at the same time, resulted in a longer than usual wait for any one of them to complete. And I wasn&apos;t running out of physical RAM.&lt;br /&gt;&lt;br /&gt;Because of that, I spent some time while waiting for compiles to finish nominating bugs. I sorted github issues by least-recently-commented-on. As a result, all the open issues have been touched sometime in the past 2 months, and there are now 142 nominated bugs. I... don&apos;t think we&apos;ll get through all of them in the triage meeting tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1802556&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1802556.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1802475.html</guid>
  <pubDate>Wed, 22 May 2013 01:36:38 GMT</pubDate>
  <title>TMI: Adventures in the front-end</title>
  <link>http://tim.dreamwidth.org/1802475.html</link>
  <description>Still working on &lt;a href=&quot;https://github.com/mozilla/rust/issues/5681&quot;&gt;#5681&lt;/a&gt;, external crate inference. I resolved one of the remaining problems, which was how to not try to download-and-build &lt;tt&gt;std&lt;/tt&gt; in directives like &lt;tt&gt;extern mod std;&lt;/tt&gt; (where &lt;tt&gt;std&lt;/tt&gt; is obviously already installed). But now, much to my dismay, I&apos;m seeing some strange rustc behavior:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;core-macros&amp;gt;:1:0: 1:0 error: duplicate definition of type `__test`
&amp;lt;core-macros&amp;gt;:1 pub mod macros {
                ^
&amp;lt;core-macros&amp;gt;:1:0: 1:0 note: first definition of type __test here:
&amp;lt;core-macros&amp;gt;:1 pub mod macros {
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is only when compiling a file with a &lt;tt&gt;#[test]&lt;/tt&gt; in it. What&apos;s weird is I haven&apos;t changed anything affecting how I interface with rustc. I&apos;m not sure where the duplicate definitions of &lt;tt&gt;__test&lt;/tt&gt; (the name that gets used for the automatically-created &lt;tt&gt;test&lt;/tt&gt; module) are coming from, nor do I have any clear idea how to debug this.&lt;br /&gt;&lt;br /&gt;Otherwise, today was bug triage and cleaning up warnings and stuff, in the moments when rustpkg was recompiling (of which there were many, since the compiler seems to have gotten quite a bit slower over the long weekend).&lt;br /&gt;&lt;br /&gt;Better luck tomorrow, maybe...&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1802475&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1802475.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1802151.html</guid>
  <pubDate>Tue, 21 May 2013 04:07:47 GMT</pubDate>
  <title>Dept. of Transportation</title>
  <link>http://tim.dreamwidth.org/1802151.html</link>
  <description>I found the following on a sticky note (an electronic one, that is) that I wrote while without wifi on a trip on the Coast Starlight sometime in the past year or so:&lt;br /&gt;&lt;br /&gt;&quot;This is like going to the frozen food section while stoned, but paying double for it.&quot; -- someone in the cafe car&lt;br /&gt;&lt;br /&gt;announcement: &quot;We&apos;re turning inland and the reason for that is to get away from some of these more unstable sand dunes.&quot; Actually, I thought the reason we were turning inland is because that&apos;s where the tracks are.&lt;br /&gt;&lt;br /&gt;In Salinas, someone put a bunch of tires on the tracks, which &quot;compromised&quot; the main brake lines so the train had to sit in Salinas for a while while they fixed it. You know what I say to that? Fuck Salinas.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1802151&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1802151.html</comments>
  <category>salinas</category>
  <category>travel</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1801754.html</guid>
  <pubDate>Mon, 20 May 2013 04:03:40 GMT</pubDate>
  <title>TMI: ionmonkey generator syntax changes aren&apos;t dead yet!</title>
  <link>http://tim.dreamwidth.org/1801754.html</link>
  <description>This isn&apos;t Rust-related, but I wanted to report that I spent much of this evening developing a revised version of &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=666399&quot;&gt;my Ionmonkey patch&lt;/a&gt; to implement generator syntax changes for Harmony, and finally submitted the patch for review, after a 9-month break since the last time I worked on this.&lt;br /&gt;&lt;br /&gt;I want to emphasize that I only worked on the syntax changes and haven&apos;t touched any related semantics changes at all. Why did it take so long? Well, mostly because I spent most of the time not working on it. When faced with urgent work on Rust (inside my comfort zone) or JavaScript work (outside my comfort zone), it&apos;s pretty obvious what I&apos;ll pick! But also, it&apos;s just hard to work on a compiler for a language that I don&apos;t know (JavaScript) that&apos;s also implemented in a language I don&apos;t know well (C++).&lt;br /&gt;&lt;br /&gt;Anyway, for the first time in 9 months I can actually relax and wait for a review, instead of feeling like I should work on this the next time I have a free moment and enough energy for work! I&apos;ll enjoy the feeling while it lasts.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1801754&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1801754.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1801457.html</guid>
  <pubDate>Fri, 17 May 2013 01:10:09 GMT</pubDate>
  <title>TMI: external crates: lost and found</title>
  <link>http://tim.dreamwidth.org/1801457.html</link>
  <description>I more-or-less finished external crate inference, at least in the local-crate case. I spent most of the time on that fighting with the borrow checker. To add the right directories into the session&apos;s list of additional library search path, I wrote some visitor code that looks at all the &lt;tt&gt;view_item&lt;/tt&gt;s in the crate. There are two types of &lt;tt&gt;view_item&lt;/tt&gt;s: &lt;tt&gt;extern mod&lt;/tt&gt; directives and &lt;tt&gt;use&lt;/tt&gt; directives. For this, I only care about &lt;tt&gt;extern mod&lt;/tt&gt; directives.&lt;br /&gt;&lt;br /&gt;The problem is that the visitor wants an @-closure, which can&apos;t use borrowed pointers, so accumulating a mutable vector of found &lt;tt&gt;extern mod&lt;/tt&gt; thing seems... hard. I eventually gave up and worked around it with massive amounts of copying.&lt;br /&gt;&lt;br /&gt;Once I get some tidy stuff cleaned up, and figure out the copy issue, I&apos;ll be ready to check that in and close &lt;a href=&quot;https://github.com/mozilla/rust/issues/5681&quot;&gt;#5681&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If I can finish &lt;a href=&quot;https://github.com/mozilla/rust/issues/6407&quot;&gt;#6407&lt;/a&gt; (allowing &lt;tt&gt;extern mod&lt;/tt&gt; directives to name remote packages) and &lt;a href=&quot;https://github.com/mozilla/rust/issues/5683&quot;&gt;#5683&lt;/a&gt; (the test runner for rustpkg, which I&apos;ve already started a rudimentary version of) tomorrow, then I&apos;ll be &lt;a href=&quot;https://github.com/mozilla/rust/wiki/Bikeshed-rustpkg&quot;&gt;on-schedule&lt;/a&gt; so far. It might happen.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1801457&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1801457.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1801014.html</guid>
  <pubDate>Thu, 16 May 2013 02:33:04 GMT</pubDate>
  <title>TMI: Finding external crates</title>
  <link>http://tim.dreamwidth.org/1801014.html</link>
  <description>The remote-package-ID patch landed, so I&apos;m on to &lt;a href=&quot;https://github.com/mozilla/rust/issues/5681&quot;&gt;teaching rustpkg how to find external crates&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Currently, if you include an &lt;tt&gt;extern mod&lt;/tt&gt; directive at the top of a Rust file, like:&lt;br /&gt;&lt;pre&gt;extern mod foo;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;supposing &lt;tt&gt;foo&lt;/tt&gt; lives in some arbitrary (non-system) directory like &lt;tt&gt;/home/tjc/quux/lib&lt;/tt&gt;, you have to pass in a &lt;tt&gt;-L&lt;/tt&gt; flag to rustc, like: &lt;tt&gt;-L /home/tjc/quux&lt;/tt&gt;. That&apos;s so it knows where to find the &lt;tt&gt;foo&lt;/tt&gt; library to link with.&lt;br /&gt;&lt;br /&gt;But in rustpkg we&apos;re trying to make it possible for files to self-describe, and get away from compiler flags as much as possible. So rustpkg will, itself, scan files in the crate it&apos;s trying to build for &lt;tt&gt;extern mod&lt;/tt&gt;s and try to build their dependencies automatically. So far, it only looks in the same workspace that the package it&apos;s building is in, since it only knows about one workspace (the current directory). But once I &lt;a href=&quot;https://github.com/mozilla/rust/issues/5682&quot;&gt;implement RUST_PATH&lt;/a&gt;, that&apos;ll be a lot more powerful.&lt;br /&gt;&lt;br /&gt;Even more so, the plan is to &lt;a href=&quot;https://github.com/mozilla/rust/issues/6407&quot;&gt;change the syntax of &lt;tt&gt;extern mod&lt;/tt&gt; directives&lt;/a&gt; so they don&apos;t have to just name identifiers. So you&apos;ll be able to write:&lt;br /&gt;&lt;pre&gt;extern mod foo = &quot;github.com/catamorphism/foo&quot;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Eventually, this will cause rustpkg to try to fetch the &lt;tt&gt;foo&lt;/tt&gt; package from my repository on github and install it. The package can be referred to in the code with the short name &lt;tt&gt;foo&lt;/tt&gt;, since the entire URL fragment isn&apos;t a valid Rust identifier.&lt;br /&gt;&lt;br /&gt;So far, I&apos;ve implemented the part where rustpkg scans for &lt;tt&gt;extern mod&lt;/tt&gt;s and builds the named packages and dependencies if possible. I&apos;m working on getting it to pass the right directories to the rustc driver so as to actually find the resulting libraries.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1801014&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1801014.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1800820.html</guid>
  <pubDate>Wed, 15 May 2013 01:03:04 GMT</pubDate>
  <title>TMI: Almost conquering remote package IDs</title>
  <link>http://tim.dreamwidth.org/1800820.html</link>
  <description>Back once again from another (shorter) absence -- I had to go down to Olympia to say goodbye to my 11-year-old rabbit, who&apos;d had a stroke and needed to be euthanized. This spring, I&apos;m telling you...&lt;br /&gt;&lt;br /&gt;This morning, &lt;a href=&quot;http://www.cs.ubc.ca/~rxg/&quot;&gt;Ron Garcia&lt;/a&gt; came over to the office from UBC to visit us and hear about Rust. It&apos;s always good to get a bit of external validation, and it seems like he and our team have at least some research interests in common.&lt;br /&gt;&lt;br /&gt;After lunch, I got down to hacking, having previously gotten somewhat derailed by adding a few more tests to &lt;a href=&quot;https://github.com/mozilla/rust/pull/6418&quot;&gt;#6418, the URL-like package-ID pull request&lt;/a&gt;. I hit the &lt;a href=&quot;https://github.com/mozilla/rust/issues/6319&quot;&gt;&quot;computing fictitious type&quot;&lt;/a&gt; ICE that a lot of other people had hit, and so I figured it was time for me to fix it, since I knew it probably related to my recent changes to do with derived errors. Turned out the ICE has to do with erroneous matches on patterns of the form &lt;tt&gt;(foo, bar)&lt;/tt&gt; where the scrutinee doesn&apos;t have a tuple type -- this is a common error because of, among other reasons, argument patterns where it should really be &lt;tt&gt;&amp;(foo, bar)&lt;/tt&gt;. So I fixed that, but that was all over the weekend.&lt;br /&gt;&lt;br /&gt;Today, that patch having landed, I went back to finishing #6418. Partly this required resolving merge conflicts, due to the intervening make-vectors-not-implicitly-copyable change which made PkgIds non-implicitly copyable. Partly, I fixed the ugly hack I was using where output file names would be of the form &lt;tt&gt;foo-0-1&lt;/tt&gt; instead of &lt;tt&gt;foo-0.1&lt;/tt&gt;, where 0.1 is the version number. I was doing that so that rustc wouldn&apos;t drop the portion after the last dot in order to make the output &lt;tt&gt;.o&lt;/tt&gt; filename. But it turns out the correct output file to pass is just &lt;tt&gt;foo&lt;/tt&gt;, since for libraries, rustc pulls the version number out of the metadata (not the filename) anyway.&lt;br /&gt;&lt;br /&gt;And so I can get this checked in before I leave the office tonight, I hope (which is a bit of a race against time, since all the bathrooms in the office are out of order).&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1800820&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1800820.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1800283.html</guid>
  <pubDate>Sat, 11 May 2013 01:41:16 GMT</pubDate>
  <title>TMI: rustpkg can download and build remote packages!</title>
  <link>http://tim.dreamwidth.org/1800283.html</link>
  <description>I finished &lt;a href=&quot;http://tim.dreamwidth.org/1799811.html&quot;&gt;yesterday&apos;s work&lt;/a&gt;, in the &quot;tests pass&quot; sense, so now rustpkg can recognize package IDs that resemble URL fragments. For example, I can write:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;rustpkg build github.com/catamorphism/test-pkg&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;and rustpkg will fetch the &lt;tt&gt;test-pkg&lt;/tt&gt; repository from github, then build a local cached copy of it.&lt;br /&gt;&lt;br /&gt;We also had a useful meeting today to discuss what Servo needs from rustpkg, resulting in ten or so new github issues. (&lt;a href=&quot;https://github.com/mozilla/rust/issues/5677&quot;&gt;The rustpkg metabug&lt;/a&gt; collects them all.) One thing we talked about will actually obviate the need for the tedious string-munging that I talked about in yesterday&apos;s post. Specifically, we&apos;ll change the syntax of the &lt;tt&gt;extern mod&lt;/tt&gt; directive -- which says &quot;link this external crate with this program&quot; -- to take a string rather than an identifier. So instead of:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;extern mod foo;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;we&apos;ll allow:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;extern mod &quot;foo&quot;;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;extern mod &quot;github.com/catamorphism/foo&quot;;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;But in the latter case, how will I refer to &lt;tt&gt;foo&lt;/tt&gt; in my code, since the package ID here is not an identifier? The Rust compiler will either guess the package&apos;s short name from the package ID&apos;s file stem if it&apos;s a valid identifier; in other cases, it will support this syntax too:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;extern mod foo = &quot;github.com/catamorphism/foo-bar&quot;;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;that gives a package with arbitrary characters in its package ID a valid Rust identifier.&lt;br /&gt;&lt;br /&gt;Not rocket science, but incremental progress towards the dream of writing the Rust build system in Rust.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1800283&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1800283.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1800123.html</guid>
  <pubDate>Fri, 10 May 2013 05:07:24 GMT</pubDate>
  <link>http://tim.dreamwidth.org/1800123.html</link>
  <description>A comment on a post I can&apos;t link to (friends-only), but that basically compared certain recreational programming language conferences to church, reminded me that I stopped being an atheist right about the same time as when I started to stop worshiping CS, hackers, and hacker culture. Funny, that.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1800123&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1800123.html</comments>
  <category>computer science</category>
  <category>religion</category>
  <category>geek culture</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1799811.html</guid>
  <pubDate>Fri, 10 May 2013 00:28:17 GMT</pubDate>
  <title>TMI: Back to rustpkg</title>
  <link>http://tim.dreamwidth.org/1799811.html</link>
  <description>After taking three days off to fly to Europe, attend a funeral, and fly back, then some time to catch up on the inevitable email and bug-triage backlog, I&apos;m back to working on remote package IDs for rustpkg.&lt;br /&gt;&lt;br /&gt;On the plane over the weekend, I was working on getting rustpkg to accept package IDs that resemble URLs. For example: &lt;tt&gt;rustpkg build github.com/catamorphism/test-pkg&lt;/tt&gt;. So, not really a URL, but a URL fragment. rustpkg should do the obvious thing and use git to clone the remote repo into a local directory, then build the local cached copy as usual.&lt;br /&gt;&lt;br /&gt;You&apos;d think this wouldn&apos;t be hard, but I ran into issues because internally, rustpkg normalizes hyphens into underscores so that all package IDs can be legal Rust identifiers. (Rust identifiers can&apos;t contain dashes, but can contain underscores.) But for a remote package, you still need to keep track of the original package ID since that dictates the URL you need to fetch from. I solved this by adding two fields, a local path and a remote path, into rustpkg&apos;s internal representation of package IDs, but I&apos;m still not sure this is the right solution. It beats calling a &lt;tt&gt;normalize&lt;/tt&gt; function in an ad hoc way everywhere, as I was doing before, though.&lt;br /&gt;&lt;br /&gt;Then the second thing is being consistent about which build artifacts contain the version number as part of their name (for example, the library name does, but the installed executable doesn&apos;t...) though I&apos;m not sure why this wasn&apos;t coming up before.&lt;br /&gt;&lt;br /&gt;And, doubtless, more than that. Details, details...&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1799811&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1799811.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1799448.html</guid>
  <pubDate>Thu, 09 May 2013 02:39:54 GMT</pubDate>
  <title>YVR-&amp;gt;MSP-&amp;gt;LHR, BRS-&amp;gt;AMS-&amp;gt;YVR</title>
  <link>http://tim.dreamwidth.org/1799448.html</link>
  <description>Saturday, four days ago, I flew from Vancouver to Minneapolis, spent my layover chatting with my dear friend ADB who had come out to the airport to meet me, and then flew to London on a red-eye. (But not before ending my 31-month streak of never getting either groped or pornoscanned in an airport; there was only one checkpoint open at MSP that Saturday night, with only a scanner option. I had been planning to opt out if that happened, but at the last minute I decided I didn&apos;t want a random cis person touching me. In any case, I couldn&apos;t think of a better reason to end the streak.)&lt;br /&gt;&lt;br /&gt;Sunday, I arrived in London feeling like a zombie, since I&apos;d only slept for about four hours on the plane, if that. Plan A had been to go to a coffee shop for a few hours and noodle around pointlessly on the Internet, I mean catch up on work, I mean... In any case, my laptop was almost dead and the power adapter I&apos;d bought at the airport wasn&apos;t grounded, which of course I didn&apos;t notice when buying it, in my zombified state. So I collected all my belongings and headed down the road to the Superdrug, where I bought another adapter. Nope, that one wasn&apos;t grounded either, and so I embarked on a long, long journey to the Apple store in Covent Garden to get the &quot;world traveler kit&quot;. I ended up finding out just how long it can take me to find the Covent Garden market starting out from the Covent Garden tube stop (answer: a long time), and by the time I got back to the coffee shop where I&apos;d planned to meet &lt;span style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://jasonelvis.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://www.dreamwidth.org/img/external/lj-userinfo.gif&apos; alt=&apos;[livejournal.com profile] &apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; width=&apos;17&apos; height=&apos;17&apos;/&gt;&lt;/a&gt;&lt;a href=&apos;http://jasonelvis.livejournal.com/&apos;&gt;&lt;b&gt;jasonelvis&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, he was waiting there.&lt;br /&gt;&lt;br /&gt;After dinner with Jason, Tracey, and their adorable three-year-old, we all agreed that I&apos;d want to collapse... except instead, Jason and I stayed up for a while talking about Debra. I was able to put my tiredness aside, because getting time to talk about her with someone who knew her the way I did was really important to me and meant a lot.&lt;br /&gt;&lt;br /&gt;Monday, we accumulated more people and headed out to Bath in various cars. We went to a park and (unexpectedly) saw hot air balloons take off, then Indian take-out food was had and silly TV was watched.&lt;br /&gt;&lt;br /&gt;And then, Tuesday, the big event. Prefaced by hat shopping with the three of us guys in our little entourage, since we&apos;d been told that Debra wanted the funeral to reflect her Jewish heritage, though it wouldn&apos;t be entirely traditional. So part of that was that the men would cover their heads, and the women would too if they wanted to. That was fine, but none of us had hats. Then it turns out to be difficult to find a funeral-appropriate hat in May, but the clearance rack at Debenhams saved the day.&lt;br /&gt;&lt;br /&gt;Fully equipped with hats, we drove the 45 minutes to Bristol and got to the chapel and cemetery, in South Bristol, a bit early but not too early. I met various people who I&apos;d only known from their LiveJournal comments before, and before we knew it, we were being called in for the service. The opening music, &quot;Good Morning Starshine&quot;, let us know that this wasn&apos;t going to be an &lt;i&gt;entirely&lt;/i&gt; traditional funeral. Debra wasn&apos;t a traditional person, so that was appropriate.&lt;br /&gt;&lt;br /&gt;There were several eulogies, including one delivered by Jason, which captured the playful, caring, bum-joke-loving Debra who I knew. But the moments I remember most clearly were actually the music: Kate Bush&apos;s &quot;Feel It&quot; in the middle, and Lemon Jelly&apos;s &quot;Space Walk&quot; at the end. Someone had posted a link to &quot;Space Walk&quot; on Debra&apos;s Facebook wall soon after she died, and I listened to it in my apartment. Hearing it again at the end of the service took me back to that confused, surreal state.&lt;br /&gt;&lt;br /&gt;We milled out to the grave site, which was facing out on a hillside with a really nice view of the river and the green hills beyond. I thought to myself that maybe someday, years from now, I would have some reason to be back in England again, and I would rent a bike and ride from Bristol up to the cemetery; it would be a nice ride. And they laid her in her grave, in a wicker casket, which seemed very fitting.&lt;br /&gt;&lt;br /&gt;A group of us went to a pub nearby for lunch afterward, and comics that Debra had been involved in making got passed around; I got to look at some I hadn&apos;t seen before. Then we headed to Debra&apos;s house to pay our respects to the family and such friends as were still there. Talking to Debra&apos;s mother and stepfather, I found myself struggling for words; I found it hard to explain what Debra and I were to each other, and resorted, as so many queer folks do, to the language of &quot;friends&quot;. Maybe it&apos;s something to do with that whole queer thing of not being able to assume there&apos;s a framework your relationships will fit into; maybe it&apos;s something to do with how none of it really makes sense if you can&apos;t assume the other person understands the notion of deep, meaningful, partially computer-mediated relationships. Probably some of both.&lt;br /&gt;&lt;br /&gt;Debra&apos;s &lt;a href=&quot;http://badasstronaut.livejournal.com/1164596.html&quot;&gt;last LiveJournal post&lt;/a&gt; was about hummus. There are worse things one&apos;s last LiveJournal post could be about. Or rather... the last one I can see; due to me moving from LiveJournal to Dreamwidth, I&apos;m no longer able to see a lot of her posts that I was able to see before, which is a little sad; I would have liked to re-read her posts from around the first time we met in person, especially.&lt;br /&gt;&lt;br /&gt;And then the next morning, Jason did what only a true friend would do and drove me to the airport bus stop at 5:45 in the morning, and eventually I made it back to Vancouver, a place I can&apos;t lay any permanent claim on.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&quot;well, it could be love&lt;br /&gt;Or it could be just lust but it will be fun&lt;br /&gt;It will be wonderful&quot;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id=&quot;1&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1799448&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1799448.html</comments>
  <category>badasstronaut</category>
  <category>death</category>
  <category>travel</category>
  <category>life</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1799202.html</guid>
  <pubDate>Sat, 04 May 2013 23:41:10 GMT</pubDate>
  <title>How To Do Things: Some Preliminary Notes</title>
  <link>http://tim.dreamwidth.org/1799202.html</link>
  <description>&lt;h2&gt;Brain Hacks&lt;/h2&gt;

Almost a year ago, a friend and I had an offhand email exchange that let to me saying I wanted to write a blog post about what I&apos;ve discovered so far in re: managing myself and getting myself to do things in a way leading to more happiness for myself. These tips apply to both work and personal goals (whether it&apos;s a hobby, household maintenance, making art, or keeping up friendships); I suspect for many people like me, the lines between can be blurry.

&lt;p&gt;&quot;Time management&quot; is the best phrase for what this post is about, I suppose, though it&apos;s a phrase that has bad connotations for me (as I&apos;ll explain later). Though it&apos;s less succinct, I could also say it&apos;s a post about how to hack your brain in order to get what you want. (Are you not your brain? It&apos;s been a while since I took sophomore philosophy, but to a very rough approximation, I&apos;m going to assume each of us is made up of communicating subprocesses that sometimes cooperate and sometimes conflict. An example is when part of you knows you have to get up for work at 7 AM tomorrow and that you need 8 hours of sleep per night if you&apos;re not going to feel awful, but you stay up until 2 AM looking at cat macros anyway, beccause another part of you needs to be soothed with something silly and familiar.) I could also describe it as self-organization or as being your own project manager. I suspect a lot of people know what I mean, though, and it certainly hasn&apos;t gotten any easier to deal with distractions and focus on what&apos;s important now that lots of us have the Internet next to our butts all day and night.

&lt;p&gt;I feel a bit silly giving advice on self-organization, because I still feel pretty disorganized and that I&apos;m pretty inefficient about how I do a lot of things. But this post isn&apos;t really &lt;i&gt;advice&lt;/i&gt; so much as my notes on a collection of ongoing experiments. If these notes give you some ideas you can use, great! If not, well, science isn&apos;t always useful.

&lt;p&gt;So here&apos;s what I&apos;ve learned about getting things done. I only because &lt;i&gt;willing&lt;/i&gt; to learn about it in past 5-6 years or so. That was about when I read the book &lt;i&gt;Getting Things Done&lt;/i&gt; (GTD) by David Allen; it wasn&apos;t super helpful to me (partly because of its orientation towards using physical file folders rather than a computer, but maybe there is an updated edition now), but I did take away three good points from it:

&lt;ol&gt;&lt;li&gt;Keeping one&apos;s email inbox zero -- the book may even have been talking about a literal physical inbox, but it&apos;s the same zero. The author says that whenever you have an item in an inbox, that&apos;s something screaming out for your attention, and it causes anxiety because you don&apos;t know what the next step is towards addressing it. That&apos;s certainly true for me. So I&apos;ve made more of an effort than I did before I read the book to keep email &lt;i&gt;not&lt;/i&gt; in my inbox, and, if something is complicated, to make a to-do item to address is as opposed to just leaving it in my inbox. To-do items are better than emails in my inbox since they&apos;re attached to a particular day, if not a particular time (more about this later).

&lt;li&gt;GTD talks about knowing what the next step is rather than just having a huge, vague item on your to-do list; and also identifying the next step anytime you stop working on a given project to go rest or to work on something else. For example, if my to-do list says &quot;start working on rustpkg&quot;, I will put that off, because it&apos;s a huge task and I don&apos;t know where to start. If it says &quot;write a unit test for the install command&quot;, that&apos;s a much more approachable step, and will probably lead to more work beyond just that one little sub-task. I could make the first step even more specific than that, but get the idea.

&lt;li&gt;This is a bit like the first point, but: GTD talks about the importance of &lt;b&gt;writing everything down&lt;/b&gt;. I&apos;m still working on this, but it&apos;s one of the major principles that has allowed me to become a more functional person. I don&apos;t know if my memory is unusually bad, I just know I forget things if I don&apos;t write them down. This applies to both week-by-week schedules and, sometimes, just to sequences of tasks I do regularly. For example, a year or two ago I made a list of everything I do to get ready in the morning, and another one of everything I do before I go to bed at night (the latter one starts something like &quot;take meds, brush teeth, use neti pot...&quot;, though actually I&apos;ve even broken up some of those into more steps). This is because I noticed that I would forget to do things, as well as put off getting ready for bed because there were too many things to do and it was easier to be on the computer. It seems silly, but just having these lists has helped me a lot when it comes to going to bed when I&apos;m actually tired (as opposed to staying up late because I&apos;m too tired to coordinate getting to bed) as well as not sitting around for hours in the morning doing absolutely nothing because again, thinking about getting dressed and ready is overwhelming.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;I&apos;m pretty sure I have some sort of executive function issues; when people who are on the autism spectrum talk about executive function issues, it strikes a chord with me (though I&apos;ve never been diagnosed with autism and many other aspects of being autistic don&apos;t seem to be things I&apos;ve experienced), though I&apos;ve never been formally diagnosed. I &lt;i&gt;was&lt;/i&gt; provisionally diagnosed with inattentive ADD once, as an adult; unfortunately, the meds had no effect on me and so to me, there isn&apos;t much point knowing whether I have ADD, anxiety that acts like ADD, or something else. In any case, maybe it doesn&apos;t matter (for me), if I can find the right accommodations to make for myself and learn to be okay with making those accommodations for myself, with taking specific action to make things easier that might already be easier for a lot of people. But so what -- I&apos;m not a lot of people.

&lt;p&gt;While I&apos;m talking about diagnoses, I&apos;ll also note that a lot of anxiety and maladaptive coping mechanisms come from having been treated very badly in the past. It&apos;s helpful to talk about these past experiences, but at least for me, that on its own doesn&apos;t make me able to function as an adult. I want to say this in as simple words as possible: I think the story that is often told about depression and anxiety as &quot;chemical imbalances&quot; is wrong or at least misleading. There is no doubt some amount of truth to it (though &lt;a href=&quot;http://beyondmeds.com/2012/01/25/chemicalimbalancemythfalls/&quot;&gt;possibly not as much as we&apos;ve been thinking&lt;/a&gt;) but the neat, tidy story that such illnesses are the result of random brain misfirings shifts blame from a society that enables systematic abuse of children and everyone else placed in a position of lesser power, onto individuals who can be deemed as defective and disregarded. Politically, I would feel dishonest if I didn&apos;t mention this, but on a pragmatic, day-to-day-survival-so-you-can-pay-the-rent-and-not-get-fired level, at least sometimes I have to occupy a mode where I&apos;m just working with what I have.

&lt;h2&gt;How To Do Things&lt;/h2&gt;

So here&apos;s what I&apos;ve figured out about how to do things. I present it here not assuming that it will necessarily work for anyone else, but in the hopes that some of it might be adaptable or at least inspiring. I certainly wouldn&apos;t want to try to generalize, since then I would just be making stuff up, so I&apos;m sticking to what specifically has worked for me.

&lt;span class=&quot;cuttag_container&quot;&gt;&lt;span style=&quot;display: none;&quot; id=&quot;span-cuttag___1&quot; class=&quot;cuttag&quot;&gt;&lt;/span&gt;&lt;b&gt;(&amp;nbsp;&lt;a href=&quot;http://tim.dreamwidth.org/1799202.html#cutid1&quot;&gt;Read more...&lt;/a&gt;&amp;nbsp;)&lt;/b&gt;&lt;div style=&quot;display: none;&quot; id=&quot;div-cuttag___1&quot; aria-live=&quot;assertive&quot;&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1799202&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1799202.html</comments>
  <category>depression</category>
  <category>time</category>
  <category>anxiety</category>
  <category>braaaaaaains</category>
  <category>life</category>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1798917.html</guid>
  <pubDate>Sat, 04 May 2013 05:27:06 GMT</pubDate>
  <title>Book recommendation of the year</title>
  <link>http://tim.dreamwidth.org/1798917.html</link>
  <description>&quot;If it weren&apos;t for the unconventionality of my desires, my mind might never have been forced to reckon with my body.&quot;&lt;br /&gt;&lt;br /&gt;Just finished reading Alison Bechdel&apos;s new (okay, not all that new, but I&apos;m behind the times) graphic memoir _Are You My Mother?_. DTWOF was, of course, awesome; I enjoyed _Fun Home_; but this one is her best work, IMO. I hope she writes many more books that are as personal and insightful.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1798917&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1798917.html</comments>
  <category>books</category>
  <category>reading</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1798770.html</guid>
  <pubDate>Fri, 03 May 2013 01:28:03 GMT</pubDate>
  <title>TMI: Adventures in library loading</title>
  <link>http://tim.dreamwidth.org/1798770.html</link>
  <description>Life does not, apparently, go on as fast as one hopes; yesterday I was too exhausted and depressed to work and took a day off. To which I credit me being semi-functional today.&lt;br /&gt;&lt;br /&gt;In any case, today I learned about the magic of rustc&apos;s &lt;tt&gt;filesearch&lt;/tt&gt; module. What seems like eons ago but probably only a week ago, I set up some wacky symbolic link inside my build directory to get rustpkg to be able to find the core library. After pulling a new LLVM version, I had to blow away my build directory, as one often does. And thus, the rustpkg tests no longer ran because once again, it couldn&apos;t find core. And of course, the same thing happened on the bots, &lt;a href=&quot;https://github.com/mozilla/rust/pull/6124&quot;&gt;causing tests to fail&lt;/a&gt;, because my hack was a truly terrible hack (that only worked on my local machine).&lt;br /&gt;&lt;br /&gt;rustc infers the sysroot -- which is the root directory that it uses for searching for standard libraries -- from the name of the executable you&apos;re running. Keep in mind that rustc is just-a-library so there&apos;s more than one possible executable name. Most executables sit under &lt;tt&gt;build/x86_64-apple-darwin/stage2/bin/whatever&lt;/tt&gt; in our build system (not even talking about installed builds here, just in-place builds). The stages refer to the stages of compiler bootstrapping, but for testing we usually run stage 2. And of course, the host and  But it happens that the test executable containing all the &lt;tt&gt;#[test]&lt;/tt&gt; functions lives in &lt;tt&gt;build/x86_64-apple-darwin/tests/&lt;/tt&gt; and so the parent directory getting inferred was totally wrong. The answer is basically for me to just add in some terrible hacks to override the sysroot from my test functions, but it took me a while to get to that.&lt;br /&gt;&lt;br /&gt;They didn&apos;t tell me in grad school that there&apos;d be days like these...&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1798770&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1798770.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1798328.html</guid>
  <pubDate>Fri, 26 Apr 2013 01:49:46 GMT</pubDate>
  <title>TMI: rustpkg install</title>
  <link>http://tim.dreamwidth.org/1798328.html</link>
  <description>The past couple days, I&apos;ve been unsurprisingly not very focused on work; you&apos;ll know why if you read my most recent blog post that doesn&apos;t have the &quot;research&quot; tag.&lt;br /&gt;&lt;br /&gt;But life does go on. Having landed the file searching patch that I talked about in my previous Rust post, I went on to working on &lt;tt&gt;rustpkg install&lt;/tt&gt;. Like a good little software developer, I wrote the tests first, making the actual implementation pretty painless. Right now my tests are failing because apparently, I&apos;m creating directories with the wrong permissions. Although &lt;tt&gt;ls&lt;/tt&gt;ing the directories, they look fine, so the Rust permission-checking code I wrote was probably wrong.&lt;br /&gt;&lt;br /&gt;That (and a triage meeting) was about all I could manage today.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1798328&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1798328.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1798068.html</guid>
  <pubDate>Wed, 24 Apr 2013 01:59:15 GMT</pubDate>
  <title>Debra Boyask, 1966-2013</title>
  <link>http://tim.dreamwidth.org/1798068.html</link>
  <description>Debra, aka &lt;span style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://badasstronaut.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://www.dreamwidth.org/img/external/lj-userinfo.gif&apos; alt=&apos;[livejournal.com profile] &apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; width=&apos;17&apos; height=&apos;17&apos;/&gt;&lt;/a&gt;&lt;a href=&apos;http://badasstronaut.livejournal.com/&apos;&gt;&lt;b&gt;badasstronaut&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, was the first person I added as a friend on LiveJournal who I didn&apos;t already know, back in 2002. This was mainly on the basis of both of us having Nina Paley in our interests list. I met her in person when I visited her in Bristol, England in 2006 while I was interning at Microsoft Research. Unexpectedly, we became lovers. That didn&apos;t last (living on different continents will do that, though for a brief period, things were such that I actually considered moving to the UK), but we always remained friends. She visited me once when I lived in Portland, and I visited her twice more in Bristol; the last time I saw her was a year ago when she was visiting New York City with her wife Kris, and I flew out to NYC to see them.&lt;br /&gt;&lt;br /&gt;Debra was creative, intellectually probing, and very funny. She made indie comics and was an educational developer and university lecturer; in that order (at least as I saw her). Unfortunately, most of her comics don&apos;t seem to be online, &lt;a href=&quot;http://teacake.comics.org.nz/do.htm&quot;&gt;except for a few&lt;/a&gt;. She started out as a hairdresser before she went to grad school, and at one point planned to write a Ph.D dissertation on hairdressers&apos; professional culture (but, like me, she never finished her Ph.D). When she lived in New Zealand, she also did feminist and other political activism.&lt;br /&gt;&lt;br /&gt;She liked robots and bunnies and had a great sense of style. One of the times with her that I remember best was when I visited her after going to ICFP in Edinburgh, in September 2009; we went to a bed and breakfast in Hay-on-Wye for two nights and went kayaking and, one night, sat in the pub attached to the B&amp;B drinking scrumpy (or at least I did) and listening to some guys literally talk about how to &quot;make Britain great again&quot;.&lt;br /&gt;&lt;br /&gt;There&apos;s so much more, but nothing I could say would be adequate. For the past year I&apos;ve known that Debra was ill with breast cancer; she didn&apos;t seem to want to talk about it much, preferring to go on as normal, so I generally didn&apos;t press the issue. We did exchange emails on the subject of top surgery; rather than having a mastectomy with breast reconstruction, she wanted to have a male chest reconstructed so that she could present a more genderqueer appearance. She wrote to me back in September 2012:&lt;br /&gt;&lt;blockquote&gt;Strangely, I am quite excited about it! It&apos;s funny - some women I&apos;ve&lt;br /&gt;talked to say they&apos;d be most worried about the hair loss (what???) and&lt;br /&gt;losing their bust. Those were the least of my concerns, and if I come&lt;br /&gt;through all this successfully I feel I will be able to celebrate with&lt;br /&gt;new clothes and almost a new persona. And I might take up running...&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I will miss her so much. I know that her wife Kris and her mother took good care of her over the past year, and she wasn&apos;t lacking for support. Even so, I wish I&apos;d been a bit more in touch with her instead of assuming she would prefer to be left alone.&lt;br /&gt;&lt;br /&gt;This is the one picture of her I could find that I took (I have more, but am disorganized with my data), on that trip to Hay-on-Wye in 2009):&lt;br /&gt;&lt;img src=&quot;http://catamorphism.org/debra.jpg&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1798068&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1798068.html</comments>
  <category>badasstronaut</category>
  <category>death</category>
  <category>life</category>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1797831.html</guid>
  <pubDate>Tue, 23 Apr 2013 01:29:44 GMT</pubDate>
  <title>TMI: rustpkg can find files</title>
  <link>http://tim.dreamwidth.org/1797831.html</link>
  <description>Today&apos;s work was on bringing the reality of rustpkg up to the point described in &lt;a href=&quot;https://github.com/mozilla/rust/pull/6015&quot;&gt;my doc pull request&lt;/a&gt;, at least up to the point of the directory and file structure of packages and having rustpkg look for package source files in a &lt;tt&gt;src&lt;/tt&gt; directory inside a workspace. Also, now it uses a one &lt;tt&gt;build&lt;/tt&gt; directory per workspace for putting object files and other temporary files in, instead of one per package. A workspace is just a container for packages; right now, always a directory on your local filesystem, but in the future, also on github or some other remote server containing version control repositories.&lt;br /&gt;&lt;br /&gt;Now most of the test scenarios that I checked in build, and I&apos;ve crossed off one more task on &lt;a href=&quot;https://github.com/mozilla/rust/wiki/Bikeshed-rustpkg&quot;&gt;the schedule&lt;/a&gt;. Yay crossing things off. &lt;a href=&quot;https://github.com/mozilla/rust/pull/6014&quot;&gt;This pull request&lt;/a&gt; contains the work I&apos;m talking about.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1797831&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1797831.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1797452.html</guid>
  <pubDate>Fri, 19 Apr 2013 00:13:04 GMT</pubDate>
  <title>TMI: Documentation: what a concept</title>
  <link>http://tim.dreamwidth.org/1797452.html</link>
  <description>With rustpkg I&apos;m trying as much as I can to stick to a tests-first/docs-first approach (I suppose strictly speaking, tests-first/docs-second), so &lt;a href=&quot;https://github.com/mozilla/rust/pull/5948&quot;&gt;this is my pull request for today&lt;/a&gt;: adding a draft of a manual (without much actual content, but starting to write things down) and rearranging the test scenarios again to have the directory structure that we agreed on.&lt;br /&gt;&lt;br /&gt;I figure when I don&apos;t know exactly what I&apos;m doing, writing things down as I go along (rather than waiting until the end to write the docs) helps me see if there&apos;s an area I&apos;m still not clear on. I don&apos;t know why it&apos;s so hard for me to remember that that&apos;s the case for me :-)&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1797452&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1797452.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1797321.html</guid>
  <pubDate>Thu, 18 Apr 2013 18:16:03 GMT</pubDate>
  <title>Because I do write about topics other than Rust hacking occasionally...</title>
  <link>http://tim.dreamwidth.org/1797321.html</link>
  <description>I&apos;ve got a new blog post up at geekfeminism.org about &lt;a href=&quot;http://geekfeminism.org/2013/04/18/structure-and-justice/&quot;&gt;structureless organizations&lt;/a&gt; and whether or not they are good for people experiencing marginalization in the tech industry. You can also read my &lt;a href=&quot;http://geekfeminism.org/author/mappings/&quot;&gt;past posts&lt;/a&gt; on geekfeminism.org.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1797321&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1797321.html</comments>
  <category>work</category>
  <category>open source</category>
  <category>feminism</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1797087.html</guid>
  <pubDate>Thu, 18 Apr 2013 02:46:33 GMT</pubDate>
  <title>TMI: More rustpkg work</title>
  <link>http://tim.dreamwidth.org/1797087.html</link>
  <description>Today&apos;s work on rustpkg is all in &lt;a href=&quot;https://github.com/mozilla/rust/pull/5920&quot;&gt;my pending pull request&lt;/a&gt;. I wrote out &lt;a href=&quot;https://github.com/mozilla/rust/wiki/Bikeshed-rustpkg&quot;&gt;a schedule&lt;/a&gt; containing all the significant pieces-of-work remaining on rustpkg that Graydon and I could think of right now, and estimated times for each task (like all software engineers I&apos;m terribly bad at estimating time for things). I&apos;m hoping having everything laid out in a linear fashion will help me stay on-track, though.&lt;br /&gt;&lt;br /&gt;I&apos;m also glad to have spent some time writing down hypothetical-rust-package-commands-that-should-work (in a text file in the pull request), even though we can&apos;t do automatic testing yet. It&apos;s good to know what you&apos;re doing before you do it...&lt;br /&gt;&lt;br /&gt;As an end-of-the-day small task, I made the typechecker &lt;a href=&quot;https://github.com/catamorphism/rust/commit/f462b02c4b45b3d883c92af354b47d4945fb6cd7&quot;&gt;able to survive more errors&lt;/a&gt;; generally the typechecker should be able to emit a type error and then keep going (since most people like to see as many errors as possible so they can try to fix them in one go, rather than one at a time) but there are a few cases here and there where it&apos;s tricky to set up the right data in various environments for the typechecker to keep going. So there&apos;s two less of those cases now.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1797087&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1797087.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1796839.html</guid>
  <pubDate>Wed, 17 Apr 2013 00:28:20 GMT</pubDate>
  <title>TMI: Today in rustpkg</title>
  <link>http://tim.dreamwidth.org/1796839.html</link>
  <description>I&apos;d given feedback on a rustc pull request saying &quot;try to get rid of that copy&quot; in a pull request, but when asked how, I looked at the code and realized it wasn&apos;t easy to rewrite without a copy. So that was an hour gone!&lt;br /&gt;&lt;br /&gt;Then, back to rustpkg; I started testing it on the test cases I wrote yesterday (just manually, for now, though writing a test runner needs to happen soon) and noticed that I wasn&apos;t naming the output executables or libraries correctly. So I added code to synthesize the &lt;tt&gt;link&lt;/tt&gt; crate attributes with the inferred name and version, so you don&apos;t have to write it explicitly in the package file. Now, 2 out of 3 of my test cases work.&lt;br /&gt;&lt;br /&gt;And finally, to round the day off, removing a few more bad copies.&lt;br /&gt;&lt;br /&gt;Next:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Error out in the case where no &lt;tt&gt;lib.rs&lt;/tt&gt;, &lt;tt&gt;main.rs&lt;/tt&gt;, &lt;tt&gt;bench.rs&lt;/tt&gt;, or &lt;tt&gt;test.rs&lt;/tt&gt; fine is found&lt;br /&gt;&lt;li&gt;Split tests into &lt;tt&gt;pass&lt;/tt&gt; and &lt;tt&gt;fail&lt;/tt&gt; subdirectories (for tests expected to build correctly, and tests expected to fail)&lt;br /&gt;&lt;li&gt;Add a test case to test that a package without a lib, main, bench, or test file fails.&lt;br /&gt;&lt;li&gt;Submit a new pull request.&lt;br /&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1796839&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1796839.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1796540.html</guid>
  <pubDate>Tue, 16 Apr 2013 01:37:02 GMT</pubDate>
  <title>TMI: rustpkg marches on</title>
  <link>http://tim.dreamwidth.org/1796540.html</link>
  <description>I landed &lt;a href=&quot;https://github.com/mozilla/rust/pull/5861&quot;&gt;this commit&lt;/a&gt; from the end of last week, cleaning up tests and error handling in rustpkg, and I submitted &lt;a href=&quot;https://github.com/mozilla/rust/pull/5896&quot;&gt;this pull request&lt;/a&gt; that allows rustpkg to build executables.&lt;br /&gt;&lt;br /&gt;When talking to Graydon about how to do regression tests for rustpkg, I realized I&apos;d been doin&apos; it wrong, at least a bit -- the new policy for rustpkg is that you&apos;re going to have to name your crate files &lt;tt&gt;main.rs&lt;/tt&gt; if you want to get an executable and &lt;tt&gt;lib.rs&lt;/tt&gt; if you want to get a library (both can coexist), with additional options for building tests and benchmarks. I&apos;d been allowing an additional option, which is naming your main crate &lt;tt&gt;foo.rs&lt;/tt&gt; for a package named &lt;tt&gt;foo&lt;/tt&gt;, and inferring whether or not it was a library based on the presence or absence of a &lt;tt&gt;main&lt;/tt&gt; function. This was all wrong, so I&apos;ll have to undo that work tomorrow. I&apos;m trying to tell myself I&apos;m &quot;exhibiting flexibility and willingness to admit mistakes&quot; rather than &quot;spending all my time writing code that I then delete&quot;.&lt;br /&gt;&lt;br /&gt;For an easy end-of-the-day task, I decided I&apos;d try to kill off a few bad copies, but that involved rebasing a branch, which involved rebuilding LLVM, which is evidently going to involve deleting my &lt;tt&gt;build/&lt;/tt&gt; directory and starting from scratch. Which, amusingly, emphasizes the need for a functional rustpkg!&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1796540&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1796540.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1796076.html</guid>
  <pubDate>Sat, 13 Apr 2013 00:52:21 GMT</pubDate>
  <title>TMI: rustpkg: landed!</title>
  <link>http://tim.dreamwidth.org/1796076.html</link>
  <description>My pull request from yesterday landed, so I&apos;m on to further cleanup. First, I submitted &lt;a href=&quot;https://github.com/mozilla/rust/pull/5861&quot;&gt;another pull request&lt;/a&gt; to use a condition for error handling instead of making a function return an &lt;tt&gt;Option&lt;/tt&gt;. Conditions are supposed to be for rare errors; this particular case was the situation where creating the &lt;tt&gt;build&lt;/tt&gt; directory in the package directory to put the build output in fails. I figured that would be pretty rare. I hadn&apos;t really written code with conditions before, but they&apos;re about as simple as it gets. Sort of like exceptions, but simpler and implemented in terms of Rust macros.&lt;br /&gt;&lt;br /&gt;For my next trick, I wanted to make sure that rustpkg could compile a package that &lt;i&gt;doesn&apos;t&lt;/i&gt; have a package script. For realism, I decided to see which of the Servo submodules had a relatively simple Makefile, meaning that rustpkg should be able to build it as-is; I picked &lt;tt&gt;rust-core-foundation&lt;/tt&gt;, and am working on getting it to build now.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1796076&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1796076.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1795431.html</guid>
  <pubDate>Fri, 12 Apr 2013 01:19:15 GMT</pubDate>
  <title>TMI: First rustpkg pull request!</title>
  <link>http://tim.dreamwidth.org/1795431.html</link>
  <description>So I finally submitted &lt;a href=&quot;https://github.com/mozilla/rust/pull/5847&quot;&gt;a pull request&lt;/a&gt; with my initial work on rustpkg. I&apos;m embarrassed at how little this patch actually does; I&apos;ve tested it with one command, &lt;tt&gt;build&lt;/tt&gt;, on one package, &lt;a href=&quot;https://github.com/catamorphism/rust-sdl/tree/new-rustpkg&quot;&gt;my fork of rust-sdl&lt;/a&gt;. The difference now is that as per &lt;a href=&quot;https://github.com/mozilla/rust/issues/5679&quot;&gt;#5679&lt;/a&gt;, rustpkg doesn&apos;t require a package to explicitly declare its ID and version number; instead, it just looks for a directory with the name you give it. So if you write &lt;tt&gt;rustpkg build rust-sdl&lt;/tt&gt;, rustpkg will expect the current directory to contain a directory called &lt;tt&gt;rust-sdl&lt;/tt&gt; that contains the package. Likewise, if it was &lt;tt&gt;rustpkg build rust-sdl-0.1&lt;/tt&gt;, it would infer the version to be 0.1 (though I don&apos;t think I actually implemented that part yet).&lt;br /&gt;&lt;br /&gt;I still have to figure out how to write unit tests for this. Also, rather than trying to do everything at once, I made several of the commands other than &lt;tt&gt;build&lt;/tt&gt; fail with &quot;not yet implemented&quot;. rustpkg wasn&apos;t in a great state anyway, so I don&apos;t think this will make anyone too unhappy. I think it&apos;s better to explicitly fail than quietly do something not-quite-right.&lt;br /&gt;&lt;br /&gt;Hopefully I can proceed faster now that I&apos;m past the awkward initial &quot;what am I doing?&quot; stage of the project.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1795431&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1795431.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://tim.dreamwidth.org/1795151.html</guid>
  <pubDate>Thu, 11 Apr 2013 01:34:52 GMT</pubDate>
  <title>TMI: rustpkg progress</title>
  <link>http://tim.dreamwidth.org/1795151.html</link>
  <description>My titles are un-creative lately.&lt;br /&gt;&lt;br /&gt;So remember when I said I&apos;d gotten rust-sdl building with rustpkg? I really... didn&apos;t. Or else, I broke a whole lot of code while rebasing. Either way, I spent today and yesterday (when not paying attention to the work week proceedings) getting it to work again. And, just now, I finally did, after learning a valuable lesson about Unix command line argument processing that doubtless I knew in 2004 but didn&apos;t know yesterday.&lt;br /&gt;&lt;br /&gt;Next, continue cleaning up code so I&apos;m not embarrassed by &quot;oops, how did that get in there?&quot; moments when I submit a pull request.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1795151&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>http://tim.dreamwidth.org/1795151.html</comments>
  <category>research</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
