<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Maciek</title>
  <link>http://dontdothat.livejournal.com/</link>
  <description>Maciek - LiveJournal.com</description>
  <lastBuildDate>Thu, 02 Apr 2009 03:27:48 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>dontdothat</lj:journal>
  <lj:journalid>2822638</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/41608840/2822638</url>
    <title>Maciek</title>
    <link>http://dontdothat.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/18159.html</guid>
  <pubDate>Thu, 02 Apr 2009 03:27:48 GMT</pubDate>
  <title>If I sharpen this knife enough, I&apos;ll have a great looking handle</title>
  <link>http://dontdothat.livejournal.com/18159.html</link>
  <description>&lt;p&gt;&lt;pre&gt;lambda { |f,*x| 0 while x=f[f,*x] } [ lambda { |f,*x|
puts [&quot;what was it&quot;, &quot;is it a #{x[0]}&quot;,
	&quot;what might I ask to tell a #{x[1]} from a #{x[0]}&quot;, x[2]][x.size]+&quot;?&quot;
( 5&amp;gt;(x&amp;lt;&amp;lt;gets.strip&amp;lt;&amp;lt;x[-1][&quot;n&quot;]).size ?
	(2&amp;lt;x.size &amp;&amp; x.pop &amp;&amp; 3!=x.size ?
		f[f,x[0],f[f]]:
		3==x.size ? x:[x])[1..-1]:
	[f,lambda{|*y| y[1..-1]}].method(x.pop ? &quot;dup&quot;:&quot;reverse&quot;)[
		].enum_with_index.map {|g,i| g[f,*x[i]]}&amp;lt;&amp;lt;x[-2]
).unshift(x[-2]).last 3}]&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I&apos;m a little obsessed with the above code. This is the animal guessing game in Ruby (&quot;think of an animal and I will try to guess what it is. Is it a pet? Is it a dog? No? What is it then? How can I tell a cat from a dog? Play again? Is it a pet? Does it meow? etc..&quot;)&lt;/p&gt;
&lt;p&gt;The version above is adapted from one I posted originally to Facebook a year and a half ago. I&apos;ve thought of a few new tricks with arrays since then, and it&apos;s now some of the most dense code I&apos;ve ever written. I would like to eliminate the two checks to the length of the &lt;code&gt;x&lt;/code&gt; array, but I don&apos;t think that&apos;s possible. I suspect I could come up with something more terse than &lt;code&gt;enum_with_index&lt;/code&gt; as well - it&apos;s been a while since I&apos;ve looked at that part.&lt;/p&gt;
&lt;p&gt;There is no practical application to this at all. Well, ok - I now understand arrays very well indeed, and I especially like the &lt;code&gt;first / last&lt;/code&gt; method pair as it will not fail when you ask for more of an array than there is available.&lt;/p&gt;
&lt;hr width=&quot;30%&quot; /&gt;
&lt;p&gt;&lt;i&gt;addendum:&lt;/i&gt; shaved off a few more characters! It looks like I can live without &lt;code&gt;method()&lt;/code&gt;, though that was an elegant approach... except for resorting to &lt;code&gt;dup&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;lambda{|f,*x| 0 while x=f[f,*x]}[lambda{|f,*x|
puts [&quot;what was it&quot;, &quot;is it a #{x[0]}&quot;,
	&quot;what might I ask to tell a #{x[1]} from a #{x[0]}&quot;, x[2]][x.size]+&quot;?&quot;
( 5&amp;gt;(x&amp;lt;&amp;lt;gets.strip&amp;lt;&amp;lt;x[-1][&quot;n&quot;]).size ?
	(2&amp;lt;x.size &amp;&amp; x.pop &amp;&amp; 3!=x.size ?
		f[f,x[0],f[f]]:
		3==x.size ? x:[x])[1..-1]:
	[f,lambda{|*y| y[1..-1]}].values_at(x[4]?0:1,x[4]?1:0
		).enum_with_index.map {|g,i| g[f,*x[i]]}&amp;lt;&amp;lt;x[2]
).unshift(x[-2]).last 3}]&lt;/pre&gt;
&lt;hr width=&quot;30%&quot; /&gt;
&lt;p&gt;&lt;i&gt;addendum #2:&lt;/i&gt; this is the final version, five days later. I really can&apos;t believe how much time I&apos;ve spent on this.&lt;/p&gt;
&lt;pre&gt;lambda{|f,*x|0 while x=f[f,*x] }[lambda{|f,*x|
puts [&quot;what was it&quot;,&quot;is it a #{x[0]}&quot;,
	&quot;what might I ask to tell a #{x[1]} from a #{x[0]}&quot;,x[-1]][x.size]+&quot;?&quot;

case (x&amp;lt;&amp;lt;gets.strip&amp;lt;&amp;lt;x[-1][&quot;n&quot;]).size
when 3;	[x[0]]+(x[-1]?f[f,x[0],f[f]][1..-1]:[])
when 5;	[0,1].zip(([lambda{|*y|y[1..-1]},f]*2)[x[-1]?1:0,3]).
		map{|i| i.pop[f,*x[*i]]}&amp;lt;&amp;lt;x[2]
else;	x[0..-2]
end }]&lt;/pre&gt;
&lt;hr width=&quot;30%&quot; /&gt;
&lt;p&gt;&lt;i&gt;addendum-de-dum&lt;/i&gt; - no more. Really. After this.&lt;/p&gt;
&lt;pre&gt;lambda { |f,*x| 0 while x=f[f,*x] }[ lambda { |f,*x|
puts [&quot;what was it&quot;, &quot;is it a #{x[0]}&quot;,
	&quot;what might I ask to tell a #{x[1]} from a #{x[0]}&quot;, x[-1]][x.size]+&quot;?&quot;
case (x &amp;lt;&amp;lt; gets.strip &amp;lt;&amp;lt; [f,lambda { |*y| y[1..-1]},f][x[-1][&quot;n&quot;]?0:1,3]).size
when 3; x[-1][2] ? f[f,x[0],f[f]] : x[0]
when 5; [0,1].zip(x[-1]).map{ |i| i.pop[f,*x[*i]]} &amp;lt;&amp;lt; x[2]
else x[0..-2]
end
}]&lt;/pre&gt;</description>
  <comments>http://dontdothat.livejournal.com/18159.html</comments>
  <category>ruby</category>
  <category>optimization</category>
  <category>programming</category>
  <lj:mood>detail-oriented</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/17818.html</guid>
  <pubDate>Thu, 12 Mar 2009 21:26:30 GMT</pubDate>
  <title>Forward error correction and JPEGs</title>
  <link>http://dontdothat.livejournal.com/17818.html</link>
  <description>&lt;p&gt;A fun project to work on and to serve as a carrot to enjoy after I&apos;ve finished writing a history essay and studying for two exams: characterize the noise floor of a communication medium defined as a fixed-size JPEG-compressed bitmap, and determine the suitability of a forward error correction method to approach the &lt;a href=&quot;http://en.wikipedia.org/wiki/Noisy-channel_coding_theorem&quot;&gt;Shannon limit&lt;/a&gt;. Questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how can the size of a given JPEG file be related to the amount of recoverable meaningful data it contains?&lt;/li&gt;
&lt;li&gt;what is the most efficient approach: non-error corrected storage, FEC storage, distribution of a &quot;correction list&quot; of patches with the compressed bitmap, or a combination of the last two?&lt;/li&gt;
&lt;li&gt;(trivial) is JPEG to bitmap decompression well-defined and invariant, or will certain inputs yield varying outputs given standards-compliant decompressors?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It would be ridiculous to claim that there is any practical application for this so I won&apos;t. I thought it might be fun to abuse a flickr account for data storage; the interesting and unsolved problem I have is the distribution of large amounts of data on the internet to many recipients. How many thousands of JPEGs are needed to reliably reproduce a DVD? (it gets more interesting when the uncertain areas are wandered into, since we can test decompression to make sure that the intended result is the one we get. Perhaps the input can be fine-tuned to yield the correct result even when complete, correct reproduction of purely random input is unlikely. Of course this requires well-defined decompression.)&lt;/p&gt;
&lt;p&gt;I think I&apos;m going to have to give up if I run into &lt;a href=&quot;http://en.wikipedia.org/wiki/Finite_field&quot;&gt;fields&lt;/a&gt;, though.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/17818.html</comments>
  <lj:music>CONNECT 14400</lj:music>
  <media:title type="plain">CONNECT 14400</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/17314.html</guid>
  <pubDate>Sat, 17 Jan 2009 14:14:58 GMT</pubDate>
  <title>no volts: a plane, stopped trains, and a bicycle</title>
  <link>http://dontdothat.livejournal.com/17314.html</link>
  <description>&lt;p&gt;Thursday evening was already an eventful time; N. was packing for her &lt;a href=&quot;http://gc.kls2.com/cgi-bin/gc?PATH=yyz-yvr-hkg&amp;amp;RANGE=&amp;amp;PATH-COLOR=&amp;amp;PATH-UNITS=mi&amp;amp;PATH-MINIMUM=&amp;amp;SPEED-GROUND=&amp;amp;SPEED-UNITS=kts&amp;amp;RANGE-STYLE=best&amp;amp;RANGE-COLOR=&amp;amp;MAP-STYLE=&quot;&gt;little jaunt&lt;/a&gt; and, well, this is always a little stressful no matter how well prepared you are - and she prepares very well indeed. This turned out to be a good thing and she had most of her packing done well in advance, where I usually procrastinate and stuff everything in arm&apos;s reach into my luggage in the last terror-filled half-hour before I (absolutely, positively, can&apos;t even hope to make it past this time) have to go.&lt;/p&gt;
&lt;p&gt;A pleasant enough evening with a passable dinner of my making and Irished-up coffee to follow (classy, I know). We even handled a minor crisis when the microwave and (new) coffee maker drew too much current and blew a fuse. Replaced the fuse and serialized that operation. Then, two hours later, the lights went out.&lt;/p&gt;
&lt;p&gt;&amp;quot;Shit! The fuse blew again?&amp;quot; Well, that was a reasonable conclusion. We have the bias of the earlier event, and the fact the computers are still running. On the other hand - &lt;i&gt;all&lt;/i&gt; of the lights are out, only the battery-powered computers are running, and they do seem desperately unhappy (especially my poor laptop, which is essentially on heart-lung bypass with the non-battery-powered server). We still haven&apos;t realized the magnitude of the situation, so... &lt;b&gt;&amp;quot;Oh, no - did I knock out the power by ironing and making muffins at the same time?&amp;quot;&lt;/b&gt; Hmm, possible but - oh, look, the building across the street has no power! And the lights at the subway station are out, except emergency lighting (although, really interestingly, trains continued to run until the regular subway closing time). Ah. This is &lt;a href=&quot;http://search.twitter.com/search?q=%23darkTO&quot;&gt;the real deal&lt;/a&gt;. And &lt;a href=&quot;http://en.wikipedia.org/wiki/Power_outage#Restoring_power_after_a_wide-area_outage&quot;&gt;it might take a while&lt;/a&gt; before the lights come back on. Ok. Flashlights, and then candles.&lt;/p&gt;
&lt;p&gt;The whole event seemed very apocalyptic. This obviously wasn&apos;t a full-scale outage as streetlights were on and other buildings in this vicinity clearly had power, but we could tell that a few thousand people were affected. We didn&apos;t grasp the magnitude of the outage until much later; as it turned out, we were in &lt;a href=&quot;http://micro.newswire.ca/release.cgi?rkey=1701168103&amp;amp;view=46250-2&amp;amp;Start=0&quot;&gt;the middle of a quadrant&lt;/a&gt; bounded by &lt;a href=&quot;http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Jane+St+%26+St+Clair+Ave+W,+Toronto,+ON,+Canada&amp;amp;daddr=St+Clair+Ave+W+%26+Spadina+Rd,+Toronto,+Toronto+Division,+Ontario,+Canada+to:Spadina+Ave+%26+Queen+St+W,+Toronto,+Toronto+Division,+Ontario,+Canada+to:s+kingsway+and+ripley+ave+to:Jane+St+%26+St+Clair+Ave+W,+Toronto,+ON,+Canada&amp;amp;hl=en&amp;amp;geocode=&amp;amp;mra=ls&amp;amp;sll=43.660658,-79.444109&amp;amp;sspn=0.062093,0.14883&amp;amp;ie=UTF8&amp;amp;ll=43.658434,-79.444714&amp;amp;spn=0.062096,0.14883&amp;amp;z=13&quot;&gt;Spadina Ave, St. Clair Ave, Jane St., and Queen St W / Queensway&lt;/a&gt;. In other words, west Toronto. Bear in mind though that these details would all have to come later; the only link to the outside world that we had was our cellphones, which, really, is not so bad, but it&apos;s a lot less than we&apos;re accustomed to.&lt;/p&gt;
&lt;p&gt;Anyway, I had a feeling that it might be a while, and it was. I think the candles started making the air a little stuffy - it didn&apos;t help that half of them were pumpkin-scented or whatever - so ventilation wasn&apos;t working. We live in a fairly large apartment building so heat wasn&apos;t really a problem, and there was enough water in both the hot-water and cold-water reservoirs to last throughout. The hot water was decidedly lukewarm in the morning, though, which made for a cold and short shower. The elevators were out, of course, and they were hopelessly confused when the power came back, so I had the pleasure of carrying N.&apos;s luggage down fourteen flights of stairs. It was &lt;i&gt;down&lt;/i&gt;, at least.&lt;/p&gt;
&lt;p&gt;As I&apos;ve jumped ahead, it&apos;s already apparent that we were one of the lucky ones to have power restored after only a few hours. We woke up early with the lights still out, with the intention of taking the subway to the airport. That wasn&apos;t an option, so we drove. The drive back is worthy of a blog entry itself. I felt a little like I was plowing through zombies like Will Smith in I Am Legend. (seriously though, the police did a pretty commendable job of keeping a &lt;b&gt;huge&lt;/b&gt; crowd from getting out of hand on what was a cold day - for Toronto, that is) The subway was restored in time for me to take it to work, but I decided to ride my bike anyway. I&apos;ve never biked in sub-zero temperatures, so this was a first for me, and probably a little reckless since it was about -15. It worked out okay. Changing was a hassle, but my sweatpants+old jeans approach seemed to work. It was really just about the same as skiing on a cold day. Extremely tiring on the way back. My thighs started tingling at the halfway point and when I hit a massive pothole, condensation formed on the seat while I dismounted to collect my bike locks (yes, two of them, both violently ejected from my bike rack as I traversed the pothole).&lt;/p&gt;
&lt;p&gt;It was a pretty exciting day. I got home, disrobed, had a lovely cup of tea, and fell asleep with the lights on. I think I&apos;ve left out quite a lot but that is the gist of it. Anyone else had a fun day?&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/17314.html</comments>
  <lj:mood>i need a shower</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/16923.html</guid>
  <pubDate>Wed, 14 Jan 2009 19:00:46 GMT</pubDate>
  <title>We used to call them ISA slots, and they had jumpers, and....</title>
  <link>http://dontdothat.livejournal.com/16923.html</link>
  <description>&lt;p&gt;So it seems like &lt;a href=&quot;http://www.firingsquad.com/news/newsarticle.asp?searchid=21150&quot;&gt;desktops have had their day&lt;/a&gt;, which confirms more or less my experiences at &lt;a href=&quot;http://apple.ca/retail/&quot;&gt;the fruit stand&lt;/a&gt;. It used to be that a laptop (when did they stop being notebooks, anyway?) was a semi-useful ancillary to the real computer, invariable a PC with a 60 lb. crt, modem, giant tower or imposing desktop. Wired mouse, profoundly terrible ergonomics - not that laptops have improved that situation!&lt;/p&gt;
&lt;p&gt;I feel a little sad about that, and I hope it won&apos;t make PCs prohibitively expensive for those who tinker. Then again, most of what I&apos;ve always played with is essentially dumpster salvage. I don&apos;t know what I&apos;d do with a new PC. I think I&apos;d look at it in wonder, at first, at how shiny it was and how everything worked - then I&apos;d scratch my head and think how stupid it is that I can&apos;t take it with me to school. I probably wouldn&apos;t play games on it. Part of living with N. is that there&apos;s always someone to play Wii with, and I guess I could get back into FPS but, well, I think they&apos;d be more fun on a laptop anyway. And, not so ridiculously anymore, laptops can play games to my satisfaction. I still think Half-Life is pretty amazing, so that&apos;s more or less where I am with gaming.&lt;/p&gt;
&lt;p&gt;Laptops seem to be opening a new market in the sub-$500 category that PCs never really addressed. You could build a PC for that amount, but it seemed that they were such unsatisfactory and bland machines that they didn&apos;t particularly catch on. The build quality was lousy too, and they were essentially blank slates. Great for Linux, but not so good for much else.&lt;/p&gt;
&lt;p&gt;Well, whatever. With enough space and money, I will always prefer a desktop on the... desktop. But I guess I have to affirm the zeitgeist in agreeing that if I had only one computer, it would be a laptop. All that this proves is that I&apos;m a hopeless geek and I will always be outnumbered by my (hopefully loyal) computers.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;i&gt;oh, I ended up beating the odds on N.&apos;s laptop after all. No, not easy, not a bit, and of course her reaction was - &quot;what did you do? you did nothing, it looks this same!&quot; Well, what do you expect after you wake up from brain surgery? Hyper-intelligence? The ability to smell emotions? Maybe... maybe the patient with 5% odds of survival complains about these things. I&apos;m willing to bet that they &lt;b&gt;don&apos;t&lt;/b&gt;, dammit. More on that another time. (computers and cloning, that is, not neurosurgeons vs. geeks)&lt;/i&gt;&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/16923.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/16654.html</guid>
  <pubDate>Fri, 09 Jan 2009 17:51:24 GMT</pubDate>
  <title>Old computer recovery</title>
  <link>http://dontdothat.livejournal.com/16654.html</link>
  <description>&lt;p&gt;N. has a new notebook, and I&apos;m transferring everything over from her old one. By everything, I mean putting in a &lt;a href=&quot;http://www.knoppix.net/&quot;&gt;Knoppix&lt;/a&gt; cd on the new one and booting the old one&apos;s &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; partition and netcat&apos;ing the disk over. (as a side note, with a USB-USB transfer cable, my experiments showed the best throughput to be had by piping the sender&apos;s dd through gzip -1; the USB cable needs a lot of cpu from the old computer, so not much is available for compression except the gain from effectively run-length encoding empty space.)&lt;/p&gt;
&lt;p&gt;It has been quite a pain so far and I haven&apos;t solved it yet. I&apos;m actually pretty close to giving up if my next attempt fails. However, I learned a few things in doing this, and I don&apos;t really want them to clutter up my brain any longer, so I&apos;m hoping that writing them down will expunge the details.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the Toshiba Satellite M30 (old computer) recovery DVDs have encrypted Norton Ghost images. The decryption program will not run on any other computer. It acts as a shell to the real ghost.exe program, passing it the password on an authentic computer. That password is 2533.&lt;/li&gt;
&lt;li&gt;to get that password, (omitting many details) I had start an instance of DOS on the old computer. Aside from how ridiculous this is, I ran into the problem that the USB key boot firmware on the Toshiba does not play nicely with anything that runs after it has done its job. This may have been fixed in a later revision. Anyway, forget about using a USB key, and use the &lt;a href=&quot;http://grub4dos.sourceforge.net/&quot;&gt;grub4dos&lt;/a&gt; boot loader I&apos;d installed long ago (in boot.ini, entirely in the Windows partition - very nice) to boot a &lt;a href=&quot;http://www.freedos.org/&quot;&gt;FreeDOS&lt;/a&gt; image - specifically &lt;a href=&quot;http://www.finnix.org/Balder&quot;&gt;Balder&lt;/a&gt;. Load this floppy image into memory from the Windows partition using memdisk, which is part of &lt;a href=&quot;http://syslinux.zytor.com/&quot;&gt;syslinux&lt;/a&gt;, and is in turn loaded by grub. Don&apos;t forget to copy the files needed to harvest the ghost password (&lt;a href=&quot;http://www.weller.ws/toshiba/norton.html&quot;&gt;details&lt;/a&gt;) into the floppy image.&lt;/li&gt;
&lt;li&gt;oh, yes, use the loadcd batch file to enable CD/DVD support after FreeDOS loads&lt;/li&gt;
&lt;li&gt;call the predata.bat file on the recovery DVD and don&apos;t forget to set TGHOSTPS as in os.bat before running tghost&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The end result of this effort is that N. should be able to start using the new computer in exactly the same way she&apos;s used to using the old one. That&apos;s not so much to ask, really, is it? The new computer is preloaded with new software that we have no interest in using. I will have to use it myself on another system, but the theory is that this will contribute to my gainful employment at some point in the future.&lt;/p&gt;
&lt;p&gt;The current technicality is that the old software can be restored onto the new computer, but it seems to lack drivers necessary to boot. The system provides a message with the code 0x7b (who says Unix is unfriendly? Have they checked with the competition lately?) that translates to &quot;boot failure&quot;. Oh, ok. I guess I&apos;ll see what I can do about that then. Possibilities:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;try to fix the recovered system from a partition containing working software; Linux will not be useful for this, so I&apos;d have to use the software that came with the new computer&lt;/li&gt;
&lt;li&gt;instead of recovering the old software, copy the old hard drive to the new one directly as I did on my first attempt after pre-installing appropriate driver software on the old computer&lt;/li&gt;
&lt;li&gt;buy a retail copy of the old software&lt;/li&gt;
&lt;li&gt;admit defeat and use the new software&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The numbers in the steps above correspond to the severity of the insanity I&apos;ll be suffering as I progress through them, from start to finish.&lt;/p&gt;
&lt;p&gt;Now I&apos;d be so pleased if I could just forget all of this...&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/16654.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/16446.html</guid>
  <pubDate>Fri, 02 Jan 2009 17:52:22 GMT</pubDate>
  <title>All of these hacks are yours, except Europa</title>
  <link>http://dontdothat.livejournal.com/16446.html</link>
  <description>&lt;p&gt;A couple of things I&apos;m working on right now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LDAP for the home net - single-source user authentication&lt;/li&gt;
&lt;li&gt;new laptop: Debian GNU/Linux-on-NTFS, i.e. ntfs-root (ntfs-3g should make this possible)&lt;/li&gt;
&lt;li&gt;using a photo frame as an info panel for the server; I need programmatic USB disconnection for this to work&lt;/li&gt;
&lt;li&gt;wedding site&lt;/li&gt;
&lt;li&gt;boot-132 &quot;Mac&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That should keep me busy for a little while.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/16446.html</comments>
  <lj:music>(sshhh...)</lj:music>
  <media:title type="plain">(sshhh...)</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/16295.html</guid>
  <pubDate>Wed, 17 Dec 2008 17:00:10 GMT</pubDate>
  <title>A novel application for HTTP referer</title>
  <link>http://dontdothat.livejournal.com/16295.html</link>
  <description>&lt;p&gt;The HTTP referer (sic) header defined in &lt;a href=&quot;http://www.ietf.org/rfc/rfc2616.txt&quot;&gt;RFC 2616&lt;/a&gt;, as far as I know, hasn&apos;t been used to define a path namespace for resources on a web server. This could be a useful application, not for the purpose of &quot;link protection&quot; (&lt;a href=&quot;http://www.google.com/search?q=wget+referer&quot;&gt;trivially bypassed&lt;/a&gt;, by the way) but to make content less fragile by lessening its dependency on server file layout. For instance, a web page like &lt;a href=&quot;http://apod.nasa.gov/&quot;&gt;Astronomy Picture of the Day&lt;/a&gt; will contain relative links to images like this: &lt;code&gt;&amp;lt;IMG SRC=&quot;image/0812/DoubleDumbbell_Lopez_c0.jpg&quot; alt=&quot;See Explanation.  Clicking on the picture will download the highest resolution version available.&quot;&amp;gt;&lt;/code&gt;. If the site were to be reorganized, for instance renaming the top-level &lt;code&gt;image&lt;/code&gt; directory to something more inclusive of other types like &lt;code&gt;media&lt;/code&gt;, every referring document being served would have to be scanned and rewritten. With a large enough base of documents, this automatic process would need some verification as there are bound to be problems.&lt;/p&gt;
&lt;p&gt;As an alternative, consider something like &lt;code&gt;&amp;lt;IMG SRC=&quot;pic_of_the_day&quot; /&amp;gt;&lt;/code&gt;. This eliminates a path structure entirely, placing the image in the top-level. This might be obviously implemented by using something like an alias or symbolic link on the web server, but this accomplishes nothing and doesn&apos;t solve the problem of handling separate files (I propose that &quot;picture of the day&quot; reference &lt;i&gt;the same&lt;/i&gt; &lt;code&gt;pic_of_the_day&lt;/code&gt;). How then can the web server determine which file to send?&lt;/p&gt;
&lt;p&gt;The referer comes in here. The server would have a table indexed by the referer that would return the appropriate document &lt;b&gt;and&lt;/b&gt; &lt;code&gt;Content-Type&lt;/code&gt; (note that &lt;code&gt;pic_of_the_day&lt;/code&gt; has no extension, so the server will need to tell the client exactly what it is). My argument is that it is easier to maintain this table than to encode permanent references to media that may be moved; this should have other benefits too, which might be handy for client-side scripts that could benefit from having easily generated pathnames for referencing server resources.&lt;/p&gt;
&lt;p&gt;It seems strange that I haven&apos;t found an implementation of this. I&apos;m pretty sure that more than a few sites fake this by maintaining a mapping between something like a &lt;code&gt;/assets&lt;/code&gt; directory and the actual file, but they still include a reference in the static HTML in the form of a pathname and a proper filename with extension. I&apos;d like to do away with this pretense and formalize the idea that the elements referenced by a page are entirely decided by the server.&lt;/p&gt;
&lt;p&gt;There is a very nice consequence to this, which I started with and worked from backwards to obtain this solution: a strong division between static and dynamic pathnames will exist, which means that there will be no conflict between an address you&apos;d like to generate on the server as a static reference (like &lt;code&gt;my.server.com/~myname&lt;/code&gt; or &lt;code&gt;apod.nasa.gov/pic_of_the_day&lt;/code&gt;) and dynamically generated references to server resources. The actual names that pages use to refer to server resources are entirely immaterial as long as they are unique with respect to one another; it would be perfectly valid for &lt;code&gt;fruitcompany.com/store&lt;/code&gt; to contain &lt;code&gt;&amp;lt;img /&amp;gt;&lt;/code&gt; elements that are sequentially named &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;...&lt;/code&gt;, &lt;i&gt;&lt;code&gt;n&lt;/code&gt;&lt;/i&gt;. The referer &lt;code&gt;fruitcompany.com/store&lt;/code&gt; will allow the server to dereference the link and serve it with the appropriate &lt;code&gt;Content-Type&lt;/code&gt;. If I ever decide that I&apos;d really like to have the address &lt;code&gt;fruitcompany.com/store/0&lt;/code&gt; as a permanent link to a resource that I can distribute publicly, I&apos;ll set that up on the server, and the &lt;code&gt;fruitcompany.com/store&lt;/code&gt; page source will simply start numbering its elements at &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/16295.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/15920.html</guid>
  <pubDate>Sat, 13 Dec 2008 18:23:07 GMT</pubDate>
  <title>Quick package search in Debian/Ubuntu/etc.</title>
  <link>http://dontdothat.livejournal.com/15920.html</link>
  <description>&lt;p&gt;This is a one-liner that I&apos;ve found useful for searching Tag: fields in Debian&apos;s package lists. For instance, I might want to know about all the packages available that have to do with Ruby. I&apos;ll assume that any mention of the string &apos;ruby&apos; in the Tag: field of a package warrants its selection.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;egrep -hr &apos;^(Package:|Tag:.+ruby)&apos; /var/lib/apt/lists|grep -B1 ^Tag|grep ^Package|cut -d\  -f2-|tr \\n \||xargs -I{} apt-cache --names-only search ^\({}\)\$|sort|less&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The first &lt;code&gt;egrep&lt;/code&gt; does a recursive search through the package list that &lt;code&gt;apt&lt;/code&gt; maintains. The &lt;code&gt;-h&lt;/code&gt; flag suppresses printing the filename. The regex selects every occurrence of lines beginning with &quot;Package:&quot; and lines beginning with &quot;Tag:&quot; and containing the string &quot;ruby&quot;. In the next &lt;code&gt;grep&lt;/code&gt;, packages without a matching Tag: line are discarded. Another &lt;code&gt;grep&lt;/code&gt; to clean that up, then &lt;code&gt;cut&lt;/code&gt; out everything but the package name, &lt;code&gt;tr&lt;/code&gt; newlines into a literal pipe, and pass the now-single line to &lt;code&gt;xargs&lt;/code&gt;. That part is a little ugly, because &lt;code&gt;apt-cache&lt;/code&gt; wants a regular expression and it&apos;s trying too hard for this purpose when all that is needed is an exact match of the package name. Insert an &lt;code&gt;echo&lt;/code&gt; before the &lt;code&gt;apt-cache&lt;/code&gt; invocation to see what it&apos;s doing. It&apos;s not a particularly elegant solution, and it works.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;edit&lt;/i&gt;&lt;/b&gt; -- the original version still had &lt;code&gt;echo&lt;/code&gt; before &lt;code&gt;apt-cache&lt;/code&gt;, which wouldn&apos;t have been useful. Fixed&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/15920.html</comments>
  <category>debian</category>
  <category>hack</category>
  <category>linux</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/15645.html</guid>
  <pubDate>Fri, 12 Dec 2008 05:13:06 GMT</pubDate>
  <title>Partially-compiled source code storage</title>
  <link>http://dontdothat.livejournal.com/15645.html</link>
  <description>&lt;p&gt;So I was tempted to think that storing source code in a parsed form (what I
learned is called an abstract syntax tree, commonly abbreviated AST) might be
a good idea. I thought this because:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;well-formedness is forced; syntactically invalid code cannot be saved
(this is only the most trivial kind of correctness, though)
&lt;/li&gt;&lt;li&gt;metrics extracted from source code can be more valid: rather than counting
lines, operations, objects, classes, etc. can be measured (if spoofing is a
problem, though, this might just move it into a higher level)
&lt;/li&gt;&lt;li&gt;compilation will be marginally faster. I don&apos;t posit this as a realistic
benefit, except perhaps for large projects, or specialized cases with large
amounts of generated code (XWT&apos;s mips2java would be an example).
4. arguments about source code formatting can be swept aside in one fell
swoop. Simply set your AST-aware editor to whatever formatting style you&apos;d
like.
&lt;/li&gt;&lt;li&gt;the original form could be exactly regenerated by recording comments,
deviations from regular form, even storage of invalid code in &quot;as-is&quot; form.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;
However, a post on the Eclipse LDT (language definition toolkit - now
defunct?) mailing list a few years ago makes a convincing argument that this
is a waste of time (
http://dev.eclipse.org/newslists/news.eclipse.technology.ldt/msg00027.html )

&lt;/p&gt;&lt;p&gt;I have an intuitive notion that AST storage should be able to buy the
programmer something in that it brings the source form of a program closer to
its object code representation. At the very least, it should make it easier
for a debugger to find errors in code, and relay messages to the editor or
IDE that can be used to highlight sections of code or supply profiling data.

&lt;/p&gt;&lt;p&gt;Unfortunately, existing tools like wc, grep, sed, etc., can&apos;t get anything
useful from AST-represented source. They could still be used with a
command-line tool to extract the original source, but this would still be
problematic since the extracted text is not the canonical form of the source.

&lt;/p&gt;&lt;p&gt;The appeal of this kind of persistence, I think, is that the strong link
between statements, functions, classes and files may be weakened somewhat.
One of the reasons for storing a project in multiple files is simply to keep
individual units of source code manageable, and to allow patches to be merged
in similarly manageable units. But if source is stored as a pool of ASTs,
aren&apos;t files an optional structure? And, interestingly, couldn&apos;t we do a
SELECT-like operation to extract code and automatically merge disparate
source into a single file? This might be interesting for another project that
wants to incorporate functionality without doing a lot of digging. It seems
to me (I have nothing to support this statement but intuition) that the AST
form should provide more useful information for an automated system to
extract code with arbitrary granularity, where a single function and its
supporting functions and definitions could be automatically identified.

&lt;/p&gt;&lt;p&gt;Of course, all of this is possible with regular source code, since I have
defined the regular and AST forms as equivalent. And with an excess of CPU
and I/O for most projects, AST buys nothing and loses portability. Perhaps it
would be useful for interchange, or as a method for marking-up source code or
preparing it for publication (including it in a document for instance). The
only way for AST storage to have any advantage is for it to restrict the
programmer or force more information to be provided (or, compile code on the
run as Visual Studio does, and identify dependencies at edit time).

&lt;/p&gt;&lt;p&gt;(which I can&apos;t stand, since it distracts me and prevents me from writing
pseudo-code in the middle of a function as I try to reason out a problem. I
do like highlighting and not having to match parentheses by hand. I&apos;m not
against method completion and other inline documentation, but I keep the docs
open all the time anyway. I do find myself doing something like
&lt;code&gt;object.methods.sort&lt;/code&gt; a whole lot in &lt;tt&gt;irb&lt;/tt&gt;.)
&lt;/p&gt;
&lt;p&gt;Ok. I think I&apos;ve convinced myself that this isn&apos;t a useful way to archive
source code, and that we can get everything from the original source anyway
as long as it&apos;s syntactically valid. It might be a different story for code
that has been parsed and partially or fully compiled, but not (possibly,
fully) linked. And precompiled headers are an old trick that makes sense, or
used to back when computers were slow. I suppose it makes sense for
continuous compilation.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/15645.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/15596.html</guid>
  <pubDate>Tue, 09 Dec 2008 04:54:47 GMT</pubDate>
  <title>Big Plans</title>
  <link>http://dontdothat.livejournal.com/15596.html</link>
  <description>&lt;p&gt;I&apos;m getting a feeling that I need to shake things up; and really, things have been just too comfortable and stable for too long. Let&apos;s see... how best to mess that up?&lt;/p&gt;
&lt;h2&gt;Coding&lt;/h2&gt;
&lt;p&gt;I&apos;ve been doing a fair amount of this lately, and it&apos;s been filling a gap. At the same time, I don&apos;t feel that I&apos;m gaining anything by building up awesome retail skillz. And there are fairly exciting things happening in the &lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; community. And lo and behold, alternate frameworks like Merb and Camping... and some very interesting things on the fringes, like Haskell and a Rails analogue in, believe it or not, Smalltalk!&lt;/p&gt;
&lt;h2&gt;Am I a relic, or something?&lt;/h2&gt;
&lt;p&gt;It blows me away, really, it does, when I read the writing of my so-called contemporaries and discover that they&apos;ve never dereferenced a pointer, started a line of code with a number reachable by GOTO or GOSUB, or, hell, even allocated memory. When I think that I switched to Linux because the alternative, at the time, could be taken down by one misbehaving program - does any of that count for anything? That I&apos;ve watched computing scale up by several orders of magnitude, programming all the way? I&apos;d like to think that it makes me appreciate the conveniences we have now all the more. What it makes me feel is that too much of a premium is placed on programmer time. &lt;a href=&quot;http://zedshaw.com/&quot;&gt;Zed Shaw&lt;/a&gt; writes about a coder who assumed each month in the year has 30 days. Firefox has inexplicably contracted-out its non-volatile state to SQLite. (their claim that this makes the program more robust in the face of crashes is not borne out by my experience of corrupt .sqlite files)&lt;/p&gt;
&lt;h2&gt;Write less code?&lt;/h2&gt;
&lt;p&gt;Every single non-trivial project I&apos;ve worked on has gone through a few re-writes. I&apos;ve tossed more code than I&apos;ve left; I&apos;ve condensed functions into single lines. Invariably, I&apos;ve made the mistake of chasing problems that have nothing to do with the task at hand (my proudest achievment here is probably the time I decided to condense postal codes into a base-10 number in an incredibly elegant, general way - extensible to arbitrary magnitude - saving roughly 200K out of a 10+MB database). I&apos;ve come up with some very suitable solutions as well, but these have been on the third or fourth attempt, and came only after significant reflection and insight gained through the first couple of tries.&lt;/p&gt;
&lt;p&gt;I guess the ratio of time to lines of code is pretty high for me. I&apos;ve also found that excess time seems to cause the code to get somewhat dense, and honestly probably not easily readable by someone not completely familiar with the problem.&lt;/p&gt;
&lt;h2&gt;Am I smart enough to do what I&apos;m trying to do?&lt;/h2&gt;
&lt;p&gt;Maybe, but I feel like I&apos;m stumbling sometimes without the rigour of a solid CS education and hours spent solving problems in discrete math. My colleagues seem to do pretty well with an intuitive grasp of logic and algorithms, leaving the tough parts to library code. This is probably the right approach, until it is time to write your own library.&lt;/p&gt;
&lt;p&gt;The other thing that bothers me is the difficulty of proving that a program is acting correctly. I think &lt;a href=&quot;http://en.wikipedia.org/wiki/G%C3%B6del,_Escher,_Bach&quot;&gt;GEB&lt;/a&gt; started my thinking about this, and I&apos;m aware that this is &lt;a href=&quot;http://www.cs.ualberta.ca/~piotr/&quot;&gt;the life work&lt;/a&gt; of more than a few people. Intuition has its place, but there&apos;s nothing quite like saying &quot;well, it seems to work&quot; to reveal a lack of insight into how a program does its job. And even proofs aren&apos;t perfect: GEB (I seem to recall) mentions the proof of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Four_color_theorem&quot;&gt;four colour theorem&lt;/a&gt;, which is not realistically possible by hand; which seems reasonable enough, except that to accept the mechanically-generated proof is to accept the system producing the proof as being correct.&lt;/p&gt;
&lt;h2&gt;Whatever I end up doing...&lt;/h2&gt;
&lt;p&gt;
...kick me if you ever see me:
&lt;ul&gt;
&lt;li&gt;using UUIDs for primary keys (it&apos;s not about the not-chance of collision - it&apos;s the laziness)&lt;/li&gt;
&lt;li&gt;believing that objects and relational databases make sense together&lt;/li&gt;
&lt;li&gt;believing that &lt;a href=&quot;http://www.jwz.org/doc/worse-is-better.html&quot;&gt;Worse is not Better&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;thinking that a century for now, we won&apos;t look back in sheer terror at the code that ran the world&lt;/li&gt;
&lt;li&gt;saying that a database will solve everything (I used to think that this was a good solution for /etc; in my defence, I was 18. I wonder what &lt;a href=&quot;http://en.wikipedia.org/wiki/NetInfo_Manager&quot;&gt;Apple&lt;/a&gt;&apos;s defence is?)&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;Next entry will be ungeeky. I seem to have written only about my complaints in programming, as opposed to my big plans. You know. Big.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/15596.html</comments>
  <category>geek</category>
  <category>cs</category>
  <category>math</category>
  <category>coding</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/15260.html</guid>
  <pubDate>Thu, 31 Jul 2008 15:48:11 GMT</pubDate>
  <title>What I&apos;d Rather Be Doing</title>
  <link>http://dontdothat.livejournal.com/15260.html</link>
  <description>&lt;p&gt;I&apos;m getting distracted with a few things I&apos;d like to be doing... so I&apos;m reasoning that by logging those things here, I can check them off in my mind and get back to them when I have time.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could lose more than a few hours here, easily. Especially when hacks to get around limitations like a lack of long-running processes &lt;a href=&quot;http://css.dzone.com/news/emulating-a-long-running-proce&quot;&gt;already exist&lt;/a&gt;, to one extent or another. Oh, the hacks! The downside is that everything has to be written in Python; and I&apos;m not a Python fan. (I really am hung up over the whitespace-as-syntax thing. Our forefathers fought and died for freely-formed code. &lt;code&gt;10 PRINT &quot;THAT&apos;S A LITTLE MUCH DON&apos;T YOU THINK?&quot;:GOTO 10&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;playing with the &lt;a href=&quot;http://nslu2-linux.org/&quot;&gt;slug&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nothing particularly amazing here, except that I want to change things so that the cable modem connects to the NSLU2 with ethernet instead of USB. (I use an NSLU2 as a router, mail+DNS server, and conversation piece. Well, geeky conversation piece!) USB is perfect except that every so often the link resets, and it&apos;s usually when I&apos;m not home, so no ssh&apos;ing in to fix things. I can still indulge my USB fetish by connecting the NSLU2 to my server with a USB-USB data transfer cable that emulates ethernet - and is considerably faster than ethernet, actually, although it requires a lot of CPU time for the little slug. Ultimately, the slug will go the way of the dodo since it has done a good job for me these past three years, and I have an idle notebook which will let me do some fun and new things.&lt;/p&gt;
&lt;p&gt;As an aside, I would love to be able to sell the notebook - a Compaq V2410 - but I doubt anyone will want to buy it since the onboard USB is dead. It will only run a patched kernel which goes to pains to not probe the UHCI, since it seems to have a grand mal seizure or something when that happens and it locks hard (so, no Windows: no way to totally rip out USB support; device manager isn&apos;t enough here). So here&apos;s one of many examples of hardware that is worth far more to me than its monetary value would suggest. As another aside (I swear, Wikipedia and Google have destroyed what little coherence of thought I may ever have had), I&apos;m sure that there is language in economics that describes this sort of situation: where goods are disproportionately valued... oh, well, that&apos;s just trade. It&apos;s referenced in Dark Knight also (Alfred&apos;s bit about the gems in the jungle).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixing my bike&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If I get everything done that I&apos;m supposed to today, that&apos;s next. It&apos;s more or less ready to go: I&apos;ve replaced the snapped derailleur cable, and I just need to adjust it to shift properly (I have no idea how hard it is to get this right). The brakes need to be tightened while I&apos;m at it; my stopping distance is getting a bit too long for comfort.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/15260.html</comments>
  <category>time management</category>
  <category>google</category>
  <category>development</category>
  <category>gae</category>
  <lj:music>Ladytron - Ghosts</lj:music>
  <media:title type="plain">Ladytron - Ghosts</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/14900.html</guid>
  <pubDate>Wed, 30 Jul 2008 03:19:07 GMT</pubDate>
  <title>Motivation and the longview (partly in jest)</title>
  <link>http://dontdothat.livejournal.com/14900.html</link>
  <description>&lt;p&gt;I have a tough time doing things that aren&apos;t fun - not to suggest that I&apos;m unique in this, but there it is. I often get around this by being imaginative and finding something interesting about a mundane or onerous task, like optimizing it pointlessly (nesting bowls and cups when doing the dishes), overdoing it (deriving formulae in an introductory stats course when button-pushing would be just fine), or redefining it (the project needs to produce XML? Oh, ok.. I know, let&apos;s define a stack machine for building XML trees!).&lt;/p&gt;
&lt;p&gt;Sooner or later, a problem comes along that can&apos;t really be made fun: it is irreducibly not-fun, possibly, where adding fun components does nothing to make the irreducible part fun, or there just isn&apos;t enough time (because I&apos;ve already spent the time doing the fun stuff). It&apos;s increasingly obvious that it makes sense to tackle projects regardless of how fun they are, because discipline and planning are so important in getting anything worthwhile done. Sure, I can blow away a weekend starting Friday night and ending Monday morning writing a virtual machine and associated support libraries for an architecture that didn&apos;t exist until I thought of it on the subway ride home Friday evening, but that isn&apos;t really useful. First of all, no one needs a new machine architecture. Most of all, though, nothing else gets attended to in the coding frenzy, and my efficiency goes down as time passes - due to the shakes (nothing but coffee) and deteriorating mental fitness.&lt;/p&gt;
&lt;p&gt;Since I&apos;m well and truly a geek, a geeky solution is called for. For some reason, it makes a lot of sense to think of daily tasks as if they were processes, with one of the processes being a scheduler which prioritizes other processes and has unquestionable authority in doing so. That last part is important, because I tend to get distracted by news articles or little ideas that pop up - nope, not as long as the scheduler insists that high-priority processes are waiting (for the truly cynical: &quot;scheduler&quot; and &quot;girlfriend&quot; are not at all related!).&lt;/p&gt;
&lt;p&gt;Unfortunately, I still have trouble scheduling with any degree of authority, meaning that I successfully identify what needs to be done, develop the intention to do it, and then go off and do something else. It&apos;s more fun, but I feel guilty because I know that higher-priority items are being ignored, and that this is a system that would work really well if I&apos;d just stick to it.&lt;/p&gt;
&lt;p&gt;Human after all! Well, that&apos;s annoying. Obviously, I need practice. However, I am getting better at juggling tasks (timeslices and interrupts), and keeping my mind on the job at hand (memory protection). This could be hazardous too, though: the next time someone needs to know how long I&apos;ll take to do something, I might reply that &lt;a href=&quot;http://en.wikipedia.org/wiki/Halting_problem&quot;&gt;it isn&apos;t determinable&lt;/a&gt;.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/14900.html</comments>
  <category>geek</category>
  <category>funny</category>
  <category>vm</category>
  <category>turing</category>
  <lj:music>Cranberries -- I Still Do</lj:music>
  <media:title type="plain">Cranberries -- I Still Do</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/14807.html</guid>
  <pubDate>Mon, 21 Jul 2008 22:34:39 GMT</pubDate>
  <link>http://dontdothat.livejournal.com/14807.html</link>
  <description>&lt;p&gt;Lately, I&apos;ve been thinking about the behaviour of crowds, both very large and small - people in the subway vs. elevator occupants - and ways of modelling their behaviour, to optimize the availability of services during peak periods. We see time and again the failure of systems to cope with peak demand periods which are far greater than average demand: the release of &lt;a href=&quot;http://apple.ca/iphone/&quot;&gt;a new product&lt;/a&gt;, the &lt;a href=&quot;http://www.ttc.ca/&quot;&gt;morning crush&lt;/a&gt;, or the fact that I have to wait five minutes for the elevator to arrive.&lt;/p&gt;
&lt;p&gt;One of the advantages of working odd and irregular hours is avoiding peak use periods. Even if the subway arrives less frequently, I get to avoid not only the crush of the morning crowd, but the inevitable tension that results when one person moves in a suboptimal way through the station, slowing a hundred (I feel pretty lucky to have seen only one person get roughed up for being discourteous on the subway). Oddly, though, my trip takes more time when it&apos;s off-peak, and I have the feeling that it is less predictable as far as when I arrive at work. I certainly have to allow more time to be punctual.&lt;/p&gt;
&lt;p&gt;I think an improvement would result from something I think of informally as a &quot;hint&quot;. For instance, if I know that I&apos;ll be leaving the apartment to catch the elevator in ten minutes or so, I could send a hint by some means to the elevator, indicating that I&apos;ll be calling it shortly. An idle car might be dispatched to wait at my floor or at least nearby, lessening the wait time. This is just an advisory, though, carrying no requirement that the elevator actually be there, and it would be superseded by an actual push of the call button.&lt;/p&gt;
&lt;p&gt;There would be a lot of privacy concerns implicit in extending a system like this, but it might be useful in scheduling transit as well. The subway has a high enough demand that it makes sense to simply run it at full capacity during peak periods (during which demand may well exceed maximum capacity) but bus service might benefit. I certainly thought so when I had to take a bus to get to and from work. If the transit system could be advised ahead of time of when its users require its services, a lot of fine-tuning would be possible.&lt;/p&gt;
&lt;p&gt;What else? Well, traffic lights could follow along the same lines, with route plans being considered in timing. Again, peak use periods mean that road capacity is fully committed in most cases no matter what fine-tuning is performed. And the idea of optimizing automobile access to roadways doesn&apos;t seem very appealing to me. Much more appealing would be determining when a lane of a major roadway could be dedicated to bicycles, for instance.&lt;/p&gt;
&lt;p&gt;Off to class now... I want to think more about how people act in crowds, compared to schools of fish, flocks of birds, herds of sheep, etc. Stampeding cattle. So forth. How efficient is the movement of people through a mall or subway station? How can it be made more efficient? Is this a simple thing to model, or is it complex?&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/14807.html</comments>
  <category>math</category>
  <category>modelling</category>
  <lj:music>Good Friday -- Why?</lj:music>
  <media:title type="plain">Good Friday -- Why?</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/14478.html</guid>
  <pubDate>Tue, 15 Jul 2008 03:41:42 GMT</pubDate>
  <title>Beautiful things</title>
  <link>http://dontdothat.livejournal.com/14478.html</link>
  <description>&lt;p&gt;I&apos;m feeling a little manic right now, but I think it&apos;s genuine elation. Things are actually going pretty well, and if I sound a little surprised, it&apos;s because I am! School is under control, work is more or less keeping to itself, the home life is good. And as a personal achievement, I&apos;ve gained confidence in my ability to learn and grasp new concepts, thanks to Hofstadter&apos;s &lt;a href=&quot;http://en.wikipedia.org/wiki/G%C3%B6del,_Escher,_Bach&quot;&gt;GEB&lt;/a&gt; and a particularly interesting business law course I&apos;m taking. Credit also to Sacha Chua and &lt;a href=&quot;http://sachachua.com/&quot;&gt;her blog&lt;/a&gt;, which I hold as the standard to strive to in everything blog.&lt;/p&gt;
&lt;p&gt;There&apos;s a side project of sorts I&apos;m taking on as well which, honestly, is fantasy right now. It feels ludicrous to talk about it that way. Actually, there&apos;s nothing substantial about it yet, so let&apos;s leave it at saying that I&apos;ve been spending a lot of time &lt;a href=&quot;http://toronto.craigslist.org/msg/&quot;&gt;here&lt;/a&gt; lately. I don&apos;t care about the outcome or about how long it takes: just doing it, rationalizing, fantasy budgeting, getting excited talking with other people... thinking that just maybe, this could actually happen. Enough said!&lt;/p&gt;
&lt;p&gt;A few real things: I wrote a test today and did just fine. Maybe there isn&apos;t anything remarkable about that, or maybe there is in how I pushed myself a little harder than I usually do during the test - and that surprised me. It&apos;s easy to get used to being lazy. I like that I can feel proud of that performance.&lt;/p&gt;
&lt;p&gt;It&apos;s going to be a busy month: school is finishing (and then starting again in, what, seven weeks or so!), exciting stuff is happening at work - that&apos;s a big secret for now - and I&apos;m heading back to Edmonton in August after over a year away. I played what must have been one of the worst guitars I&apos;ve ever played at Best Buy today and it felt great! I&apos;ve been playing an acoustic for, well, since leaving Edmonton. With visions of performance in my head, holding something that at least looked good was thrilling. I think I got it to sound okay too.&lt;/p&gt;
&lt;p&gt;What more do I need? There&apos;s real movement in my life. I read GEB and it didn&apos;t fade as soon as I put the book down; I learned a proof about prime numbers and I&apos;m beginning to appreciate Goedel&apos;s Incompleteness Theorem (superficially but after a fashion at least). No, I&apos;m not going to switch majors - I doubt any program would have me even if I tried. But: it&apos;s nice to know that I&apos;m where I am out of choice, not out of a lack of choice. I could do it. Someday, maybe I will.&lt;/p&gt;
&lt;p&gt;I&apos;m impatient and I want to keep moving - I&apos;m lusting for life. I&apos;m a little manic, true! But even if that&apos;s what I&apos;m feeling, this sense of movement and momentum is genuine.&lt;/p&gt;
&lt;p&gt;In summary.
&lt;ul&gt;
&lt;li&gt;hey, want to join my band?&lt;/li&gt;
&lt;li&gt;wait - what band?&lt;/li&gt;
&lt;li&gt;you don&apos;t even have a guitar yet?&lt;/li&gt;
&lt;li&gt;are you going to write about anything interesting? Ever?&lt;/li&gt;
&lt;li&gt;&lt;em&gt;you talk a lot.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;yes, I do talk a lot! A lot more than I used to, anyway.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;People are exciting.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;talk to people. Figure out why they do what they do.&lt;/li&gt;
&lt;li&gt;how is it that someone &lt;i&gt;thinks differently&lt;/i&gt;?&lt;/li&gt;
&lt;li&gt;how many ways to think are there exactly?&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;I used to dread talking to people. I got used to it, but I&apos;m not a person who is truly happy in solitude. I know some people are, and I used to think that I was one of them. I like time alone, but it doesn&apos;t exhaust me to talk and be with others - it&apos;s exciting. Even assholes have things to teach you (hey, imagine how much better I&apos;ll be just from taking note of what that idiot is doing and avoiding it religiously!).&lt;/p&gt;
&lt;p&gt;Always learning. Always. Then teaching. And then learning.&lt;/p&gt;
&lt;p&gt;This has been the wrong kind of mystic and thus annoying. I apologize. It&apos;s serving me, somehow, to write it. There will probably be more too. Suffer it for now at least... I promise the music will be danceable. If I ever get a guitar!&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/14478.html</comments>
  <category>introspection</category>
  <category>communication</category>
  <category>mania</category>
  <category>music</category>
  <lj:music>Jig of Life -- Kate Bush</lj:music>
  <media:title type="plain">Jig of Life -- Kate Bush</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/14134.html</guid>
  <pubDate>Mon, 07 Jul 2008 19:54:30 GMT</pubDate>
  <title>No matter how many years, they&apos;re still just days</title>
  <link>http://dontdothat.livejournal.com/14134.html</link>
  <description>&lt;p&gt;It feels a little weird to &lt;a href=&quot;http://www.apple.com/retail/onetoone/&quot;&gt;teach people about blogs&lt;/a&gt; and the amazing things you can do with them, and to not keep mine regularly. Well, if I&apos;m going to successfully avoid a 9-5 existence when school is done, I have a feeling that I&apos;ll need to get into some kind of regular writing schedule. Remember the &lt;a href=&quot;http://www.geekcode.com/&quot;&gt;geek code&lt;/a&gt;? You could encode your interests and tag them with a dollar sign, which translated as &quot;...getting paid for it!&quot; I was a professional, full-time, 9-5 programmer for about half a year. It was more like 8-6 or 10-7, depending, and under no circumstances did I leave work without my laptop, so the day never really ended. I loved every second of it, even as everything creative, artistic, and athletic about me atrophied. &lt;a href=&quot;http://www.jpod.info/&quot;&gt;I don&apos;t think I really want to do that again&lt;/a&gt;. I have two or three years to start doing something else.&lt;/p&gt;
&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;
&lt;p&gt;I&apos;ve fallen into the trap many times of over-analysis - usually as an excuse for laziness, in a roundabout and deniable way, but the end is the same. For instance, and as a common case, deciding that something can&apos;t be done based on how long it&apos;s taken to reach a certain point (the project is 20% done, but a third of available time has been used: insufficient time remains). It might be obvious, but it took me a while to figure out that it isn&apos;t the right way to tackle difficult things.&lt;/p&gt;

&lt;p&gt;When I&apos;m back in that kind of mind, I think about the time that I was tempted to slow down when biking to work because I saw the countdown timer on the green light ahead ticking down to zero. It seemed pretty likely that I wouldn&apos;t make it, but something made me keep going, and I managed to get through and get to work on time. As it happened,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the light stayed green after the timer ran out,&lt;/li&gt;
&lt;li&gt;a tailwind picked up and gave me a boost,&lt;/li&gt;
&lt;li&gt;I didn&apos;t consider that the road was downhill before the light,&lt;/li&gt;
&lt;li&gt;I pedalled harder than I thought I could and went faster for it, and&lt;/li&gt;
&lt;li&gt;the light wasn&apos;t &lt;i&gt;that&lt;/i&gt; red...!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It wasn&apos;t the most elegant or legal trip possible, but it served its purpose well enough: I was on time. I&apos;ve thought back to this little incident many times (although I&apos;ve stopped running red lights and I now leave home on time), and lately I&apos;ve thought of it as a metaphor when doing an assignment or a task at work. It&apos;s easy enough to conclude that something is impossible, but (referring to the list above) #1 shows how assumptions can be wrong, making subsequent logic irrelevant; #2 is an example of conditions assumed static to not be so; #3 was a factor that I didn&apos;t consider, and I bent the rules on #5. So how about #4?&lt;/p&gt;

&lt;p&gt;For me, modesty is a virtue, and just by saying that I feel unvirtuous. Spell check tells me that isn&apos;t a word, but I think my meaning is clear. I don&apos;t know if I believe as much as I used to in modesty, because it can be false and it can lead to underestimating yourself. I think the latter is exactly what I&apos;ve been doing to myself for a long time, and it&apos;s pervasive - it becomes internal, and it stands in the way of doing new things. And it&apos;s so obvious! Why should one extreme be better than its opposite? Why should I embrace modesty as a kind of mortification? Isn&apos;t there something between that and self-aggrandizement? Yeah, maybe there is. Maybe something like a quiet competence, and having enough pride to stand up as a capable and responsible person. That, and not being afraid to push past what I think of as my limits.&lt;/p&gt;

&lt;p&gt;Because if I knew what I could and couldn&apos;t do, then the rest of my life would be largely predetermined and based on external events. It could be cut short, or it might glow in the reflected light of extraordinary people, but it would never be anything remarkable in itself. Anyone in my place would do as well or better, making choices limited by what has come before.&lt;/p&gt;

&lt;p&gt;A precomputed life is pure horror. I&apos;m going to find out just hard I can pedal instead.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/14134.html</comments>
  <category>introspection</category>
  <category>cycling</category>
  <category>blog</category>
  <category>work</category>
  <category>programming</category>
  <lj:music>Churchill -- Vitaminsforyou</lj:music>
  <media:title type="plain">Churchill -- Vitaminsforyou</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/14066.html</guid>
  <pubDate>Sun, 08 Oct 2006 20:29:47 GMT</pubDate>
  <title>The food of tasty death</title>
  <link>http://dontdothat.livejournal.com/14066.html</link>
  <description>&lt;p&gt;Just an after-dinner thought: well, after-lunch. Imagine a food of some sort, I suppose some sort of plant or perhaps some animal product, which is simply the tastiest thing one could ever hope to eat. Okay, so it&apos;s &lt;a href=&quot;http://en.wikipedia.org/wiki/Soylent_green&quot;&gt;soylent green&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And if you eat it, you&apos;re guaranteed to die. In, let&apos;s say, five years.&lt;/p&gt;
&lt;p&gt;This food is indescribably good, literally. You can tell others who haven&apos;t tried it how incredibly good it really is, but no words will do it justice. You can only share in the misery of others who have eaten it too, and now will find no other food palatable, in addition to being guaranteed a soon death.&lt;/p&gt;
&lt;p&gt;I&apos;m sure this is a variation on some kind of common literary device... the closest thing that I can think of is the Greek myth about the fellow who rescues his girlfriend from hell, and ends up losing her in the end because he can&apos;t help but look back at her before coming back to the living world.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/14066.html</comments>
  <lj:music>The Music of Tasty Death</lj:music>
  <media:title type="plain">The Music of Tasty Death</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/13819.html</guid>
  <pubDate>Sun, 13 Aug 2006 20:00:57 GMT</pubDate>
  <title>The other kind of kernel</title>
  <link>http://dontdothat.livejournal.com/13819.html</link>
  <description>&lt;p&gt;&lt;font size=&quot;+5&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Popcorn_%28instrumental%29&quot;&gt;Popcorn.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;-1&quot;&gt;&lt;a href=&quot;http://conanmakespopcorn.ytmnd.com/&quot;&gt;(funnay)&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/13819.html</comments>
  <lj:music>POPCORN</lj:music>
  <media:title type="plain">POPCORN</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/13328.html</guid>
  <pubDate>Tue, 08 Aug 2006 16:42:30 GMT</pubDate>
  <title>Interview: the internet</title>
  <link>http://dontdothat.livejournal.com/13328.html</link>
  <description>&lt;p&gt;&lt;b&gt;Hello, internet&lt;/b&gt;. It&apos;s great to finally be able to speak with you. I understand that I&apos;ll only be able to ask you a series of questions with yes or no answers by phrasing my questions in the manner of paired affirmative and negative statements, and then searching for each statement on Google. For instance:&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;
&lt;span class=&apos;ljuser ljuser-name_dontdothat&apos; lj:user=&apos;dontdothat&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/&apos;&gt;&lt;b&gt;dontdothat&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: do you consider yourself to be alive?
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is alive&amp;quot;&lt;/i&gt;: 953 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is dead&amp;quot;&lt;/i&gt;: 25,600 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is alive with the sound of music&amp;quot;&lt;/i&gt;: 12 results
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/p&gt;
&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;
&lt;p&gt;We can conclude that the internet is neither alive, nor much appreciative of Rodgers and Hammerstein&apos;s oeuvre. I&apos;m already warming up to my subject.&lt;/p&gt;
&lt;p&gt;Let&apos;s backtrack a little. I certainly want to be sure that I&apos;m addressing my subject properly.&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;
&lt;span class=&apos;ljuser ljuser-name_dontdothat&apos; lj:user=&apos;dontdothat&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/&apos;&gt;&lt;b&gt;dontdothat&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: is your name spelled with a capital or lowercase letter I?
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&amp;quot;lowercase I&amp;quot; &amp;quot;internet&amp;quot;&lt;/i&gt;: 19,200 results
&lt;li&gt;&lt;i&gt;&amp;quot;capitalize internet&amp;quot;&lt;/i&gt;: 13,100 results
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;internet&lt;/b&gt; it is! Now, is that Mr. internet, or...&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;&amp;quot;the internet is female&amp;quot;&lt;/i&gt;: 991 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is male&amp;quot;&lt;/i&gt;: 1,080 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet has boobies&amp;quot;&lt;/i&gt;: 83 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is a man&amp;quot;&lt;/i&gt;: 30,500 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is a woman&amp;quot;&lt;/i&gt;: 1,010 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet has no gender&amp;quot;&lt;/i&gt;: 48 results
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;Draw your own conclusions. I&apos;ll try to avoid using pronouns, I guess.&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;&lt;span class=&apos;ljuser ljuser-name_dontdothat&apos; lj:user=&apos;dontdothat&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/&apos;&gt;&lt;b&gt;dontdothat&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: are you fun?&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;&amp;quot;the internet is fun&amp;quot;&lt;/i&gt;: 10,700 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet is boring&amp;quot;&lt;/i&gt;: 9,910 results
&lt;li&gt;&lt;i&gt;&amp;quot;you&apos;re boring&amp;quot;&lt;/i&gt;: 118,000 results
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;On to serious matters. Are you worthwhile? Is there more to the internet than fun?&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;&amp;quot;the internet has much to offer&amp;quot;&lt;/i&gt;: 838 results
&lt;li&gt;&lt;i&gt;&amp;quot;the internet has little to offer&amp;quot;&lt;/i&gt;: 228 results
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;That seems a little easy. Are you being truthful with me?&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&amp;quot;I am telling you the truth&amp;quot;&lt;/i&gt;: 30,200 results
&lt;li&gt;&lt;i&gt;&amp;quot;I am a liar&amp;quot;&lt;/i&gt;: 78,200 results
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;That very much throws into doubt the veracity of anything you tell me.&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&amp;quot;give me another chance&amp;quot;&lt;/i&gt;: 99,600 results
&lt;li&gt;&lt;i&gt;&amp;quot;I am beyond redemption&amp;quot;&lt;/i&gt;: 1,180 results
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;All right. We&apos;ve known each other a long time, after all, haven&apos;t we?&lt;/p&gt;
&lt;p&gt;Frankly, I&apos;m getting bored of this, so I&apos;ll finish with by asking a question whose answer can only furnish entertainment.&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&apos;ljuser ljuser-name_dontdothat&apos; lj:user=&apos;dontdothat&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://dontdothat.livejournal.com/&apos;&gt;&lt;b&gt;dontdothat&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;: internet, is there a God?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&amp;quot;there is a god&amp;quot;&lt;/i&gt;: 1,590,000 results
&lt;li&gt;&lt;i&gt;&amp;quot;god is dead&amp;quot;&lt;/i&gt;: 557,000 results
&lt;li&gt;&lt;i&gt;&amp;quot;there is no god&amp;quot;&lt;/i&gt;: 2,250,000 results
&lt;li&gt;&lt;i&gt;&amp;quot;god is one of us&amp;quot;&lt;/i&gt;: 520 results
&lt;li&gt;&lt;i&gt;&amp;quot;morrissey is god&amp;quot;&lt;/i&gt;: 1,420 results
&lt;li&gt;&lt;i&gt;&amp;quot;morrissey is &lt;b&gt;not&lt;/b&gt; god&amp;quot;&lt;/i&gt;: 136 results
&lt;li&gt;&lt;i&gt;&amp;quot;clapton is god&amp;quot;&lt;/i&gt;: 248,000 results
&lt;li&gt;&lt;i&gt;&amp;quot;god is a slob like one of us&amp;quot;&lt;/i&gt;: 1,010 results
&lt;li&gt;&lt;i&gt;&amp;quot;morrissey was god&amp;quot;&lt;/i&gt;: 85 results
&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;I don&apos;t know. It&apos;s like pulling teeth.&lt;/p&gt;
</description>
  <comments>http://dontdothat.livejournal.com/13328.html</comments>
  <lj:music>The Smiths -- Rusholme Ruffians</lj:music>
  <media:title type="plain">The Smiths -- Rusholme Ruffians</media:title>
  <lj:mood>sophomoric at best</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/13182.html</guid>
  <pubDate>Sun, 06 Aug 2006 02:43:51 GMT</pubDate>
  <title>C`6`H`6`</title>
  <link>http://dontdothat.livejournal.com/13182.html</link>
  <description>&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Benzene&quot;&gt;&lt;img style=&quot;border-width: 2;border-style: dotted;&quot; src=&quot;http://m.4k.ca/multimedia/LJ/Benzene_structure.png&quot; align=&quot;right&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://rammsteinchem.ytmnd.com/&quot;&gt;Rammstein teaches chemistry&lt;/a&gt;&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/13182.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/12996.html</guid>
  <pubDate>Wed, 02 Aug 2006 21:16:46 GMT</pubDate>
  <title>Treadmill: a moment of profound mediocrity (insight)</title>
  <link>http://dontdothat.livejournal.com/12996.html</link>
  <description>&lt;p&gt;&lt;b&gt;&lt;i&gt;updated&lt;/i&gt;&lt;/b&gt; - I think my air resistance conclusion is wrong. It is a factor, but not really the most important one. I think that my first conclusion is accurate though, and that I can safely say that the simulation accuracy of a treadmill goes down as the proportion of time spent with both feet in the air increases. I suspect that this is a little complicated because it can&apos;t be solved by thinking of the treadmill user as a single point the way we did in high school physics. A momentary contact with the treadmill surface might impart acceleration only to the foot or lower leg, for instance, which is easily counteracted while airborne. I feel perfectly happy concluding that a treadmill can only realistically simulate powerwalking, and that treadmill joggers and runners are at least a little deluded. I don&apos;t want to think about inclines right now. Anyway, my original post:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://m.4k.ca/multimedia/link.moon.jpg&quot; align=&quot;left&quot; /&gt;I&apos;ve finally figured out why it is considered &amp;quot;cheating&amp;quot; if you jump while on a treadmill - that is, you spend most of the time with both feet in the air, not in contact with the treadmill surface. A treadmill is most accurate at simulating walking or running if one foot is in contact with its surface at all times. Otherwise, it is more like walking (or running) on the moon.&lt;/p&gt;
&lt;p&gt;(Horizontal) &lt;b&gt;air resistance&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Think about it! (Try to imagine running in a vacuum. If that doesn&apos;t seem straightforward, and I suppose it shouldn&apos;t, imagine running on the moon, except with Earth gravity.)&lt;/p&gt;
&lt;p&gt;I conclude that: if not for air resistance, the most efficient running style would be an extremely long bound, with a vertical launch intended to give adequate but minimal recovery time (given acceleration due to gravity, i.e. time to fall to earth).&lt;/p&gt;
&lt;p&gt;Therefore: this is the most efficient style to employ on a treadmill, which is most accurate at simulating running in a vacuum in Earth gravity. I figured this out intuitively, and my girlfriend did not like it at all.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/12996.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/12729.html</guid>
  <pubDate>Wed, 02 Aug 2006 20:17:59 GMT</pubDate>
  <title>The English call them &quot;crash helmets&quot;</title>
  <link>http://dontdothat.livejournal.com/12729.html</link>
  <description>&lt;p&gt;When &lt;span class=&apos;ljuser ljuser-name_imright&apos; lj:user=&apos;imright&apos; style=&apos;white-space: nowrap; text-decoration: line-through;&apos;&gt;&lt;a href=&apos;http://imright.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://imright.livejournal.com/&apos;&gt;&lt;b&gt;imright&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; was in London last year, he stayed with some friends of the family who had previously hosted our father the last time he visited London - a quarter of a century ago or so. While &lt;span class=&apos;ljuser ljuser-name_imright&apos; lj:user=&apos;imright&apos; style=&apos;white-space: nowrap; text-decoration: line-through;&apos;&gt;&lt;a href=&apos;http://imright.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://imright.livejournal.com/&apos;&gt;&lt;b&gt;imright&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; was there, he raised the notion of cycling in London with his counterpart Paul. Paul is a somewhat non-itinerant fellow, being as he is now middle-aged and has lived in the city all his life.&lt;/p&gt;
&lt;p&gt;His reply was that he didn&apos;t bike anymore - it had become too dangerous.&lt;/p&gt;
&lt;p&gt;&lt;img align=&quot;right&quot; src=&quot;http://m.4k.ca/multimedia/criticalMass.png&quot; /&gt;This anecdote stuck with me since it couldn&apos;t have come from a more ardent Londoner, the last person you&apos;d expect to have a problem with getting around on a bicycle. It isn&apos;t that he&apos;s not fit or anything like that either. &lt;a href=&quot;http://nhsblogdoc.blogspot.com/&quot;&gt;NHS Blog Doc&lt;/a&gt; reached a &lt;a href=&quot;http://nhsblogdoc.blogspot.com/2006/08/do-you-let-children-cycle-on-main.html#links&quot;&gt;similar conclusion&lt;/a&gt; (though for his child, not necessarily for himself), and cited the experiences of &lt;a href=&quot;http://theinjuredcyclist.blogspot.com/&quot;&gt;The Injured Cyclist&lt;/a&gt; - a guy who seems to have suffered a bad injury cycling in downtown London (I&apos;m still reading that one).&lt;/p&gt;
&lt;p&gt;I&apos;ve had a few scrapes while biking, but they&apos;ve been relatively minor and all my own fault. I feel capable of getting anywhere in the city on bike, although it would be a long ride if the destination was north of downtown. I usually travel on the road, even if there isn&apos;t much room between the rightmost lane and the sidewalk. This means that I occupy a lane, which rarely seems to be a problem. There are a few places with high barriers on either side of the road and no sidewalk (Belgravia Road on the way to 114 St. for instance) which I won&apos;t take unless I&apos;m feeling particularly gutsy; no problem, there are alternate routes.&lt;/p&gt;
&lt;p&gt;Regardless of all the precautions I take, whatever experience I have, I am still at the mercy of motorists. My safety level is roughly proportionate to the lowest skill level of any driver I encounter. This is true when I&apos;m driving too, but I stand a better chance of surviving a collision with a car if I&apos;m in a car too.&lt;/p&gt;
&lt;p&gt;Nobody likes sharing the road - be you cyclist, motorist, or pedestrian. People are the safest when they are all moving the same way at about the same speed. In practice, there isn&apos;t always the luxury of choice. Cyclists can&apos;t and don&apos;t want to take sidewalks much of the time, since there isn&apos;t much room and pedestrians are not following road rules (nor should they be expected to). Cars are stuck on the road. Certain &lt;a href=&quot;http://content.calgary.ca/CCA/City+Hall/Business+Units/Transportation+Planning/Transportation+Solutions/Cycling/Bicycle+Friendly+Streets.htm&quot;&gt; enlightened cities&lt;/a&gt; (I never thought I&apos;d describe Calgary that way!) provide roads specifically for bikes, but this a long way from happening in Edmonton. There is a very nice bike path west of 109 St. downtown, which is isolated from traffic and quite pleasant. Unfortunately, it only stretches from the High Level Bridge to Jasper Ave. - though it continues in a diminished form to 104 Ave.&lt;/p&gt;
&lt;p&gt;Cycling has to be an informed decision, based on route, destination, and conditions (weather mainly). The intelligent cyclist must swallow his or her pride at times and take the bus or drive. I don&apos;t think that I&apos;d bike in London. I&apos;ve biked in Toronto and I plan to do so again when I relocate in a few weeks; once I get a bike, that is. I might not take the most direct route to get to wherever I&apos;m going, but we&apos;ll see. I&apos;m aware that the presence of a helmet is helpful only for psychological reasons in many collision contingencies. It also messes up my hair, but I&apos;ve always been a function-over-form sort of guy.&lt;/p&gt;
&lt;p&gt;See you at &lt;a href=&quot;http://www.critical-mass.org/&quot;&gt;Critical Mass&lt;/a&gt; (hah, that would be a first!).&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/12729.html</comments>
  <lj:music>The Arcade Fire -- No Cars Go</lj:music>
  <media:title type="plain">The Arcade Fire -- No Cars Go</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/12334.html</guid>
  <pubDate>Sun, 30 Jul 2006 09:17:02 GMT</pubDate>
  <title>Confessions of a sleep-challenged NERD</title>
  <link>http://dontdothat.livejournal.com/12334.html</link>
  <description>&lt;p&gt;&lt;img align=&quot;left&quot; src=&quot;http://m.4k.ca/multimedia/derfuehrersface5.png&quot; /&gt;Am too spooked to sleep. So I won&apos;t. Screw it. Better to be a little sleepy the next day than to endure the nightmare I&apos;ve been busily imagining. I&apos;ve had some bad ones pretty recently... probably the worst was the one where I decided to kill a bunch of people (it seemed like a good idea at the time), then woke up still believing that I&apos;d done it. It took a long couple of seconds to realize that none of it had happened. That&apos;s a crappy way to start the day, and I felt a bit like &lt;a href=&quot;http://en.wikipedia.org/wiki/Donald_Duck#Wartime_Donald&quot;&gt;Donald Duck&lt;/a&gt; waking up after the nightmare of &amp;quot;&lt;a href=&quot;http://disneyshorts.toonzone.net/years/1943/derfuehrersface.html&quot;&gt;Nutzi Land&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;img align=&quot;right&quot; src=&quot;http://m.4k.ca/multimedia/derfuehrersface6.png&quot; /&gt;Yeah, I scare easy. What can I say? &lt;a href=&quot;http://www.holyshiite.com/caver/&quot;&gt;Ted the Caver&lt;/a&gt; got to me (and &lt;a href=&quot;http://www.dionaea-house.com/default.htm&quot;&gt;The Dionaea House&lt;/a&gt; sealed the deal).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Update [the next day]:&lt;/i&gt;&lt;/b&gt; all is well, I ended up as I usually do - facedown, glasses on, crosswise on my bed. No CAVEDUDE dreams as feared. Star Trek dreams instead. I am a giant nerd.&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/12334.html</comments>
  <lj:music>UNKLE -- Rabbit In Your Headlights</lj:music>
  <media:title type="plain">UNKLE -- Rabbit In Your Headlights</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/12272.html</guid>
  <pubDate>Sat, 15 Jul 2006 16:54:24 GMT</pubDate>
  <title>Medical decisions</title>
  <link>http://dontdothat.livejournal.com/12272.html</link>
  <description>&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Julius_Hibbert&quot;&gt;&lt;img src=&quot;http://m.4k.ca/multimedia/dr_hibbert.png&quot; alt=&quot;Hibbert&quot; style=&quot;border-style:dashed;border-width:2px&quot; /&gt;&lt;/a&gt; &lt;font size=&quot;+4&quot;&gt;vs.&lt;/font&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Dr._Nick_Riviera&quot;&gt;&lt;img src=&quot;http://m.4k.ca/multimedia/dr_nick.png&quot; alt=&quot;Riviera&quot; style=&quot;border-style:dashed;border-width:2px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;&quot;As a profession, we must shed the dark part embodied by Dr. Hibbert - a wasteful, paternalistic and politically incorrect physician. Instead, the physician of the future must cut corners to cut costs, accede to the patient&apos;s every whim and always strive to avoid the coroner.&quot;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p style=&quot;font-family:sans-serif;font-size:smaller&quot;&gt;Patterson R, Weijer C. &lt;i&gt;&lt;a href=&quot;http://www.cmaj.ca/cgi/reprint/159/12/1480.pdf&quot;&gt;D&apos;oh! An analysis of the medical care provided to the family of Homer J. Simpson.&lt;/a&gt;&lt;/i&gt; &lt;a href=&quot;http://www.cmaj.ca/&quot;&gt;CMAJ&lt;/a&gt;. &lt;a href=&quot;http://www.cmaj.ca/content/vol159/issue12/&quot;&gt;1998 Dec 15&lt;/a&gt;;159(12):1480-1. &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;amp;db=pubmed&amp;amp;dopt=Abstract&amp;amp;list_uids=9988570&quot;&gt;PMID 9988570&lt;/a&gt;&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/12272.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/11836.html</guid>
  <pubDate>Tue, 06 Jun 2006 21:24:46 GMT</pubDate>
  <title>64 bytes from dontdothat: icmp_seq=0 time=huge ms</title>
  <link>http://dontdothat.livejournal.com/11836.html</link>
  <description>&lt;p&gt;I don&apos;t remember &lt;a href=&quot;http://video.google.com/videoplay?docid=-2460944945363859076&quot;&gt;this commercial&lt;/a&gt; from Google&apos;s &lt;a href=&quot;http://video.google.com/superbowl.html&quot;&gt;Superbowl commercial&lt;/a&gt; archive - I thought I&apos;d seen them all. Anyway. A little late, but very funny!&lt;/p&gt;
&lt;p&gt;What else... what else... what else. Medical blogs (specifically I suppose blogs written by practitioners and students of medicine) are fascinating for the same reason as medically-themed shows on TV. One of my favourite reads of late deals with an &lt;a href=&quot;http://drcouz.blogspot.com/2006/05/medical-urban-legends-as-medical.html&quot;&gt;urban legend&lt;/a&gt; about an orthopedic resident who worked himself into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Acute_coronary_syndrome#STEMI&quot;&gt;heart attack&lt;/a&gt; - which turns out to be not so legendary after all.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.idlewords.com/about.htm&quot;&gt;Maciej Ceglowski&lt;/a&gt; (whom I&apos;ve referred to &lt;a href=&quot;http://dontdothat.livejournal.com/5775.html&quot;&gt;previously&lt;/a&gt;) writes about a seeming paradox: &lt;a href=&quot;http://www.idlewords.com/2006/06/the_day_that_nothing_happened.htm&quot;&gt;Wal-Mart in China&lt;/a&gt; (specifically Beijing). He advances the point that there are two Chinas, just considering the mainland: wealthy, modern, double-digit growth rate China, and third world China - as he puts it, &quot;Imagine cities in the United States surrounded by rural Mexico and you have the dynamic.&quot; China continues the tradition of arbitrarily handing out Western names to employees serving English speakers that has been so devoutly endorsed by outsourced call centres in India (it wasn&apos;t until I worked in a call centre for a year that I realized there were so many Indians named John, Elizabeth, Ronald, Kate... and these are people who clearly were just learning English). At one point, Maciej&apos;s purchase of bottled water is scanned through by a girl with a nametag labelled &quot;Lonely&quot;. Well, if you&apos;re going to have &quot;Happy&quot;...&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/11836.html</comments>
  <lj:music>Fischerspooner -- The 15th</lj:music>
  <media:title type="plain">Fischerspooner -- The 15th</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dontdothat.livejournal.com/11761.html</guid>
  <pubDate>Wed, 10 May 2006 12:09:31 GMT</pubDate>
  <title>Go ask Alice</title>
  <link>http://dontdothat.livejournal.com/11761.html</link>
  <description>&lt;p&gt;&lt;a href=&quot;http://www.ladiesagainstfeminism.com/&quot;&gt;&lt;font size=&quot;+1&quot;&gt;&lt;b&gt;WAHAHAHAHA&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Linked from &lt;a href=&quot;http://www.homeschooledmedstudent.blog-city.com/do_drugresistant_bacteria_prove_evolution.htm&quot;&gt;Alice&lt;/a&gt;. Man, it is totally okay to mock &lt;a href=&quot;http://en.wikipedia.org/wiki/Calvinism&quot;&gt;Calvinists&lt;/a&gt; and, especially, &lt;a href=&quot;http://en.wikipedia.org/wiki/Theonomist&quot;&gt;theonomy&lt;/a&gt;. I believe Hunter S. Thompson said it best -&lt;/p&gt;
&lt;blockquote&gt;There he goes. One of God&apos;s own prototypes. Some kind of high powered mutant never even considered for mass production. Too weird to live, and too rare to die.&lt;/blockquote&gt;
&lt;p&gt;But, really... anything I say is superfluous. Except maybe a paraphrase: &lt;i&gt;I have chosen insanity; this is my belief, and as it forms the basis of the way in which I reason, such as I do, I cannot imagine sanity. It would be as though you would consider life without sanity.&lt;/i&gt; Is it possible to argue with the deliberately deranged? (I have no major qualms with mainstream religions like scientology so long as their adherents refrain from practicing medicine on me.)&lt;/p&gt;</description>
  <comments>http://dontdothat.livejournal.com/11761.html</comments>
  <lj:music>is for sinners</lj:music>
  <media:title type="plain">is for sinners</media:title>
  <lj:mood>repentant</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
