<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="http://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2009-05-03:234887</id>
  <title>Tim's journal</title>
  <subtitle>tl;dr since 1995</subtitle>
  <author>
    <name>Tim Chevalier</name>
  </author>
  <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom"/>
  <updated>2013-06-19T23:57:40Z</updated>
  <dw:journal username="tim" type="personal"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1808893</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1808893.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1808893"/>
    <title>TMI: Open Source Bridge talk: given!</title>
    <published>2013-06-19T23:57:40Z</published>
    <updated>2013-06-19T23:57:40Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Here are &lt;a href="http://catamorphism.org/Writing/Rust-Tutorial-tjc.pdf"&gt;the slides&lt;/a&gt; for my talk, "Rust: a Friendly Introduction". I'd love to clarify anything that needs it in comments on this post.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1808893" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1808585</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1808585.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1808585"/>
    <title>TMI: Day 1 of Open Source Bridge</title>
    <published>2013-06-19T05:38:52Z</published>
    <updated>2013-06-19T05:38:52Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">The first day of &lt;a href="http://opensourcebridge.org/"&gt;Open Source Bridge&lt;/a&gt; was great! I noted on Twitter that I attended five talks in a row by women, and could have gone to a sixth if I hadn't wanted to sit out the last session to work on my slides. Also, at least two and maybe three different talks that mentioned intersectionality! This is the only open-source conference I've been to, but I'm getting the feeling it's not a typical one. Also, it's awesome that all the food is vegetarian (and almost all is vegan); it's wonderful to be able to go to a conference and be able to enjoy lunch without worrying that I'll accidentally eat something with meat in it.&lt;br /&gt;&lt;br /&gt;For me, the highlight of the day was &lt;span style='white-space: nowrap;'&gt;&lt;a href='http://synecdochic.dreamwidth.org/profile'&gt;&lt;img src='http://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://synecdochic.dreamwidth.org/'&gt;&lt;b&gt;synecdochic&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;'s talk "Kicking Impostor Syndrome in the Head", which was as awesome as you'd expect. The best part was at the end where people in the audience named things our impostor syndrome had said to us at some point and everybody who'd also experienced the same thing raised their hand. Also great was Kronda Adair's talk "Expanding Your Empathy", about the basics of challenging oppression in conversations that happen in the tech world.&lt;br /&gt;&lt;br /&gt;Tomorrow I'm looking forward to &lt;span style='white-space: nowrap;'&gt;&lt;a href='http://skud.dreamwidth.org/profile'&gt;&lt;img src='http://www.dreamwidth.org/img/silk/identity/user.png' alt='[personal profile] ' width='17' height='17' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://skud.dreamwidth.org/'&gt;&lt;b&gt;skud&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;'s keynote speech as well as the panel on diversity in open source. And, uh, I'm giving a talk, starting in less than 12 hours. I'll put the slides online soon after and there will be a recording on the conference web site eventually.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1808585" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1808341</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1808341.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1808341"/>
    <title>TMI: Practice Talk 2: Electric Boogaloo</title>
    <published>2013-06-18T06:03:03Z</published>
    <updated>2013-06-18T06:03:03Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">I arrived in Portland yesterday and spent today working on my talk slides, then giving a practice talk at the &lt;a href="http://newrelic.com/"&gt;New Relic&lt;/a&gt; office in downtown Portland. I don't think I'd ever been in that tall a building in Portland before (28th floor), and the audience exceeded my expectations both in size and attentiveness and quality of questions! Thanks to &lt;a href="https://twitter.com/tglee"&gt;Tom Lee&lt;/a&gt; for, somehow, bringing in many interested people. I'm just hoping when I do a final run through the slides tomorrow I'll remember some of the questions and take them into account into adjusting the slides.&lt;br /&gt;&lt;br /&gt;I had to skip over quite a few slides at the end to stay within the time limit, and while I probably won't get quite as many questions during the conference as I did during the practice talk, I suspect part of my time tomorrow is going to be spent tightening up the earlier part of the talk; I don't want to run out of time and have to skip pointers altogether!&lt;br /&gt;&lt;br /&gt;Tomorrow, some combination of attending &lt;a href="http://opensourcebridge.org/"&gt;Open Source Bridge&lt;/a&gt; talks and finishing my talk (as is the day-before-talk conference tradition in general, I think), probably while taking advantage of the hacker lounge there.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1808341" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1807950</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1807950.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1807950"/>
    <title>TMI: Finishing a pull request... I remember what that was like</title>
    <published>2013-06-15T05:53:58Z</published>
    <updated>2013-06-15T05:53:58Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Accomplishment of tonight: &lt;a href="https://github.com/mozilla/rust/pull/7148"&gt;pull request with new rustpkg tests&lt;/a&gt;. I have no idea how this took so long, but apparently automating things and manipulating directories and files is hard? I guess. I am &lt;i&gt;so&lt;/i&gt; behind schedule.&lt;br /&gt;&lt;br /&gt;With that finished (sort of; despite how long that took, there are &lt;i&gt;still&lt;/i&gt; &lt;a href="https://github.com/mozilla/rust/issues/5683"&gt;tons of test things to do&lt;/a&gt;), that gives me all of Saturday and Monday to finish my talk slides. I'm not terrified or anything, really.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1807950" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1807823</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1807823.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1807823"/>
    <title>Am I a hacker?</title>
    <published>2013-06-13T21:39:08Z</published>
    <updated>2013-06-13T21:39:08Z</updated>
    <category term="geek"/>
    <category term="feminism"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">My &lt;a href="http://geekfeminism.org/2013/06/13/reflections-on-gabriella-colemans-_coding-freedom_-part-1/"&gt;latest post&lt;/a&gt; on &lt;a href="http://geekfeminism.org/"&gt;the Geek Feminism blog&lt;/a&gt; is up! Excerpt:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;When Coleman says hackers support “a liberal politics of free speech” (p. 15), I was hoping for more analysis of just whose free speech hackers support, but I didn’t find one. In fact, in my experience, the kind of free speech hackers support is quite narrow. Racist, sexist, homophobic, transphobic, and ableist speech must be protected; any criticism of such speech must be suppressed in order to &lt;i&gt;protect the free speech of those who would make remarks that marginalize and exclude&lt;/i&gt; (I guess you have to kill free speech in order to save it). Later on the same page, she writes “From an ethnographic vantage point, it is important to recognize many hackers are citizens of liberal democracies, and have drawn on the types of accessible liberal tropes–notably free speech–as a means to conceptualize their technical practice and secure novel political claims” — which I thought was closer to the truth. Consistently with the selective nature of the application of the “free speech” trope, hackers don’t believe in free speech for its own sake; they use it because it’s a powerful tool for getting support.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1807823" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1807155</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1807155.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1807155"/>
    <title>TMI: 12 tests down, 11 to go</title>
    <published>2013-06-12T00:05:00Z</published>
    <updated>2013-06-12T00:05:11Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">I spent all day getting this rustpkg test to work:&lt;pre&gt;fn do_rebuild_dep_dates_change() {
    let workspace = create_local_package_with_dep("foo", "bar", &amp;NoVersion);
    command_line_test("rustpkg", [~"build", ~"foo"], &amp;workspace);
    let bar_date = datestamp(&amp;lib_output_file_name(&amp;workspace, "build", "bar"));
    touch_source_file(&amp;workspace, "bar");
    command_line_test("rustpkg", [~"build", ~"foo"], &amp;workspace);
    let new_bar_date = datestamp(&amp;lib_output_file_name(&amp;workspace, "build", "bar"));
    assert!(new_bar_date &amp;gt; bar_date);
}&lt;/pre&gt;&lt;br /&gt;(&lt;tt&gt;create_local_package_with_dep&lt;/tt&gt;, &lt;tt&gt;command_line_test&lt;/tt&gt;, &lt;tt&gt;datestamp&lt;/tt&gt;, are &lt;tt&gt;touch_source_file&lt;/tt&gt; are all functions I had to write as part of the source file.)&lt;br /&gt;&lt;br /&gt;It works now! Trivially, because rustpkg always rebuilds everything -- it doesn't do the thing that's the point of &lt;tt&gt;make&lt;/tt&gt; yet, of rebuilding files only when their dependencies change. So if everything else works right, the timestamps will always change. Getting everything else to work right was what took all day. The details are too boring for even me to write about; lots of wrangling with file paths.&lt;br /&gt;&lt;br /&gt;I also worked a tiny bit more on my OS Bridge slides, but I need to put some serious time into that before Practice Talk 2: Electric Boogaloo on Monday.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1807155" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1806885</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1806885.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1806885"/>
    <title>On Giving Up</title>
    <published>2013-06-10T01:17:57Z</published>
    <updated>2013-06-11T06:22:43Z</updated>
    <category term="health"/>
    <category term="health care"/>
    <category term="health insurance sucks"/>
    <category term="surgery"/>
    <category term="trans"/>
    <dw:security>public</dw:security>
    <dw:reply-count>10</dw:reply-count>
    <content type="html">Close readers of this journal know that after I had genital reconstruction surgery in February 2012, I experienced complications that required an emergency room visit. Everything was fine in the end with regard to my health and body, but with regard to my finances, not so much.&lt;br /&gt;&lt;br /&gt;As far as background, from January-March 2012, I was employed by Mozilla as a seasonal employee (nope, I didn't know software engineers could be seasonal employees either) which meant I wasn't eligible for any benefits, including health insurance. To be a responsible adult, I purchased an individual health insurance plan from &lt;a href="http://www.hccmis.com/"&gt;HCC&lt;/a&gt;, which I found through ehealthinsurance.com. HCC was one of the few individual short-term plans that offered instant approval, which means not asking the detailed health questions that most short-term insurance companies asked. I know from experience that I would be denied insurance by any company that asks detailed health questions, so I had to go with one that offered instant approval. I was hired by Mozilla at the end of that period as a full-time employee with benefits, so I have group health insurance now, but of course it doesn't apply retroactively.&lt;br /&gt;&lt;br /&gt;While I was interning at Mozilla but before I decided to (/was forced to) leave grad school, I made plans to have surgery in Feb. 2012. Of course, I didn't think that any individual health insurance plan that I would have would cover the costs, so I intended to pay for the surgery via credit cards, and that's what I did. And if not for what happened after my first surgery, I'd have paid off those credit cards by now.&lt;br /&gt;&lt;br /&gt;Infections can happen with any surgery, and I got to be one of the unlucky ones; after returning from Arizona to Oakland, about ten days after having surgery, I got a high fever and other flu-like symptoms. I wrote it off as probably a cold or flu at first, but it didn't get better as quickly as flu would have, and a few days later I made an appointment with my primary care doctor for advice. Just before I left for the doctor's appointment, I felt something wet and noticed that one of my incisions had burst open and was bleeding. I shoved some gauze in my pants and headed to the doctor; she advised me to go to the ER, since I needed a plastic surgeon and that would be the only way to get in to see one on short notice. I ended up staying at UCSF for that night and the next night, and had emergency surgery to stop the bleeding, which was due to a buildup of fluid from the infection. Again, after that, I got better and everything was fine... except for the bills.&lt;br /&gt;&lt;br /&gt;When I went to the ER, I provided my health insurance information, knowing my insurance probably wouldn't pay, but I figured it couldn't hurt. And in fact, I was reluctant to go to the ER in the first place, even after the uncontrollable bleeding started. Think about that for a minute. How fucked up is it that I thought about treating unstoppable bleeding at home just because going to the hospital would accrue bills I wouldn't be able to pay?&lt;br /&gt;&lt;br /&gt;Well, a few months later the unsurprising thing happened and I got a letter from HCC denying all my claims -- for a total of around $35,000 of costs that were my responsibility (between the hospital bills, anesthesiologist bills, and physician bills). They cited a clause in their policy that states that "Treatment required as a result of complications or consequences of a treatment or condition not covered under this certificate" is excluded under the policy. Moreover, there's another clause, that, similar to many other insurers' trans exclusion clauses, states that "Modifications of the physical body in order to improve the psychological, mental or emotional well-being of the Covered Person, such as sex-change surgery" are excluded. (As an exercise for the reader, you can think of all the things that are wrong or misleading about this sentence.)&lt;br /&gt;&lt;br /&gt;In my opinion, HCC's denial of coverage was based on a correct application of the &lt;i&gt;policy&lt;/i&gt;, but I believed that the policy itself was discriminatory. It singles out people in a protected class (trans people, as per California's &lt;a href="http://www.dfeh.ca.gov/Publications_Unruh.htm"&gt;Unruh Civil Rights Act&lt;/a&gt;) for poor treatment, as evinced by the use of the non-clinical term "sex-change surgery" to refer to genital reconstruction surgery and other procedures. The medical community agrees that for trans people who require surgery and/or hormones, those transition-related procedures are medically necessary -- not just desirable to improve "psychological, mental, or emotional well-being" (though, like almost any surgery, transition-related surgeries could certainly do that as a side effect -- not being in pain is more fun than being in pain, as a general rule). There is no controversy about that. So the only reason to single out trans people for denial of health care is to take advantage of public animus towards trans people; I'm not saying that executives at HCC necessarily hate trans people, but they know we're politically unpopular and that there will be no broad outcry against denying us care. A health insurance company's job is to stop people from getting health care, so the more unpopular groups they can identify and deny care to, the better they're doing their job.&lt;br /&gt;&lt;br /&gt;I wrote a 4-page appeal letter elaborating on this point (and on other issues) and sent it to HCC in September of last year. After about a dozen phone calls and a few more letters sent to HCC, spread out over a few months (every time I called, I was told that the call center employee "didn't have permission to view [my] file"), I filed a complaint with the California Department of Insurance. Miraculously, within a week, I received a UPS next-day-air letter from HCC affirming the denial of my claim. The majority of the letter doesn't deserve the dignity of a response, but the key point is at the end: because HCC is licensed in Missouri, the letter states, they are not subject to California civil rights law -- even though they took advantage of the benefits of doing business in California by selling policies to me and other California residents.&lt;br /&gt;&lt;br /&gt;I couldn't believe that this could be true, and I called back the person I'd interacted with at the Department of Insurance. She affirmed that this was true -- saying that in almost all cases, any health insurance company that is regulated in California and allowed to sell policies in California would be subject to California civil rights law, HCC fell into an exception for "health and life insurance companies". Because HCC sells both health and life insurance policies, they are allowed to sell insurance in California but don't have to comply with California law. Rather, they're subject to the laws of Missouri, which has no civil rights protection for trans people.&lt;br /&gt;&lt;br /&gt;Something still didn't sit right with me about this answer, so I thought about finding a lawyer to get advice. But, I had already tried to do that:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;I talked to a friend who works at the National Center for Lesbian Rights, and he talked to a colleague of his who works at the Transgender Law Center. It appeared that the policy of both groups is not to sue health insurance companies for anti-trans discrimination, because challenging trans exclusion under civil rights law is something that has never been successful.&lt;br /&gt;&lt;li&gt;I talked to somebody at the Transgender Legal Defense and Education Fund, and while he spoke with me at length, in the end he said that they weren't willing to take the case because they don't handle cases where a company has an explicit trans exclusion clause; they would only challenge it if an insurer was denying coverage for transition-related care but &lt;i&gt;didn't&lt;/i&gt; have a trans exclusion clause in their policy.&lt;br /&gt;&lt;li&gt;I spoke directly with an advocate at the Transgender Law Center and sent him a copy of my appeal letter before sending it to HCC, but never received a follow-up response.&lt;br /&gt;&lt;li&gt;I called the offices of &lt;a href="http://www.cbdlaw.com/"&gt;Christopher Dolan&lt;/a&gt;, a lawyer who has done some LGBT civil rights cases, but after receiving an intake interview from a staff member, was told that they would not take my case.&lt;br /&gt;&lt;li&gt;Another friend of mine who's a lawyer recommended a lawyer known as the best client-side health insurance lawyer in California, and I called his office, but he never returned my call.&lt;br /&gt;&lt;li&gt;I called the San Francisco Bar Association referral service; they took my information over the phone, then called back a few days later and told me they weren't going to refer me to anybody.&lt;br /&gt;&lt;li&gt;I called my work's employee assistance program; they referred me to a lawyer who talked to me for 15 or 20 minutes, told me the case was really interesting and that if he had to file a brief on a related topic he would call me for advice (not what I want to hear from a lawyer, honestly), and to call him back once I received a response to my appeal. A few months later when I got the denial, I did call his office back, and they never returned my call.&lt;br /&gt;&lt;li&gt;I called the office of &lt;a href="http://www.honglawfirm.com/"&gt;Kari Hong&lt;/a&gt;, who wrote the excellent paper &lt;a href="http://www.trans-health.com/2002/legal-responses-health-care-discrimination-against-transsexuals/"&gt;"Categorical Exclusions"&lt;/a&gt;, but she never returned my call (and seems to have moved on to other areas of law anyway).&lt;br /&gt;&lt;li&gt;I posted a query on &lt;a href="http://www.legalmatch.com/"&gt;LegalMatch&lt;/a&gt;, and got some views but no replies.&lt;br /&gt;&lt;li&gt;I called &lt;a href="http://www.balif.org/"&gt;BALIF&lt;/a&gt;, the LGBT law association, to ask if they did referrals, and they never called me back.&lt;br /&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;I think that's everything. The only thing left to do that I can see is to go through BALIF's member directory, which they do have on their web site, and just start calling every lawyer on it. I intended to do this for a while, but I kept putting it off because I just couldn't face the thought of being told by cis people things like "why do you want health insurance to cover your cosmetic surgery?" and of wasting a lot of time on something not likely to produce results. So at this point, I'm admitting defeat. I have about $11,000 left to pay off to UCSF that I'm paying at an installment rate of $1000 a month; between that, student loans, paying off my credit card debt that's mostly from the original surgery and the revisions that I needed (though that's almost all paid off now), and the high cost of rent in the Bay Area, it'll still be at least a year before I get to see much of my paycheck. It'll be more than a year before I get to start saving for retirement. When all this is over, I'll have spent my first three years out of grad school -- after already getting a late start and leaving without a degree -- completely unable to save any money, almost entirely because of medical costs that would have been covered by insurance if I wasn't part of a socially stigmatized group. I could have saved that money for retirement, put it towards a down payment for a house, saved it towards being able to have a family one day, any number of things... but other people got to take it from me simply because I'm trans.&lt;br /&gt;&lt;br /&gt;My understanding is that trans civil rights groups (and there are very few civil rights groups to begin with that defend trans people's rights) prefer not to pursue cases like mine because they think it's a better strategy to work with employers to lift clauses in their policies, on a company-by-company basis. I see this as a trickle-down approach to social justice, and like most trickle-down approaches, it benefits those people who are already the most privileged. The solution proposed is for everyone to just get a job at Google so they can have trans-inclusive insurance... but what if you're in a class of people who can't just get a job at Google? Oh, well. I'm personally in that category of the lucky few who have job options that come with trans-inclusive group health insurance, but my company still has trans-exclusive insurance (and, of course, due to the specifics of how I was hired, I wasn't even covered by their insurance when my emergency happened). And I like working at my company, and don't want to take a different job &lt;i&gt;just&lt;/i&gt; for the health insurance.&lt;br /&gt;&lt;br /&gt;Before all this happened, I thought that all it would take to challenge trans exclusion clauses would be for someone to be willing to be a test case, so long as they lived in a state that had trans civil rights protections. Well, now I see that I was wrong. I would have been happy to be a test case, since I don't particularly care about getting negative publicity (being a trans man, I would be unlikely to face the same kinds of negative consquences as a trans woman who outed herself publicly as being trans), but that didn't matter, since no one was interested in representing me.&lt;br /&gt;&lt;br /&gt;And, of course, it's possible that even the world's best lawyer &lt;i&gt;couldn't&lt;/i&gt; have won my case because of the health-and-life-insurance company loophole. I don't know enough about insurance law to know. That's why I wanted to hire an insurance lawyer. The individual health care policy industry seems to be a particularly unethical and exploitive corner of a morally bankrupt industry. And this is a good time for me to acknowledge that the basic issue here is the US's for-profit health care system, something found almost no where else in the developed world. If our failure to take care of each other -- even people different from ourselves -- hadn't created an industry whose purpose is to take people's money in order to stop them from getting health care, there would be no incentive for insurance companies to deny care to people in marginalized groups. That said, I think it's possible for different groups of activists to address different problems; we have to fight for a better system at the same time as we work to make the current system less blatantly unfair.&lt;br /&gt;&lt;br /&gt;I feel like what I've achieved in my life so far is pretty close to the maximum for what trans people are allowed to accomplish. My lifelong depression has always stopped just short of being suicidal; I have a graduate degree, have never been homeless, and have a stable professional job and a high income. I'm pretty close to the trans ceiling, then -- and a whole lot of that is because I'm a trans person who was coercively assigned female at birth and who presents in a way that people recognize as falling within what men are allowed to do most of the time. I don't want to downplay any of my privilege here. Still, if the best that any trans person can hope to accomplish involves being in major long-term debt, there's a problem, because in that case why &lt;i&gt;should&lt;/i&gt; anybody try hard when they're designated as subordinate from the start? Looking at &lt;a href="http://money.cnn.com/gallery/pf/2013/02/21/transgender-debt/index.html"&gt;the CNN.com story&lt;/a&gt; that featured me along with five trans women, a few months ago, is one way to find further context.&lt;br /&gt;&lt;br /&gt;I'm okay with giving up this fight, but I'm not okay with not leaving a public record of what happened, so for posterity, &lt;a href="http://catamorphism.org/HCC/hcc_appeal_2013-08-19.pdf"&gt;here's my appeal letter&lt;/a&gt; in PDF form and &lt;a href="http://catamorphism.org/HCC/hcc_denial_2013-02-22.pdf"&gt;here's the response from HCC denying my claim&lt;/a&gt;, also in PDF. For context, you also might want to read all of my previous surgery posts (but, warning: all of them contain explicit body and/or sexuality details about me): &lt;a href="http://tim.dreamwidth.org/1734100.html"&gt;first&lt;/a&gt;, &lt;a href="http://tim.dreamwidth.org/1754827.html"&gt;second&lt;/a&gt;, and &lt;a href="http://tim.dreamwidth.org/1777275.html"&gt;third&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you're wondering what you can do:&lt;ul&gt;&lt;li&gt;When you get an unsolicited email from a recruiter, ask them if their company has trans-inclusive health insurance, and then &lt;a href="http://microactivism.wikia.com/"&gt;post the results here&lt;/a&gt;.&lt;br /&gt;&lt;li&gt;Find out whether your employer has trans-inclusive health insurance. If not, find out why not and pressure them to change. It's especially important than people who are &lt;i&gt;not&lt;/i&gt; trans do this, both because they can do so with less personal risk and because their requests will be taken more seriously.&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.tgijp.org/"&gt;Donate to the TGI Justice Project&lt;/a&gt;, which doesn't focus on health insurance but does advocate for the most vulnerable trans people.&lt;br /&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt; (I'll add more ideas if I think of them.)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1806885" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1806550</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1806550.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1806550"/>
    <title>TMI: One practice talk down, one to go...</title>
    <published>2013-06-08T02:45:16Z</published>
    <updated>2013-06-08T02:45:16Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Today:&lt;br /&gt;&lt;br /&gt;Worked on my talk some more. Got through all the slides except for some extra ones at the end that I suspected I wasn't going to use anyway.&lt;br /&gt;&lt;br /&gt;Gave a practice talk, via videoconference, for my team. Felt about 100 times better about the talk after that. Among other things, the amount of time I'd estimated it would take was correct down to the minute. (So I probably don't need those extra slides.) Got lots of helpful feedback, esp. from Graydon and Brian.&lt;br /&gt;&lt;br /&gt;Cleaned up my bit-rotted pull requests, all of which are now currently in the bors queue (crosses fingers).&lt;br /&gt;&lt;br /&gt;Over the weekend I'll hopefully wrap up the Great Rustpkg Test Overhaul and implement RUST_PATH. And work on the talk more, since I have one more practice talk to go in a week-and-change.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1806550" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1806141</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1806141.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1806141"/>
    <title>TMI: More talk preparations</title>
    <published>2013-06-07T05:02:30Z</published>
    <updated>2013-06-07T05:02:30Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Almost done with a &lt;i&gt;very&lt;/i&gt; rough draft of my slides for my Open Source Bridge talk! Visually, they're crap, and reminding me why I'm not a graphic designer even though I pretend sometimes to have opinions about visual presentation. But they're good enough for me to give my practice talk to my team tomorrow; hopefully I'll have enough time to clean them up that the form won't distract everyone from the content.&lt;br /&gt;&lt;br /&gt;The main thing I'm frustrated about is my own inability to find Good Examples. I could, of course, write examples that illustrate what I want to teach; mainly, I want to show how Rust's trait system works and how borrowed, managed, and owned pointers work. I think traits and the memory model are two of the biggest advantages of Rust, and rather than trying to cover everything about the language in an hour and a half (impossible), I want to focus on two features that are likely to be at least somewhat different from languages the audience members will have used. That's all very well, but I've had a hard time finding particularly good examples in existing code -- I found some small examples, but the slides I worked on today were ones I'd planned to use to present two "extended examples" that would each take several slides to cover. Traits are used less in existing code than I would have thought (being a relatively new feature) and are often just used as containers for methods rather than abstractions that have meaning that could be explained independently of code. Borrowed pointers are used everywhere, but most uses of them are actually pretty simple.&lt;br /&gt;&lt;br /&gt;So that I would have something there, I used code from the Container and Map traits and the HashMap module in the standard library, but that feels unsatisfying since hash maps are such a textbook example. I really want to show what makes Rust different! So, I posted a query on the mailing list, and already got two good suggestions -- one from Jeaye pointing me to &lt;a href="https://github.com/bjz/glfw-rs"&gt;glfw-rs&lt;/a&gt; and one from Daniel Micay suggesting using iterators rather than hash maps if I'm going to use an example from the standard library. I think that's an especially good suggestion; iterators almost qualify as a third central-aspect-of-Rust aside from traits and borrowed pointers.&lt;br /&gt;&lt;br /&gt;I give talks infrequently enough that I forget how much work preparing one is. rustpkg is getting sadly neglected, at least over the past two days. I envision weekend work on the horizon, and a lot of it.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1806141" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1805628</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1805628.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1805628"/>
    <title>Step 1: Work oneself to physical and psychological exhaustion. Step 2: ??? Step 3: Profit!</title>
    <published>2013-06-05T04:13:26Z</published>
    <updated>2013-06-05T04:15:01Z</updated>
    <category term="labor"/>
    <category term="work"/>
    <category term="politics"/>
    <dw:security>public</dw:security>
    <dw:reply-count>12</dw:reply-count>
    <content type="html">I read a tweet from Neil deGrasse Tyson that someone retweeted in which he says: "Advice to Students: When choosing a career, consider jobs where the idea of a vacation from it repulses you."&lt;br /&gt;&lt;br /&gt;I like snorkeling. My job doesn't involve snorkeling. Does that mean I should quit my job and find one that requires snorkeling? I don't think so, because there aren't too many jobs that involve both snorkeling and computer programming, and I like programming too. Maybe there's some marine biology job somewhere that would require me to do both. Well, what about riding my bike? I still wouldn't be able to do that as part of my job. I like many things, and am unlikely to find a job that involves all of them. On the extremely rare occasion that I'm allowed to take a vacation that doesn't involve having surgery, I do things that I like to do that I can't do at work.&lt;br /&gt;&lt;br /&gt;I'm poly, which means that when I have relationships, I prefer them to be based on informed consent rather than rigid rules that originate in cis men's need to control everybody else's bodies. That's not necessarily right for everyone, I'm just talking about me. One of the great things about being poly is that I don't have to find a single person who can fulfill all of my needs. I don't &lt;i&gt;expect&lt;/i&gt; to be able to do that. So why would I expect one job to fulfill all of my needs?&lt;br /&gt;&lt;br /&gt;A worker who doesn't want to take a vacation is a manager's dream come true (and in the Bay Area, it's said that companies like Netflix that have unlimited paid time off actually exert intense informal pressure on workers not to use any of it). Such a worker can potentially make management very happy. I've never heard of a CEO who never took vacations. The people I know who measure their job satisfaction by the number of hours they work are usually software engineers -- people who labor so that other people, generally &lt;i&gt;not&lt;/i&gt; working 90-hour weeks, may profit. (It's true that in a startup, people may work long hours in the hope of profiting themselves, but this certainly isn't the norm.)&lt;br /&gt;&lt;br /&gt;The US provides workers with the least amount of vacation time in the world. For middle-class Western Europeans, a job with three weeks of paid vacation time -- considered generous in the US -- would be shocking. Does that mean that Europeans who are scientists, engineers, teachers, and doctors love their work less than American scientists, engineers, teachers, and doctors love theirs?&lt;br /&gt;&lt;br /&gt;Neil deGrasse Tyson might love his job enough to never take a vacation, but I don't love my job less than he loves his just because I sometimes want to do things that aren't in my job description. Different people are different; liking &lt;i&gt;more&lt;/i&gt; things doesn't make a person less virtuous than somebody who likes one thing to the exclusion of all others. Just as we create unrealistic expectations by enforcing lifelong monogamy to the exclusion of all other ways to structure relationships, and teaching young people that they can undoubtedly expect to find just one person who can give them everything they need, we also create unrealistic expectations by teaching the young that they can expect to find one job that they love so much they never want to do anything else.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1805628" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1805320</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1805320.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1805320"/>
    <title>TMI: Talk preparations</title>
    <published>2013-06-05T00:54:57Z</published>
    <updated>2013-06-05T00:54:57Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Today I worked a bit more on &lt;a href="https://github.com/mozilla/rust/issues/5683"&gt;issue 5683&lt;/a&gt; (which, for now, just means turning more of the rustpkg test cases into executable &lt;tt&gt;#[test]&lt;/tt&gt; tests and not just English descriptions in a text file. We'll do something fancier later.&lt;br /&gt;&lt;br /&gt;I attempted to figure out why &lt;a href="https://github.com/mozilla/rust/pull/6904"&gt;my pull request for rustpkg versions&lt;/a&gt; failed tests on the Linux bot, but got nowhere, since the test that failed passes on my Mac, and rather than trying to remember how to ssh into one of our Linux machines, I decided to work on my talk instead.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensourcebridge.org/proposals/970"&gt;My talk&lt;/a&gt; is in a little over two weeks. I got through about half the slides today, and will probably try to blow through the other half tomorrow. I mean just getting them into a rough form without any "fill this in" -- I expect to spend a lot of my time between now and June 19 working on the slides. I'm trying to turn off my inner critic and just write stuff down for now -- it's much easier to edit something that's rough than to turn nothing into something, which is what I'm doing now -- but it's hard, as usual. Also hard is striking the right balance between accessibility and realism with code examples. So far, I've found tiny examples to use from &lt;a href="https://github.com/mozilla/servo"&gt;Servo&lt;/a&gt;, &lt;a href="https://github.com/pcwalton/sprocketnes"&gt;sprocketnes&lt;/a&gt;, and the Rust standard libraries. It's hard to find a non-trivial example that doesn't require explaining too many new concepts at once, though. So the ones I've pulled are very simple. Given that, I'm wondering how much it adds to be using real examples; I wonder if I should stick to using examples from Rust standard libraries or just make up my own examples. I originally thought the talk would be more interesting if I used examples from real Rust applications, but I just don't know if the details of those applications (not so interesting until you spend time immersed in them) justify the benefits of verisimilitude.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1805320" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1804374</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1804374.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1804374"/>
    <title>TMI: A bit more progress</title>
    <published>2013-05-30T00:08:04Z</published>
    <updated>2013-05-30T00:08:04Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Today felt a lot more productive than the last couple days have, even though I got in late and will have to make it up over the weekend since I have a farewell-to-Vancouver dinner planned with some folks. (Last day here is tomorrow!)&lt;br /&gt;&lt;br /&gt;I submitted &lt;a href="https://github.com/mozilla/rust/pull/6807"&gt;a pull request&lt;/a&gt; for extern mod inference. It's one of those things that seems simple but turns out to involve a lot of moving parts.&lt;br /&gt;&lt;br /&gt;I started working on &lt;a href="https://github.com/mozilla/rust/issues/5684"&gt;extracting the version from a source control repository&lt;/a&gt;, which looks significantly easier. The main thing has been figuring out git's arcane &lt;tt&gt;--git-dir&lt;/tt&gt; and &lt;tt&gt;--work-tree&lt;/tt&gt; flags in order to execute a &lt;tt&gt;git tag&lt;/tt&gt; without cd'ing into the git directory (easier to automate, since no calls to &lt;tt&gt;os::change_dir&lt;/tt&gt; and therefore explicit locks are necessary).&lt;br /&gt;&lt;br /&gt;As per my discussion with Graydon earlier, I started &lt;a href="https://github.com/mozilla/rust/issues/5683"&gt;consolidating the tests&lt;/a&gt; in lieu of writing a proper test runner right now. I had some English descriptions of tests that I'm trying to turn into &lt;tt&gt;#[test]&lt;/tt&gt; unit tests that shell out and call rustpkg as a separate process. I've written them all up as pseudocode and now it's just down to implementing the helper functions I need. Of course, most of them will be marked as &lt;tt&gt;ignore&lt;/tt&gt; for now since they depend on not-yet-implemented features.&lt;br /&gt;&lt;br /&gt;So, by tomorrow, if things go well, I could still be &lt;a href="https://github.com/mozilla/rust/wiki/Bikeshed-rustpkg"&gt;up to May 20&lt;/a&gt;... these things always take longer.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1804374" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1803814</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1803814.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1803814"/>
    <title>TMI: extern mod inference</title>
    <published>2013-05-29T00:22:54Z</published>
    <updated>2013-05-29T01:15:26Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">I don't know how long I've been saying that extern-mod inference was almost working, but now... it's working. What took so long? Just being consistent about paths and naming conventions and such, plus a bug I found today that had to do with the aforementioned copying-the-session hack. Turns out that was a bad idea, because when you build a new session, it makes a copy of the &lt;tt&gt;filesearch&lt;/tt&gt; object and copies the entire additional-library-search-paths vector... exactly the thing I was mutating in the meantime with a mutable reference. So that was no good. I found a way to do it without copying, but I had to change the driver; I've been trying to avoid changing code in rustc itself just to make rustpkg work, but this seemed pretty reasonable. I just made the additional-library-paths vector an &lt;tt&gt;@mut ~[Path]&lt;/tt&gt; instead of a &lt;tt&gt;~[Path]&lt;/tt&gt;. This seemed fine, since there's plenty of mutable data in sessions already. Since you need a session to call parsing/macro expansion, and finding extern mods has to be done after macro expansion, it's pretty unavoidable that someone will have to modify the library search paths after creating the session.&lt;br /&gt;&lt;br /&gt;Just running a final round of &lt;tt&gt;make check&lt;/tt&gt; and I can finally submit a pull request on this. Next, the last bit of extern-mod-related work, which is actually changing the syntax of &lt;tt&gt;extern mod&lt;/tt&gt; so you can put in a full URL and not just an identifier. That's mostly parser work, which shouldn't be hard (famous last words).&lt;br /&gt;&lt;br /&gt;I also started filling in the code examples in my Open Source Bridge slides. So far I'm worried that it's too basic, but I guess you can never be too basic.&lt;br /&gt;&lt;br /&gt;Thinking ahead a bit:&lt;ul&gt;&lt;li&gt;I didn't know, but the compiler already parses &lt;tt&gt;extern mod foo ( id = "a/b/c" );&lt;/tt&gt;, so for now, I'll just have rustpkg look for a special attribute there, and save &lt;a href="https://github.com/mozilla/rust/issues/6407"&gt;#6407&lt;/a&gt; for later.&lt;br /&gt;&lt;li&gt;Graydon and I agreed to do the most obvious thing for &lt;a href="https://github.com/mozilla/rust/issues/5683"&gt;the test runner&lt;/a&gt; and have &lt;tt&gt;#[test]&lt;/tt&gt; unit tests that shell out to call rustpkg, and check the output. I already have some unit tests, so it's just a matter of converting the remaining ones.&lt;br /&gt;&lt;li&gt;Getting the version (&lt;a href="https://github.com/mozilla/rust/issues/5684"&gt;#5684&lt;/a&gt;) shouldn't be hard.&lt;br /&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And... that'll bring me up &lt;a href="https://github.com/mozilla/rust/wiki/Bikeshed-rustpkg"&gt;to May 20&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1803814" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1803666</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1803666.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1803666"/>
    <title>TMI: A little less stuck on rustpkg</title>
    <published>2013-05-28T01:15:54Z</published>
    <updated>2013-05-28T01:16:09Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Today:&lt;ul&gt;&lt;li&gt;Did my Monday randomly-assigned-bug triage.&lt;br /&gt;&lt;li&gt;Tried again to get some test-case pull requests to pass.&lt;br /&gt;&lt;li&gt;Learned about build automation from Graydon.&lt;br /&gt;&lt;li&gt;&lt;i&gt;Almost&lt;/i&gt; finished up extern-mod inference for rustpkg. I really wish I could say that I finished it and not that I almost finished it, but I got all my automated tests to pass (something I've been trying to do for days)... and then found that my one manual test didn't work, because I'd changed the expected directory format again without really thinking about it. I look forward to having &lt;i&gt;only&lt;/i&gt; automated tests, but the test runner is a separate issue. Though, the more I think about it, the less I'm sure I need to write a special test runner for rustpkg -- maybe it would be enough just to have unit tests that use &lt;tt&gt;os::set_args&lt;/tt&gt; and then call into rustpkg's &lt;tt&gt;main&lt;/tt&gt;.&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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1803666" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1803424</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1803424.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1803424"/>
    <title>Buildings and Bridges</title>
    <published>2013-05-24T07:08:12Z</published>
    <updated>2013-05-24T07:08:41Z</updated>
    <category term="work"/>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">I stayed at the office until about 11 PM trying to &lt;tt&gt;git bisect&lt;/tt&gt; this performance regression (that it's possible that only I am experiencing; perhaps the space-time continuum around me and my MacBook is just flawed; 20 seconds for parsing libcore instead of 8 seconds seems like a big deal, though, and that applies to other phases as well), got results that didn't make sense, started over, and left without finishing (each bisecting step takes 5 to 15 minutes, depending whether it's rebuilding LLVM). If I were cleverer, I'd have figured out how to write a script to automate it. &lt;br /&gt;&lt;br /&gt;In any case, as I so often do, I left feeling like I was the worst programmer ever *and* hadn't even succeeded in doing anything that was just for me today. I'm way behind schedule on rustpkg, what I'm ostensibly supposed to be working on; I started bisecting performance stuff because that was blocking me on rustpkg, and I started doing other stuff in the background like bug triaging since I needed *something* to do while waiting for compiles, but still, there's something I'm supposed to be doing and I hadn't gotten very far on it.&lt;br /&gt;&lt;br /&gt;But before I left, I read the news that the I-5 bridge over the Skagit River -- over which I would otherwise have been driving tomorrow night (I'm driving down to Seattle so I can catch a plane to San Jos&amp;eacute; so I can look for apartments on Saturday and Sunday, then fly back up to Seattle and drive back to Vancouver on Sunday for my last week) -- collapsed, because a truck driver ran into part of the bridge, &lt;i&gt;which caused the bridge to collapse&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I started thinking about how it would feel to be that truck driver. If I make a mistake at my job, usually I just feel bad about it, or in the worst case, a few people get annoyed with me. This person made a mistake at their job and &lt;i&gt;caused a bridge to collapse&lt;/i&gt;. All by themself! (Probably some of the blame goes to the civil engineers who designed the bridge, but even so, lots of other people managed to drive over the bridge and not make it collapse.)&lt;br /&gt;&lt;br /&gt;When I get frustrated with my work, lately I've been thinking, "well, if all else fails, I could become a truck driver." I like driving and I'm happier when I'm in motion. There are lots of things that appeal to me about it, actually.&lt;br /&gt;&lt;br /&gt;But the fact remains that as a programmer, no matter what I do, I know I'm not going to make a mistake that will immediately destroy a bridge.&lt;br /&gt;&lt;br /&gt;So I think I'll keep my day job for now.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1803424" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1803170</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1803170.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1803170"/>
    <title>TMI: Everything is broken</title>
    <published>2013-05-24T02:29:51Z</published>
    <updated>2013-05-24T02:29:51Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Today featured: the mystery of the overlapping node IDs -- which was causing &lt;a href="http://tim.dreamwidth.org/1802556.html"&gt;yesterday's unsolved problem&lt;/a&gt;. Due to my get-around-the-borrow-checker hack, I was copying the session in a way that didn't actually copy all the state. So I was resetting the unique-ID counter to zero after doing the initial parsing, expansion, and injection of various primitives. This caused the obvious problems. Once I fixed that, I ran into the driver... not generating output when I called it from rustpkg on a library. That's bad. Haven't figured out why yet.&lt;br /&gt;&lt;br /&gt;Unrelatedly, I've been trying to bisect a performance regression that I noticed in the compiler, though I'm not sure anyone else is seeing it (others have commented on a memory regression, but I'm noticing a time regression too). The first round of bisecting pointed to the commit from 5 days ago that updated the snapshot. So that suggests a performance problem that had been in stage2 and then snuck into stage1 when the snapshot got updated. So now I'm doing a second round of bisecting to figure out when the stage2 problem showed up, which is much slower.&lt;br /&gt;&lt;br /&gt;And when both of those things are compiling, fixing warnings, which is almost done.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1803170" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1802556</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1802556.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1802556"/>
    <title>TMI: Slowness</title>
    <published>2013-05-23T03:13:35Z</published>
    <updated>2013-05-23T03:13:35Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">A frustrating day. On the plus side, I did solve yesterday'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'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'd expect this to happen if there was a function somewhere called &lt;tt&gt;bool&lt;/tt&gt; (maybe), but there isn'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 'ty_fn_ret() called on non-fn type: &amp;ty_nil', /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'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'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't think we'll get through all of them in the triage meeting tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1802556" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1802475</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1802475.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1802475"/>
    <title>TMI: Adventures in the front-end</title>
    <published>2013-05-22T01:36:38Z</published>
    <updated>2013-05-22T01:37:19Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Still working on &lt;a href="https://github.com/mozilla/rust/issues/5681"&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'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's weird is I haven't changed anything affecting how I interface with rustc. I'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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1802475" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1802151</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1802151.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1802151"/>
    <title>Dept. of Transportation</title>
    <published>2013-05-21T04:07:47Z</published>
    <updated>2013-05-21T04:07:47Z</updated>
    <category term="salinas"/>
    <category term="travel"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">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;"This is like going to the frozen food section while stoned, but paying double for it." -- someone in the cafe car&lt;br /&gt;&lt;br /&gt;announcement: "We're turning inland and the reason for that is to get away from some of these more unstable sand dunes." Actually, I thought the reason we were turning inland is because that's where the tracks are.&lt;br /&gt;&lt;br /&gt;In Salinas, someone put a bunch of tires on the tracks, which "compromised" 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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1802151" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1801754</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1801754.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1801754"/>
    <title>TMI: ionmonkey generator syntax changes aren't dead yet!</title>
    <published>2013-05-20T04:03:40Z</published>
    <updated>2013-05-20T04:03:40Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">This isn't Rust-related, but I wanted to report that I spent much of this evening developing a revised version of &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=666399"&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'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's pretty obvious what I'll pick! But also, it's just hard to work on a compiler for a language that I don't know (JavaScript) that's also implemented in a language I don'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'll enjoy the feeling while it lasts.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1801754" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1801457</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1801457.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1801457"/>
    <title>TMI: external crates: lost and found</title>
    <published>2013-05-17T01:10:09Z</published>
    <updated>2013-05-17T01:10:09Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">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'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'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'll be ready to check that in and close &lt;a href="https://github.com/mozilla/rust/issues/5681"&gt;#5681&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If I can finish &lt;a href="https://github.com/mozilla/rust/issues/6407"&gt;#6407&lt;/a&gt; (allowing &lt;tt&gt;extern mod&lt;/tt&gt; directives to name remote packages) and &lt;a href="https://github.com/mozilla/rust/issues/5683"&gt;#5683&lt;/a&gt; (the test runner for rustpkg, which I've already started a rudimentary version of) tomorrow, then I'll be &lt;a href="https://github.com/mozilla/rust/wiki/Bikeshed-rustpkg"&gt;on-schedule&lt;/a&gt; so far. It might happen.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1801457" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1801014</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1801014.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1801014"/>
    <title>TMI: Finding external crates</title>
    <published>2013-05-16T02:33:04Z</published>
    <updated>2013-05-16T02:33:04Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">The remote-package-ID patch landed, so I'm on to &lt;a href="https://github.com/mozilla/rust/issues/5681"&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'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'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'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's building is in, since it only knows about one workspace (the current directory). But once I &lt;a href="https://github.com/mozilla/rust/issues/5682"&gt;implement RUST_PATH&lt;/a&gt;, that'll be a lot more powerful.&lt;br /&gt;&lt;br /&gt;Even more so, the plan is to &lt;a href="https://github.com/mozilla/rust/issues/6407"&gt;change the syntax of &lt;tt&gt;extern mod&lt;/tt&gt; directives&lt;/a&gt; so they don't have to just name identifiers. So you'll be able to write:&lt;br /&gt;&lt;pre&gt;extern mod foo = "github.com/catamorphism/foo";&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't a valid Rust identifier.&lt;br /&gt;&lt;br /&gt;So far, I'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'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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1801014" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1800820</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1800820.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1800820"/>
    <title>TMI: Almost conquering remote package IDs</title>
    <published>2013-05-15T01:03:04Z</published>
    <updated>2013-05-15T01:03:04Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Back once again from another (shorter) absence -- I had to go down to Olympia to say goodbye to my 11-year-old rabbit, who'd had a stroke and needed to be euthanized. This spring, I'm telling you...&lt;br /&gt;&lt;br /&gt;This morning, &lt;a href="http://www.cs.ubc.ca/~rxg/"&gt;Ron Garcia&lt;/a&gt; came over to the office from UBC to visit us and hear about Rust. It'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="https://github.com/mozilla/rust/pull/6418"&gt;#6418, the URL-like package-ID pull request&lt;/a&gt;. I hit the &lt;a href="https://github.com/mozilla/rust/issues/6319"&gt;"computing fictitious type"&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'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'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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1800820" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1800283</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1800283.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1800283"/>
    <title>TMI: rustpkg can download and build remote packages!</title>
    <published>2013-05-11T01:41:16Z</published>
    <updated>2013-05-11T01:41:16Z</updated>
    <category term="research"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">I finished &lt;a href="http://tim.dreamwidth.org/1799811.html"&gt;yesterday's work&lt;/a&gt;, in the "tests pass" 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="https://github.com/mozilla/rust/issues/5677"&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's post. Specifically, we'll change the syntax of the &lt;tt&gt;extern mod&lt;/tt&gt; directive -- which says "link this external crate with this program" -- 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'll allow:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;extern mod "foo";&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;extern mod "github.com/catamorphism/foo";&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's short name from the package ID's file stem if it'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 = "github.com/catamorphism/foo-bar";&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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1800283" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-05-03:234887:1800123</id>
    <link rel="alternate" type="text/html" href="http://tim.dreamwidth.org/1800123.html"/>
    <link rel="self" type="text/xml" href="http://tim.dreamwidth.org/data/atom/?itemid=1800123"/>
    <title>tim @ 2013-05-09T22:05:00</title>
    <published>2013-05-10T05:07:24Z</published>
    <updated>2013-05-10T05:07:24Z</updated>
    <category term="computer science"/>
    <category term="religion"/>
    <category term="geek culture"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">A comment on a post I can'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="http://www.dreamwidth.org/tools/commentcount?user=tim&amp;ditemid=1800123" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
