<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5667255696238653528</id><updated>2012-02-16T03:40:19.393-05:00</updated><title type='text'>Koppology</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>64</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-3599488783069874089</id><published>2012-01-04T12:44:00.001-05:00</published><updated>2012-01-04T12:44:29.472-05:00</updated><title type='text'></title><content type='html'>&lt;a href="http://koppology.tumblr.com/"&gt;New site.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-3599488783069874089?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/3599488783069874089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=3599488783069874089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3599488783069874089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3599488783069874089'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2012/01/new-site.html' title=''/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6543860408088444429</id><published>2010-05-25T02:07:00.009-04:00</published><updated>2010-05-25T02:23:40.007-04:00</updated><title type='text'>last post</title><content type='html'>&lt;p&gt;Well, it's certainly been an eventful year. I've taken seven classes, done three rotations, and made some great friends amongst the biology grad students. Tomorrow I'll be turning over a new page in my life as I join the &lt;a href="http://web.wi.mit.edu/bartel/pub/"&gt;Bartel lab&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;It appears that the comments of this blog are being taken over by digital entities from abroad. As I don't have time to moderate, let alone the time to write my thoughts, I'm going to go ahead and disband this blog. It's been a pleasure. &lt;/p&gt;&lt;p&gt;As a parting note, I just noticed that this blog was cited in PLoS Biology as an example of the benefits of "Open Science." Dear Mike Eisen and company, while I agree with your conclusions on open science, I hope you didn't take me too seriously. &lt;/p&gt;Sincerely, &lt;br /&gt;&lt;a href="http://web.mit.edu/~dnk63/www/"&gt;David&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6543860408088444429?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6543860408088444429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6543860408088444429' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6543860408088444429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6543860408088444429'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2010/05/last-post.html' title='last post'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5116432485216236643</id><published>2009-12-26T21:24:00.001-05:00</published><updated>2009-12-26T21:25:49.070-05:00</updated><title type='text'>a simple puzzle</title><content type='html'>10110110101100011011100110110110101100011011011010101011101110101101111110111000101100111011000010101101101001101101111110111110101010001011111010110110101010111010110011011110&lt;br /&gt;&lt;br /&gt;Hint: (~VAR) &amp; 0xFF;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5116432485216236643?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5116432485216236643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5116432485216236643' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5116432485216236643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5116432485216236643'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/12/simple-puzzle.html' title='a simple puzzle'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1521725007714333881</id><published>2009-12-22T18:06:00.003-05:00</published><updated>2009-12-22T18:16:30.593-05:00</updated><title type='text'>long time no update!</title><content type='html'>It's been a while since I last wrote in here. Since then, I've gone to Australia and back, moved into an MIT dorm, started classes, continued having classes, almost got sunk by systems biology... and made it through the semester! In the process, I've made some good friends amongst the biology first years, especially from hanging out in the Pit (our common area) a fair amount. Now I'm back home for the winter break. &lt;br /&gt;&lt;br /&gt;Next semester promises to even more interesting, with computational biology, algorithms, biophysical chemistry, and... rotations! The big decision of what lab to join awaits. At this point, I still highly undecided as to what kind of lab I want to join. RNA biochemistry, protein structure, computational genomics, cell cycle, evolution... I can't even decide amongst these broader fields, let alone a specific project! Hopefully the faculty talks during IAP (Independent Activities Period) will help in this regard. &lt;br /&gt;&lt;br /&gt;I am also participating in &lt;a href="http://battlecode.mit.edu/2010/info"&gt;the BattleCode competition&lt;/a&gt; with a bunch of biology first years during IAP. We are major underdogs; I'm really excited. Our team name: Course 6++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1521725007714333881?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1521725007714333881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1521725007714333881' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1521725007714333881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1521725007714333881'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/12/long-time-no-update.html' title='long time no update!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8613861323223914975</id><published>2009-08-03T21:41:00.016-04:00</published><updated>2009-08-04T00:56:01.428-04:00</updated><title type='text'>my bloody valentine at all points west!</title><content type='html'>I went to the All Points West music festival in Liberty State Park last Saturday. It was great! I primarily went for &lt;a href="http://en.wikipedia.org/wiki/My_Bloody_Valentine_(band)"&gt;My Bloody Valentine&lt;/a&gt; -- seeing them was like a dream come true because they disbanded shortly after I started listening to them back in the early 90s, and only reunited two years ago. There is only one way to describe their sound -- &lt;i&gt;layers&lt;/i&gt;. &lt;a href="http://en.wikipedia.org/wiki/Kevin_Shields"&gt;Kevin Shields&lt;/a&gt;, the mastermind behind most of their songs, is an amazing instrumentalist, and &lt;a href="http://en.wikipedia.org/wiki/Bilinda_Butcher"&gt;Bilinda Butcher&lt;/a&gt; was incredibly graceful singing the quiet, humble vocals of their guitar-dominated songs. &lt;a href="http://en.wikipedia.org/wiki/Colm_%C3%93_C%C3%ADos%C3%B3ig"&gt;Colm O Ciosoig&lt;/a&gt; is also their secret weapon; he is incredibly skilled at the drums and rattled on the snares like a machine gun. Back in the day, these guys &lt;i&gt;invented&lt;/i&gt; &lt;a href="http://en.wikipedia.org/wiki/Shoegazing"&gt;shoegaze&lt;/a&gt; -- named because the guitarists focus on modulating the vast array of pedal effects at their disposal -- and their album &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Loveless_(album)"&gt;Loveless&lt;/a&gt;&lt;/i&gt; is still one of the most critically acclaimed from the era. Hearing &lt;a href="http://www.youtube.com/watch?v=Lf8j1bUgwJ8"&gt;"Only Shallow"&lt;/a&gt; live was a transcendent, I-have-waited-ten-years-for-this-moment kind of experience that I will not soon forget. &lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3DEnwUAzPG4&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/3DEnwUAzPG4&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Prior to MBV, though, there was a seriously awesome "multi-ethnic gypsy punk band" called &lt;a href="http://en.wikipedia.org/wiki/Gogol_Bordello"&gt;Gogol Bordello&lt;/a&gt;. Man! Those guys were a *lot* of fun and were clearly enjoying themselves, dancing around with cymbals, an electric violin, accordion, kongo drums, and more. The whole crowd of some 30,000 odd people was whipped up into a frenzy by the frontman Eugene Hutz, who has a crazy awesome mustache and antics to match. It was simply an amazing time hearing them, you couldn't help but feel the beat! Also, they have a &lt;a href="http://en.wikipedia.org/wiki/Pamela_Racine"&gt;half-Thai percussionist&lt;/a&gt; who's dating Elijah Wood; rock on half Thais! &lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cWYTyfQe-o8&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/cWYTyfQe-o8&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Now, at this point I've got to get something out of my system. &lt;a href="http://en.wikipedia.org/wiki/Tool_(band)"&gt;Tool&lt;/a&gt; was a lot of fun to watch -- I didn't really listen to their much music prior to this concert, but I definitely enjoyed it. Also, I like the fact that they have a Penrose triangle extended to a nonagon (a pentagram?) as their symbol. Hurray for impossible geometry! The majority of the Tool fans were... however... obnoxious meatheads. When My Bloody Valentine was playing, they were so impatient for Tool that they started shouting "TOOL, TOOL" and giving MBV the finger. At the very end of the MBV performance, in the middle of "You Made Me Realise," MBV did a kind of John Cage-esque move, holding a chord for about 15 minutes. Apparently it's a kind of tradition of theirs affectionately called &lt;a href="http://www.themorningnews.org/digest/watching/the_holocaust_section.php"&gt;"the Holocaust section"&lt;/a&gt; because it sounds like an acoustic armageddon. I'm thinking they held it extra long just as a kind of "screw you" to the Tool fans, but what ensued was very interesting from a mob psychology perspective. Specifically, there was a silent cultural battle between the MBV fans and the Tool fans -- the MBV fans would hold their hands up with palms outstretched or with thumbs up, and the Tool fans would just have their middle finger raised. This is why &lt;a href="http://en.wikipedia.org/wiki/4%E2%80%B233%E2%80%B3"&gt;4'33"&lt;/a&gt; is awesome, by the way; you get to see the underlying crowd sentiments. In the beginning of the chord, there were definitely more middle fingers up, reflecting the numerical dominance of the Tool crowd, but by the end, the Tool fans got tired (because of their beer bellies, perhaps?) whereas the dedicated MBV fans -- myself included -- kept their hands raised for the entire 15 minute episode. Love 'em or hate 'em, I think everyone who was there will remember the legendary Holocaust section.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8613861323223914975?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8613861323223914975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8613861323223914975' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8613861323223914975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8613861323223914975'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/08/all-points-west.html' title='my bloody valentine at all points west!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-7262190231346364815</id><published>2009-07-31T23:54:00.014-04:00</published><updated>2009-08-01T00:50:48.772-04:00</updated><title type='text'>too old for this shit</title><content type='html'>The other day I was wondering what the infinite series 1/1&lt;sup&gt;2&lt;/sup&gt; + 1/2&lt;sup&gt;2&lt;/sup&gt; + ... + 1/n&lt;sup&gt;2&lt;/sup&gt; converges to (for the record, it's &lt;a href="http://en.wikipedia.org/wiki/Basel_problem"&gt;&amp;pi;&lt;sup&gt;2&lt;/sup&gt;/6&lt;/a&gt;). Anyhow, I found an old analysis book and started looking through it to figure this problem out. As I looked through it, I found old scribblings in the margins from my good old days of high school mathematics, and quickly realized that I knew &lt;a href="http://www.xkcd.com/447/"&gt;more mathematics in high school than I do now.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;As a corollary, the other day I ran into my old middle school/high school teacher &lt;a href="http://kateheavers.blogspot.com/"&gt;Kate Heavers&lt;/a&gt; on the train to New York. It was great catching up with her -- to a great extent I owe my love of biology to her, as well as an appreciation for a good work ethic (I only learned the latter, however, in retrospect). We talked about our respective classroom experiences, and about the future. She impressed on me that one's mental faculties decline in the thirties, and that I should therefore take advantage of the coming years. I hope this lesson will not be wasted on me; I intend to suck the marrow out of the next few years to the fullest before calcification sets in. &lt;br /&gt;&lt;br /&gt;By the way, Supermona won our division at Wildwood! Whoo! Here are some pictures. It was great playing and hanging out with the old teammates, although unfortunately much of what I said about math also holds true for my ultimate skills... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos-c.ak.fbcdn.net/hphotos-ak-snc1/hs140.snc1/5968_240982405726_888910726_8074266_1368699_n.jpg" /&gt;&lt;br /&gt;Smacked right in the face! At least he didn't contest the foul. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos-g.ak.fbcdn.net/hphotos-ak-snc1/hs140.snc1/5968_240982440726_888910726_8074270_6409022_n.jpg" /&gt;&lt;br /&gt;Getting a D. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos-e.ak.fbcdn.net/hphotos-ak-snc1/hs160.snc1/5968_240982480726_888910726_8074276_4859958_n.jpg" /&gt;&lt;br /&gt;Raffi's sick layout. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos-c.ak.fbcdn.net/hphotos-ak-snc1/hs160.snc1/5968_240982470726_888910726_8074274_6375708_n.jpg" /&gt;&lt;br /&gt;Sekol bids for it...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos-d.ak.fbcdn.net/hphotos-ak-snc1/hs160.snc1/5968_240982475726_888910726_8074275_2470189_n.jpg" /&gt;&lt;br /&gt;...but misses. Best sequence of photos ever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-7262190231346364815?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/7262190231346364815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=7262190231346364815' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/7262190231346364815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/7262190231346364815'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/youth-lost.html' title='too old for this shit'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5722122263231530631</id><published>2009-07-24T15:17:00.002-04:00</published><updated>2009-07-24T15:19:44.582-04:00</updated><title type='text'>wildwood!</title><content type='html'>There's nothing like a weekend on the Jersey shore playing in the largest beach ultimate tournament in the world with your old college buddies. Get ho!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5722122263231530631?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5722122263231530631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5722122263231530631' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5722122263231530631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5722122263231530631'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/wildwood.html' title='wildwood!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-2596789445104203379</id><published>2009-07-23T14:42:00.006-04:00</published><updated>2009-07-23T15:01:15.110-04:00</updated><title type='text'>case study: swine flu outbreak in a summer camp</title><content type='html'>I recently received an e-mail from a McGill student asking about a swine flu outbreak at a summer camp he's attending. I've copied the correspondence in its entirety, save for his name, for further consideration, criticism, and discussion. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Hi Dave,&lt;br /&gt;&lt;br /&gt;My name is __________. I am a student at McGill University. I found your blog while researching swine flu. I really like your blog...lots of interesting stuff.&lt;br /&gt;&lt;br /&gt;Since you are someone interested in virology and H1N1, I am interested to hear your opinion on a unique situation I am experiencing. I apologize in advance for the somewhat long email but I think you will find it interesting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am currently working as a videographer at an overnight summer camp. While the summer camp is out in the countryside, most campers are from a big city. We have recently had a confirmed swine flu outbreak. The camp scrambled to quarantine campers but within a day or two it was getting out of hand and more and more campers began to come down with the flu. The ministry of health was monitoring us closely and the situation looked dire.&lt;br /&gt;&lt;br /&gt;We then heard of another camp which, upon experiencing a similar scenario, aggressively attacked the disease by, in addition to quarantine measures, putting the entire camp--upwards of 400 people--on Tamiflu. The virus was snuffed out within days, the camp returned to normal and Tamiflu was hailed as the savior of the camp.  Our camp has decided to make the same move and, along with rearranging the living arrangements to quarantine all infected campers to one area of the camp, is also administering a 10-day prophylactic dose of Tamiflu to all campers and staff.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am one of the few in the camp who have not yet taken it, I am hesitant to take it  because of the ethical dilemma of anti-viral resistance--the argument that unneeded administration of the drug when the virus is mild will enduce a dangerous, resistant strain. But I am somewhat confused about this concept and need to understand it a bit better before I make my decision whether to take it or not. Hopefully that is where you can come in!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So that was the background, here is my question:&lt;br /&gt;It is common knowledge that overuse of an anti-viral will produce resistance. But if we use a combination of Tamiflu and quarantine to completely snuff out the virus at camp (we are having a lot of success containing the virus now with this strategy and have 3 weeks left of camp to proceed with it, we have cancelled visitors days and other trips to maintain a camp quarantine etc., so successful containment seems very likely), how are we contributing to anti-viral resistance? In other words, how can our use of Tamiflu have any contribution to the spread of a stronger virus, since this strategy ensures the virus is snuffed out at camp and won't spread beyond our very rural area?&lt;br /&gt;&lt;br /&gt;I understand the conventional wisdom that if we were in a city or town, we could be spreading a tougher, Tamiflu-exposed strain to the public, which would be irresponsible. But at camp, where we are totally secluded and can thus we can wipe out the virus here through the use of anti-virals and quarantining, wouldn't any strengthening effects we have on the virus be extinguished because the virus never leaves the camp site? In other words, it seems that, if done properly, our Tamiflu administration will have no negative impact on anti-viral resistance.&lt;br /&gt;&lt;br /&gt;Clearly I don't understand how, in our unique camp situation, widespread Tamiflu use could promote anti-viral resistance. Does my logic make sense--that is, in your opinion, am I correct in thinking that our administration of Tamiflu will not have a real adverse impact on viral resistance to the drug? Or is my logic is flawed and, if so, how?&lt;br /&gt;&lt;br /&gt;Really hope you can reply and teach me something...this information is really important to me. Sorry again for the long email!&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;&lt;br /&gt;_______________&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Hi ________,&lt;br /&gt;&lt;br /&gt;Thank you for your e-mail. First, I'd like to make it clear that I am not a doctor or at all skilled in public health; my professional interests are molecular in nature and do not pertain to the epidemiological and ethical quandary that you have presented. Please do not take action on my words, and follow any advice you have received from the ministry of health. Also, I laud you for your concern about antiviral drug resistance; it is a profoundly selfless move.&lt;br /&gt;&lt;br /&gt;Let me first present the facts. The CDC and Association of Camp Nurses have issued general guidance with respect to camps:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cdc.gov/h1n1flu/camp.htm"&gt;http://www.cdc.gov/h1n1flu/camp.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.acn.org/healthalert/swineflu.html"&gt;http://www.acn.org/healthalert/swineflu.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You may find these documents useful.&lt;br /&gt;&lt;br /&gt;With respect to your following statement, I'd like to make an important clarification:&lt;br /&gt;&lt;br /&gt;"Our camp has decided to make the same move and, along with rearranging the living arrangements to quarantine all infected campers to one area of the camp, is also administering a 10-day prophylactic dose of Tamiflu to all campers and staff."&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.cdc.gov/h1n1flu/recommendations.htm"&gt;http://www.cdc.gov/h1n1flu/recommendations.htm&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;"For pre-exposure chemoprophylaxis, antiviral medications should be given during the potential exposure period and continued for 10 days after the last known exposure to a person with novel (H1N1) influenza virus infection during the cases infectious period. Oseltamivir can also be used for chemoprophylaxis under the EUA for children less than 1 year of age (see Children Under 1 Year of Age)."&lt;br /&gt;&lt;br /&gt;That is, it may not be enough to administer for just 10 days, but rather must be continued until 10 days after the last person has gotten better. More specifically, this is because&lt;br /&gt;&lt;br /&gt;"With seasonal flu, studies have shown that people may be contagious from one day before they develop symptoms to up to 7 days after they get sick. Children, especially younger children, might potentially be contagious for longer periods."&lt;br /&gt;&lt;br /&gt;(&lt;a href="http://www.cdc.gov/h1n1flu/qa.htm"&gt;http://www.cdc.gov/h1n1flu/qa.htm&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Unfortunately, none of these websites directly address your ethical question about pre-exposure prophylaxis:&lt;br /&gt;&lt;br /&gt;"I am one of the few in the camp who have not yet taken it, I am hesitant to take it  because of the ethical dilemma of anti-viral resistance--the argument that unneeded administration of the drug when the virus is mild will enduce a dangerous, resistant strain. But I am somewhat confused about this concept and need to understand it a bit better before I make my decision whether to take it or not. Hopefully that is where you can come in!"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I dug a bit deeper and found the following paper, published in Clinical Infectious Diseases in 2004:&lt;br /&gt;&lt;a href="http://www.journals.uchicago.edu/doi/pdf/10.1086/598513"&gt;http://www.journals.uchicago.edu/doi/pdf/10.1086/598513&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is an excerpt.&lt;br /&gt;&lt;br /&gt;"Which Residents Should Be Treated with Antiviral Medications during an Outbreak?&lt;br /&gt;&lt;br /&gt;Evidence summary. Little disagreement exists regarding whether residents in institutional settings should receive inﬂu-&lt;br /&gt;enza antiviral chemoprophylaxis in the context of an institutional inﬂuenza outbreak. Observational data [151, 195, 197, 198, 217–221] evidence from randomized trials [219, 222] and recommendations from inﬂuenza experts and medical societies [5, 94, 188, 206, 211, 223, 224] support the use of inﬂuenza antivirals for residents in this setting. Instituting chemoprophylaxis also demonstrates economic beneﬁt for the affected facility [225]. However, antivirals are frequently administered&lt;br /&gt;for chemoprophylaxis only to residents who occupy rooms on an affected ﬂoor or ward. This practice often leads to continuation of the outbreak, with cases occurring on other ﬂoors or wards of the facility after control measures have been imple-&lt;br /&gt;mented on the original unit. In light of this experience, if feasible, facility-wide chemoprophylaxis for all residents, regardless of whether they were previously vaccinated, should occur during the course of the outbreak [5, 214, 218]."&lt;br /&gt;&lt;br /&gt;This is supported elsewhere; indeed, it is abundantly clear that your camp falls into the category of "semiclosed settings" (&lt;a href="http://www.cdc.gov/mmwr/preview/mmwrhtml/rr5707a1.htm"&gt;http://www.cdc.gov/mmwr/preview/mmwrhtml/rr5707a1.htm&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;"In addition to use in nursing homes, chemoprophylaxis also can be considered for controlling influenza outbreaks in other closed or semiclosed settings (e.g., dormitories, correctional facilities, or other settings in which persons live in close proximity). To limit the potential transmission of drug-resistant virus during outbreaks in institutions, whether in chronic or acute-care settings or other closed settings, measures should be taken to reduce contact between persons taking antiviral drugs for treatment and other persons, including those taking chemoprophylaxis."&lt;br /&gt;&lt;br /&gt;In short, I think it best, given that your camp has already decided on this strategy -- a viable move and not without precedent (see &lt;a href="http://www.eurosurveillance.org/ViewArticle.aspx?ArticleId=19263"&gt;http://www.eurosurveillance.org/ViewArticle.aspx?ArticleId=19263&lt;/a&gt;, and of course your own story about the other camp) -- the evidence seems to be that the most ethical thing to do would be to take the Tamiflu. Not doing so would allow for a continued chain of transmission -- not only would it increase your own chances of getting sick, but probably of those around you as well. Given that the camp has decided on this strategy, I think it essential to carry it out to its completion. The most dangerous thing would be for some fraction of people to decide not to take Tamiflu, or worse, for people to start taking it and then stop. These would surely be the best ways for the virus to develop resistance.&lt;br /&gt;&lt;br /&gt;My line of reasoning is derived from the success of DOTS (directly observed therapy: short term) for treating tuberculosis. The idea is that the hospitals actually make appointments with patients to take the drugs, and then actually observe them take each course of antibiotics so that they won't forget and relapse, which has been proven to increase spontaneous drug-resistant mutations compared with observed therapy (see &lt;a href="http://content.nejm.org/cgi/content/full/330/17/1179"&gt;http://content.nejm.org/cgi/content/full/330/17/1179&lt;/a&gt;). That said, I may have to bite my own tongue because unlike tuberculosis drugs, Tamiflu does not actually kill influenza virus, but rather slows its spread between cells, so the analogy may not be 100% accurate. Still, I think a uniform response is better than a fractured one. However, given the empirical success story of the other camp, and given the current circumstances of your own camp, I think this strategy should be carried out to its completion.&lt;br /&gt;&lt;br /&gt;Oseltamivir (Tamiflu) prophylaxis generally has an efficacy rate of approximately 74% (&lt;a href="http://content.nejm.org/cgi/content/short/341/18/1336"&gt;http://content.nejm.org/cgi/content/short/341/18/1336&lt;/a&gt;). Ironically, Tamiflu may be most effective in prophylaxis, since it has to be administered early in infection. You can think about it this way. The influenza virus hemagglutinin binds very tightly to sialic acid receptors -- this is how it enters cells and takes them over. When it has wholly taken the cell over and produced many copies of itself, the new copies explode from the compromised cell. However, the first thing they bind to is the sialic acid receptors of the cell from which they came! In other words, they get "stuck" to the dying cell. To counter this, influenza has evolved neuraminidase, which cleaves the sialic acid from the surface of the cell, allowing it to escape the lysed cell and start infecting other cells. Oseltamivir (Tamiflu) and zanamivir (Relenza) both mimic sialic acid and disable the neuraminidase, preventing intercelllular spreading. However, because oseltamivir and zanamivir are both "competitive inhibitors" -- that is, they bind the active site of neuraminidase and require one molecule per virus particle -- if the concentration of virus is much higher than the concentration of drug, it will be essentially useless. That's why it only works well at early stages, when the virus is still in low enough concentrations that the drug's linear effect can have a significant effect on the exponentially growing virus population.&lt;br /&gt;&lt;br /&gt;To assuage your ethical anxieties, I believe your logic is sound. You are in a rural area and are limiting visitors; this should theoretically be enough to snuff the virus out. However, the moral onus is now on the camp administrators to be completely vigilant and ruthless in enforcing a quarantine of the camp (in my opinion). Social distancing measures within the camp, even amongst the uninfected students, may be applicable: see &lt;a href="http://www.biomedcentral.com/1471-2458/9/117/abstract"&gt;http://www.biomedcentral.com/1471-2458/9/117/abstract&lt;/a&gt;. I am not aware of the living arrangements of your camp, whether any staff members, for example, commute home to family who might then spread the disease or whether there are any other forms of contact with the outside world, for example amongst maintenance workers. These details have hopefully been addressed properly. Furthermore, as has already been stated, children can be contagious for over a week after they recover. Therefore, I think it imperative that strict quarantine measures be maintained at least a week after the last cases have recovered.&lt;br /&gt;&lt;br /&gt;The general use of antiviral prophylaxis in a more dense population, I believe, is much more of an ethically and epidemiologically gray area. Given that oseltamivir-resistant swine flu is already spreading in Asia, I am inclined to believe that some people did not take time to consider the full effects of their actions as you have. Still, there are many ethically gray areas that have arisen because of the influenza virus; I am sure that vaccine priorities will be the next chapter in that particular book.&lt;br /&gt;&lt;br /&gt;Again, these are just thoughts from an idle blogger with only a passive interest in epidemiology, so I implore you again not to take action on my words, but rather to comply with the ministry of health and any other public health experts. With respect to your quandary about taking Tamiflu, however, I think that the ministry of health and I are on the same page. I'd take the Tamiflu if I were you.&lt;br /&gt;&lt;br /&gt;With your permission, I'd like to post this correspondence on my blog for further consideration and discussion.&lt;br /&gt;&lt;br /&gt;Best of luck,&lt;br /&gt;David&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-2596789445104203379?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/2596789445104203379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=2596789445104203379' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2596789445104203379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2596789445104203379'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/swine-flu-correspondence.html' title='case study: swine flu outbreak in a summer camp'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-157534025346700865</id><published>2009-07-19T20:42:00.021-04:00</published><updated>2009-07-20T13:10:34.597-04:00</updated><title type='text'>further thoughts on swine flu</title><content type='html'>Before I post my thoughts on the swine flu pandemic, I'd like to make it clear that I do not intend to be inflammatory or cause fear. I just think pathogens in general and viruses in particular are fascinating and, given the history of our species, should be treated with a healthy dose of respect, and should be understood to the best of our knowledge. I also think that, even if the public health system is able to mitigate the current pandemic, it should be a lesson to all of us that we are in a constant arms race with pathogens, and that we should view this as a dress rehearsal rather than a victory. Just as Microsoft Windows is most targeted by malware because it's the most prevalent operating system, as the human population continues to grow, novel pathogens and parasites will adapt to infect us in a rate somewhat proportional to our numbers. We're just an irresistable food source. &lt;br /&gt;&lt;br /&gt;Anyhow, here are my thoughts: &lt;br /&gt;&lt;br /&gt;1. Tamiflu resistance&lt;br /&gt;&lt;br /&gt;Public health experts have been concerned that the novel swine flu will reassort with other viruses to gain Tamiflu resistance. Well, it seems that it's perfectly capable of doing that by itself. Just from perusing the NCBI GenBank, there are two fully sequenced strains -- (A/Hong Kong/2369/2009(H1N1)) and (A/Osaka/180/2009(H1N1)) -- that have a mutation (H274Y in the neuraminidase gene) that renders resistance to Tamiflu. They are both direct descendants of the original isolates first sequenced in California. &lt;br /&gt;&lt;br /&gt;Interestingly, even though the Hong Kong strain was sequenced earlier than the Osaka strain, it seems that the Hong Kong strain is a direct descendant of the Osaka strain, rather than the other way around. My line of reasoning is as follows. If we consider the original (A/California/04/2009(H1N1)), the Hong Kong, and Osaka sequences, it is evident that the Osaka strain is phylogenetically in between the California and the Hong Kong strains. This is because there are three point mutations in the Osaka strain -- G316A, C823T, and G1044A with respect to the California strain, but there are an additional two mutations in the Hong Kong strain, G873A and A742G. To clarify, we are now considering mutations at the RNA level rather than the H274Y mutation at the protein level. It is easy to see that since every three nucleotides denotes an amino acid, the C823T mutation is the one that is causing the Tamiflu resistance.&lt;br /&gt;&lt;br /&gt;Looking outside of the GenBank resources, it seems there have been other reports of swine flu that are resistant to Tamiflu, most notably in &lt;a href="http://www.nytimes.com/2009/06/30/health/30glob.html"&gt;Denmark&lt;/a&gt;. It is unfortunate that the sequence of this virus was not recovered. Regardless, it is clear that Tamiflu-resistant swine flu is spreading rapidly, and will only be further selected given the rampant and irresponsible use of antiviral drugs. &lt;br /&gt;&lt;br /&gt;2. Relenza &lt;br /&gt;&lt;br /&gt;Given that swine flu is already resistant to the amantadates, Relenza, or zanamivir, seems to be the last antiviral defense. If people continue to use these drugs at the current rate, this is going to go extremely quickly as well. Furthermore, Relenza and Tamiflu have the same mechanism of action, which is to mimic the natural substrate of neuraminidase, sialic acid. Although there seems to also be a distinct subclass of mutations that &lt;a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=90844"&gt;may&lt;/a&gt; confer cross-resistance, fortunately the H274Y is &lt;a href="http://content.nejm.org/cgi/content/full/354/13/1423"&gt;not one of them.&lt;/a&gt; Given the rapidity of the Tamiflu mutation, however, I do not expect swine flu to be susceptible to Relenza for much longer. &lt;br /&gt;&lt;br /&gt;3. The vaccine situation &lt;br /&gt;&lt;br /&gt;It's pretty much a mess. I've already spent time deploring the fact that industry in the US has been replaced with service, and this current situation highlights the reason why this is such a problem. The swine flu manufacturing capabilities in the United States essentially boil down to &lt;a href="http://www.npr.org/templates/story/story.php?storyId=5036908"&gt;two factories&lt;/a&gt; in Pennsylvania run by Sanofi-Pasteur. Although there are others, including Protein Sciences, Novartis, and Baxter, Sanofi-Pasteur is really the only one that has actually made significant quantities of influenza vaccine in the past. Although Sanofi-Pasteur is an excellent company with a rich history, and the world's leading vaccine manufacturer, the twin factories in Pennsylvania can only manufacture approximately 150 million influenza vaccine doses &lt;i&gt;per annum&lt;/i&gt;, whereas the CDC estimates that &lt;a href="http://www.cnn.com/2009/HEALTH/07/01/swine.flu.h1n1.vaccine/index.html"&gt;600 million doses&lt;/a&gt; will be necessary for the United States alone. This problem has been further exacerbated by the fact that the current swine flu virus does not grow well in hen eggs. &lt;br /&gt;&lt;br /&gt;It is an unfortunate reality that vaccine production methods have essentially stagnated. The strategy of reassorting the current virus antigenic proteins (hemagglutinin and neuraminidase) with genes from an attenuated influenza, and then growing it up in hen eggs, has not changed very much in the last 50 years or so. While I applaud Protein Sciences and Novartis for now experimenting with "new" technologies like cell culture and baculovirus protein production, these methodologies, as far as I know, have not been tested in the real world and may have unforeseen problems, as is often the case. &lt;br /&gt;&lt;br /&gt;As an aside, Baxter Pharmaceuticals has an interesting reputation of &lt;a href="http://www.torontosun.com/news/canada/2009/02/27/8560781.html"&gt;accidentally releasing live H5N1 virus in its vaccine less than six months ago&lt;/a&gt;. This might be construed as biological warfare; it is a subtle irony that they are receiving government funds now. &lt;br /&gt;&lt;br /&gt;My comments are mainly aimed to critique the vaccine industry, rather than to discourage people from obtaining a vaccine. On the contrary, I think that refusing vaccination can not only be stupid but can be selfish -- if large numbers of people refuse a vaccine, the herd immunity ratio is effectively lowered and transmission rates can thereby increase. This is, of course, on top of the risk of dying yourself. &lt;br /&gt;&lt;br /&gt;However, it is quite evident to me that the turnaround time between identification of novel pathogen and vaccine production is woefully inadequate, and that innovation is coming too little, too late. This is the age of molecular medicine; you'd think that having the sequences of the viruses in hand would make it a matter of weeks, not months, to create viable vaccines. &lt;br /&gt;&lt;br /&gt;4. Clearing some things up&lt;br /&gt;&lt;br /&gt;"...but the swine flu situation is over, right?"&lt;br /&gt;  Nope; there were &lt;a href="http://www.cdc.gov/h1n1flu/update.htm"&gt;52 deaths&lt;/a&gt; in the United States in the past week alone. If anything, transmission is increasing. It's just that the media is getting bored with it. &lt;br /&gt;&lt;br /&gt;"Why is so much attention being paid to swine flu? It's just fear-mongering by the media. There are tens of thousands of people who die each year of seasonal flu alone!"&lt;br /&gt;  Admittedly fear-mongering in any case seems to be a bad thing. However, the sustained transmission of a novel influenza virus &lt;i&gt;during the summer&lt;/i&gt; is quite worrisome. Most of the seasonal flu deaths occur during flu season. As &lt;a href="http://www.foxnews.com/story/0,2933,533591,00.html"&gt;schools go back into session&lt;/a&gt; and &lt;a href="http://www.plospathogens.org/article/info:doi/10.1371/journal.ppat.0030151"&gt;temperatures drop&lt;/a&gt;, I think flu transmission will skyrocket. &lt;br /&gt;&lt;br /&gt;"Person X who died had an underlying health condition."&lt;br /&gt;  &lt;a href="http://www.lfpress.ca/newsstand/Today/2009/06/19/9850061-sun.html"&gt;This article&lt;/a&gt; does a better job of disparaging this kind of wishful thinking than I ever could.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://newsimg.bbc.co.uk/media/images/46070000/gif/_46070023_swine_flu_rates_16.07.09.gif"&gt;&lt;img src="http://newsimg.bbc.co.uk/media/images/46070000/gif/_46070023_swine_flu_rates_16.07.09.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cdc.gov/flu/weekly/"&gt;&lt;img src="http://www.cdc.gov/flu/weekly/weeklyarchives2008-2009/images/image271.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cdc.gov/flu/weekly/"&gt;&lt;img src="http://www.cdc.gov/flu/weekly/weeklyarchives2008-2009/images/IPD27_small.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. Good papers&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/19574348?ordinalpos=20&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DefaultReportPanel.Pubmed_RVDocSum"&gt;This paper&lt;/a&gt; and &lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/19574347?ordinalpos=21&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DefaultReportPanel.Pubmed_RVDocSum"&gt;this paper&lt;/a&gt; establish that swine flu can replicate efficiently in the lower respiratory system of ferrets, just as the 1919 pandemic virus was able to.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/19516283?ordinalpos=2&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DefaultReportPanel.Pubmed_RVDocSum"&gt;This paper&lt;/a&gt; by Andrew Rambaut et al does an amazing job of conveying the phylogenetic history of the swine flu virus. In particular, they do molecular clock analysis to precisely determine when the current virus originated, they used sophisticated phylogenetic methods, and their trees are probably a lot easier to understand than &lt;a href="http://koppology.blogspot.com/2009/05/swine-flu-phylogeny-part-iii.html"&gt;mine&lt;/a&gt; :).  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/19564633?ordinalpos=1&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DefaultReportPanel.Pubmed_RVDocSum"&gt;This paper&lt;/a&gt; describes the dynamics of virus infection. In particular, these words practically leap from the abstract: &lt;br /&gt;&lt;br /&gt;&lt;i&gt;"During the study period, 87% of deaths and 71% of cases of severe pneumonia involved patients between the ages of 5 and 59 years, as compared with average rates of 17% and 32%, respectively, in that age group during the referent periods... which was reminiscent of past pandemics and suggested relative protection for persons who were exposed to H1N1 strains during childhood before the 1957 pandemic. If resources or vaccine supplies are limited, these findings suggest a rationale for focusing prevention efforts on younger populations."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;As much as I shouldn't say "I told you so," I did suggest this &lt;a href="http://koppology.blogspot.com/2009/05/flu-age.html"&gt;quite a while ago&lt;/a&gt; :). &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/19564631?ordinalpos=2&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DefaultReportPanel.Pubmed_RVDocSum"&gt;This paper&lt;/a&gt; describes the effects of swine flu in medically relevant terms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-157534025346700865?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/157534025346700865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=157534025346700865' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/157534025346700865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/157534025346700865'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/further-thoughts-on-swine-flu.html' title='further thoughts on swine flu'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6004105332175374115</id><published>2009-07-13T13:32:00.006-04:00</published><updated>2009-07-13T19:31:47.397-04:00</updated><title type='text'>an ode to small books</title><content type='html'>For whatever reason, I have found myself to be particularly enamored of small, concise technical books recently. They are terse, yet contain important concepts that must be mulled over in order to be grasped fully. I tip my hat to the authors of these profound works. &lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628"&gt;The C Programming Language&lt;/a&gt;, by Kernighan and Ritchie. &lt;br /&gt;&lt;br /&gt;This goes without saying. Also known as K&amp;R by its devotees and students, it is only 188 pages in length, not including the appendices. K&amp;R has long been heralded as the epitome of technical writing. The writing style is clear, but almost every paragraph contains some nugget of information that must be digested. The exercises are deceptively complex and actually require much thought to write correct programs. Some are still being debated on comp.lang.c, such as the best way to write a decommenting program. I finished reading this a few weeks ago, but am still only about 2/3 of the way through the exercises. &lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://www.amazon.com/Genetic-Switch-Phage-Lambda-Revisited/dp/0879697164"&gt;A Genetic Switch&lt;/a&gt;, by Mark Ptashne. &lt;br /&gt;&lt;br /&gt;An old favorite. I picked it up back in high school to learn more about bacterial RNA polymerase, but have since revisited it on numerous occasions to think about the lambda switch, a fascinating bit of viral machinery that also laid the foundation for quantitative analysis of biological networks. I remember that it came in particularly handy during my biochemistry final -- there was a battery of questions regarding the mechanism of the lambda switch. Needless to say, I received full marks on that section. I hear there is a new edition out now that incorporates recent research -- I look forward to reading it. &lt;br /&gt;&lt;br /&gt;3. &lt;a href="http://www.amazon.com/Introduction-Systems-Biology-Mathematical-Computational/dp/1584886420"&gt;An Introduction to Systems Biology&lt;/a&gt;, by Uri Alon. &lt;br /&gt;&lt;br /&gt;I recently had the good fortune to sit in on a few classes by Professor Emonet at Yale on Systems Biology. Although my time in these classes was curtailed by the looming paper I had to write, Prof. Emonet's lectures 'bootstrapped' me into buying this book, which I then read over the next month or so. The examples are clear and biologically relevant, but like K&amp;R, the exercises are deceptive in their nontriviality. I feel confident talking about Erdos and Renyi random networks, incoherent feed-forward loop pulse generators, and robustness after reading this book.&lt;br /&gt;&lt;br /&gt;4. &lt;a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt;, by Douglas Crockford. &lt;br /&gt;&lt;br /&gt;My Dad pestered me to read this for almost six months. When I finally got around to it, I was frankly surprised -- the author, Douglas Crockford, manages to whittle JavaScript down to essentially Lisp, complete with lambdas, closures, and currying. I have learned more about good programming techniques from this book on what even the author admits to be a flawed language than many expositions on 'better' languages. &lt;br /&gt;&lt;br /&gt;5. &lt;a href="http://www.amazon.com/Course-Mathematics-Cambridge-Mathematical-Library/dp/0521092272"&gt;A Course of Pure Mathematics&lt;/a&gt;, by G.H. Hardy. &lt;br /&gt;&lt;br /&gt;This kind of stretches the definition of a "small book" since it runs over 400 pages, but I will still include it here because it rather resembles a series of expositions on mathematics under one binding. It is certainly dense enough to qualify, however -- I once spent the majority of a winter break trying to comprehend the first 100 pages or so. Although I learned a lot, especially about theorems regarding real and complex numbers, I am sure that I haven't succeeded in fully comprehending even a fraction of the part that I read. &lt;br /&gt;&lt;br /&gt;6. &lt;a href="http://www.amazon.com/Sense-Where-You-Are-Princeton/dp/0374526893"&gt;A Sense of Where You Are&lt;/a&gt;, by John McPhee. &lt;br /&gt;&lt;br /&gt;Wait a minute, I thought you said &lt;i&gt;technical&lt;/i&gt; writings. Yet it feels somehow wrong not to include a work by John McPhee when the stated ideals include clarity, candor, and depth. McPhee elicits nothing short of unbridled admiration towards the subject of the work, Bill Bradley, a basketball player for Princeton and the United States Olympic team. Without mentioning it forthright, however, the profile of Bradley coincides strongly with McPhee's own philosophy towards writing. The unstated ideals of self-discipline, intelligence, attention to detail, structure, and selflessness are all present in not only Bradley's basketball playing but also his own work. If I could choose to write like any extant writer, I wouldn't choose any of the Nobel Laureates or immensely popular novelists -- I'd choose John McPhee.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6004105332175374115?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6004105332175374115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6004105332175374115' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6004105332175374115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6004105332175374115'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/ode-to-small-books.html' title='an ode to small books'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1167672270360241197</id><published>2009-07-09T00:47:00.007-04:00</published><updated>2009-07-09T09:59:00.165-04:00</updated><title type='text'>ennui</title><content type='html'>Although I have been rather enjoying my time relaxing at home, lately I have been getting a bit bored -- you can only go to Barnes and Noble so many times to read books on programming and biology. If you're in the area, definitely give me a call to hang out, I'd love to catch up. If not, this is an appeal for interesting projects towards which I can direct my restive energies. Any ideas? I've been fiddling around with &lt;a href="http://en.wikipedia.org/wiki/C_(programming_language)"&gt;C&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Python_(programming_language)"&gt;Python&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Django_(web_framework)"&gt;Django&lt;/a&gt;, not to mention dabbling in &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;Javascript&lt;/a&gt;, but don't have anything of substance to work on. &lt;br /&gt;&lt;br /&gt;As an aside, &lt;a href="http://en.wikipedia.org/wiki/My_Bloody_Valentine_(band)"&gt;My Bloody Valentine&lt;/a&gt; is back together and is playing in Jersey City on August 1st -- anyone interested in going? They're an old UK band from the 80's but have recently come back together; I don't think there will be another chance to hear them. Once in a lifetime opportunity; come one, come all! &lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/RvCeodRSEdA&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/RvCeodRSEdA&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1167672270360241197?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1167672270360241197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1167672270360241197' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1167672270360241197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1167672270360241197'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/ennui.html' title='ennui'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5712635531584023664</id><published>2009-07-01T12:05:00.005-04:00</published><updated>2009-07-01T12:18:34.593-04:00</updated><title type='text'>never take out your computer's heat sink</title><content type='html'>The other day I noticed my Dell was whirring in a rather strange way, so I dismantled it and took out the fan. In order to get to the fan, I had to remove the heat sink. In order to test the fan, I had to turn the computer on for a few seconds -- just a few seconds, mind you. &lt;br /&gt;&lt;br /&gt;The result? In two seconds, my CPU nearly blew up -- literally. Fortunately, the clever Dell engineers built in an emergency shutdown procedure for thermal overloading. But if they hadn't, this might have happened: &lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xG0sGugsv28&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/xG0sGugsv28&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5712635531584023664?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5712635531584023664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5712635531584023664' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5712635531584023664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5712635531584023664'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/07/never-take-out-your-computers-heat-sink.html' title='never take out your computer&apos;s heat sink'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5962377736998345867</id><published>2009-05-24T01:13:00.004-04:00</published><updated>2009-05-24T01:23:38.800-04:00</updated><title type='text'>Evans vs Machida</title><content type='html'>I just watched this fight with some of the labmates, and man, it was incredible. I've been a fan of Machida since he beat Rich Franklin a while back, and it was great to see how much he's improved. I can hardly even remember a single blow touching him, it was like a work of art. He started off elusive, but struck some incredible high left kicks seemingly from nowhere. Evans, on the other hand, swung wildly and erratically. By varying the tempo, Machida managed to catch Evans off guard and knocked him out with a flurry of punches to capture the championship. &lt;br /&gt;&lt;br /&gt;Not to mention... he's a halfie as well. Just saying. :)&lt;br /&gt;&lt;br /&gt;Also, &lt;a href="http://jessicatina.blogspot.com"&gt;Jess&lt;/a&gt; gets credit for going to her first UFC match and actually enjoying it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5962377736998345867?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5962377736998345867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5962377736998345867' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5962377736998345867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5962377736998345867'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/05/evans-vs-machida.html' title='Evans vs Machida'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5000829073810711244</id><published>2009-05-23T14:55:00.008-04:00</published><updated>2009-05-23T15:19:41.811-04:00</updated><title type='text'>Proof I'm not crazy</title><content type='html'>From the &lt;a href="http://www.sciencemag.org/cgi/content/abstract/1176062v2"&gt;latest Science paper on the swine flu influenza virus&lt;/a&gt;: &lt;br /&gt;&lt;quote&gt;&lt;br /&gt;"The existence of any cross-immunity (perhaps not mediated via hemagglutinin antibodies) from past exposure to prior influenza A subtypes is unknown, but the strong age dependence in clinical attack rates seen in La Gloria is intriguing. Cross-immunity would imply that R0 could be higher in fully susceptible populations than estimated here."&lt;br /&gt;&lt;/quote&gt;&lt;br /&gt;Hurray, I'm not the only one thinking these things! (see two posts ago :) )&lt;br /&gt;&lt;br /&gt;PS -- Don't worry, I will eventually post about other things besides swine flu. Probably at some point I will get back to my usual thoughts about computer science and biology... and maybe even at some point I will post about my personal life! How radical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5000829073810711244?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5000829073810711244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5000829073810711244' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5000829073810711244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5000829073810711244'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/05/proof-im-not-crazy.html' title='Proof I&apos;m not crazy'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-4099366709299176585</id><published>2009-05-20T16:48:00.014-04:00</published><updated>2009-05-21T03:56:51.439-04:00</updated><title type='text'>swine flu phylogeny, part III</title><content type='html'>Sorry for the hiatus -- I've been incredibly busy trying to get this paper I'm working on ready for submission, and haven't had time for blogging. However, about two weeks ago I spent some time making some comprehensive phylogenetic trees that contain representatives of all known influenza A viruses, and show where the swine flu genes fit into this panoramic view. They were inspired by the trees in &lt;a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&amp;pubmedid=19325912&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DiscoveryPanel.Pubmed_RVAbstractPlus&amp;ordinalpos=1"&gt;Liu et al&lt;/a&gt;. Thanks to &lt;a href="http://www.t6.lanl.gov/btf/"&gt;Brian Foley&lt;/a&gt; for showing this review to me.  &lt;br /&gt;&lt;br /&gt;The trees actually are so big that it would be meaningless to try to show them in their entirety, so instead I'm showing some select screenshots and making the files available for download. They are viewable with &lt;a href="http://tree.bio.ed.ac.uk/software/figtree/"&gt;Figtree&lt;/a&gt;, an excellent bit of software written by &lt;a href="http://tree.bio.ed.ac.uk/people/arambaut/"&gt;Andrew Rambaut&lt;/a&gt; who is serendipitously also a leading expert on influenza phylogeny and is maintaining &lt;a href="http://tree.bio.ed.ac.uk/groups/influenza/"&gt;a great webpage on influenza phylogeny&lt;/a&gt; which is much more sophisticated than my amateur attempts. He also seems like a really nice guy as well, I've been corresponding with him a bit. &lt;br /&gt;&lt;br /&gt;If you want the quick summary, this figure, constructed by Gavin Smith et al, is probably the best:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://tree.bio.ed.ac.uk/groups/influenza/wiki/aea97/images/39b02.png", width=512px, height=765px&gt;&lt;br /&gt;&lt;br /&gt;My trees are essentially in agreement with these results. For example, here is a screenshot of the PB2 gene, one of the polymerase subunits. The blue nodes were isolated from swine, and the red node is the novel H1N1 swine flu. As we can see, the gene is significantly divergent from the classical swine flu cluster on the left. This is consistent with the novel swine flu virus being derived from a "triple reassortant" that obtained its PB2 gene from avian flu. In fact, the PA gene shows a similar pattern -- it too is derived from avian flu.  &lt;br /&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/besttrees/PB2_panoramic.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;br /&gt;Genes like neuraminidase, on the other hand, fall into the more canonical swine flu clusters. Incidentally, it is evident that the closest relatives are from Eurasian swine flu, which is also in agreement with the results of Rambaut et al. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/besttrees/NA_panoramic.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;br /&gt;This next one is mostly for fun. It shows the hemagglutinin gene, colored by subtype. Our swine flu is in red, in the middle of the green H1 cluster. Not only is it pretty to look at, but it serves as a kind of sanity check that yes, my trees are in fact doing what they should. Please note that the duplicate colors on opposite ends of the tree are in fact different hemagglutinin subtypes, I just ran out of colors :). &lt;br /&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/besttrees/HA_types_panoramic.png", width=640px, height=640px&gt;&lt;br /&gt;&lt;br /&gt;If you are interested, you can download all of the trees and their associated confidence scores &lt;a href="http://pantheon.yale.edu/~dnk5/besttrees"&gt;here&lt;/a&gt;. The trees follow the naming conventions of the segments, e.g. segment 1 is the PB2 gene. You will need Figtree to view them. Alignments and source code are available upon request. Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-4099366709299176585?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/4099366709299176585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=4099366709299176585' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4099366709299176585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4099366709299176585'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/05/swine-flu-phylogeny-part-iii.html' title='swine flu phylogeny, part III'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8772862895971442353</id><published>2009-05-03T23:25:00.005-04:00</published><updated>2009-05-03T23:55:32.132-04:00</updated><title type='text'>flu &amp; age</title><content type='html'>From the NY Times: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;And unlike the common types of seasonal flu, it appears to infect an unusually high percentage of young people. The median age of patients is 17.&lt;br /&gt;&lt;br /&gt;“Very few confirmed are over 50,” Dr. Schuchat said. “They tend to be younger. Whether it will pan out in the weeks ahead we don’t know, but it is a pattern that looks different from seasonal influenza.” &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Interesting. Perhaps there is some cross-resistance occurring from, for example, the 1978 pandemic virus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8772862895971442353?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8772862895971442353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8772862895971442353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8772862895971442353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8772862895971442353'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/05/flu-age.html' title='flu &amp; age'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-2973346288711975362</id><published>2009-05-02T00:07:00.000-04:00</published><updated>2009-05-02T00:08:04.116-04:00</updated><title type='text'>useful resource</title><content type='html'>This is a useful resource for those doing some flu-hunting: &lt;br /&gt;&lt;br /&gt;ftp://ftp.ncbi.nih.gov/genomes/INFLUENZA/README&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-2973346288711975362?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/2973346288711975362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=2973346288711975362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2973346288711975362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2973346288711975362'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/05/useful-resource.html' title='useful resource'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6368353325849868702</id><published>2009-04-29T15:34:00.012-04:00</published><updated>2009-07-22T11:13:35.768-04:00</updated><title type='text'>swine flu phylogeny, part II</title><content type='html'>NB: I have since created better trees, available &lt;a href="http://koppology.blogspot.com/2009/05/swine-flu-phylogeny-part-iii.html"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;A second attempt at making phylogenetic trees. This time, I used all of the published genes from the &lt;a href="http://www.ncbi.nlm.nih.gov/genomes/FLU/SwineFlu.html"&gt;(A/California/04/2009(H1N1))&lt;/a&gt; sequence. NB: I used the nucleotide sequences, and did not factor nonsynonymous vs. synonymous mutations, for example. This is very much still a "first pass," and I'd definitely appreciate feedback.  &lt;br /&gt;&lt;br /&gt;A few tentative conclusions: &lt;br /&gt;&lt;br /&gt;1. It seems to me that this virus may be a product of antigenic shift. For example, the hemagglutinin gene and the nuclear export/nonstructural genes seem to cluster with a lot of H1N2 variants. &lt;br /&gt;&lt;br /&gt;2. It seems to me that this virus consistently falls into its own sub-clade. However, I think it's too early to jump to the conclusion that this is a "radical new virus." Specifically, this may have to do with the lack of granularity of data from Central America. I think that swine flus from the United States are much more commonly isolated and sequenced than those in Central America. We are probably just missing the intermediates, since no-one bothered to go find it in Mexico. But hey, that's what phylogenetics is for, right? &lt;br /&gt;&lt;br /&gt;3. My neuraminidase tree seems to agree with the conclusions that experts have come up with in &lt;a href="http://www.wired.com/wiredscience/2009/04/swinefluupdate/"&gt;this article&lt;/a&gt;. Specifically, they found that it's closest to NA sequences from Eurasian swine flu. That makes me feel a bit more confident about my trees. :) &lt;br /&gt;&lt;br /&gt;A bit more about my methods: &lt;br /&gt;&lt;br /&gt;I used a variant of a program called "endophyutility" that Justin Jee, Jeffrey Huang, and I programmed up during our summer research on endophytic microorganisms. Endophyutility (or perhaps "endoflutility" now?) is a perl script that glues several components together for phylogenetic analysis. &lt;br /&gt;&lt;br /&gt;1. It &lt;a href="http://blast.ncbi.nlm.nih.gov/Blast.cgi"&gt;BLASTs&lt;/a&gt; for the 100 most similar sequences to the query. &lt;br /&gt;2. Using &lt;a href="http://genome.ucsc.edu/cgi-bin/hgBlat?command=start"&gt;BLAT&lt;/a&gt;, it makes sure that the BLASTed sequences are of the same strand. &lt;br /&gt;3. Alignment is then done using &lt;a href="http://www.drive5.com/muscle/"&gt;muscle&lt;/a&gt;. &lt;br /&gt;4. It uses &lt;a href="http://code.google.com/p/phyutility/"&gt;phyutility&lt;/a&gt; to clean and post-process the sequences. &lt;br /&gt;5. &lt;a href="http://icwww.epfl.ch/~stamatak/index-Dateien/Page443.htm"&gt;RAxML&lt;/a&gt; is used to build the tree using maximum likelihood. &lt;br /&gt;6. &lt;a href="http://tree.bio.ed.ac.uk/software/figtree/"&gt;Figtree&lt;/a&gt; is used to view the results. &lt;br /&gt;&lt;br /&gt;If you'd like the source code I can make it available, with permission from Justin and Jeff. It's kind of ad hoc though. &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;b&gt;PB2&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/PB2.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/PB2.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;PB1&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/PB1.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/PB1.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;PA&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/PA.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/PA.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;HA&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/HA.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/HA.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;NP&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/NP.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/NP.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;NA&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/NA.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/NA.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;MP&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/MP.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/MP.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;NS&lt;/b&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/NS.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/NS.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6368353325849868702?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6368353325849868702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6368353325849868702' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6368353325849868702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6368353325849868702'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/swine-flu-phylogeny-part-ii.html' title='swine flu phylogeny, part II'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1638890137273377971</id><published>2009-04-29T14:49:00.012-04:00</published><updated>2009-07-22T11:13:03.257-04:00</updated><title type='text'>swine flu phylogeny</title><content type='html'>NB: I have since created better phylogenetic trees, available &lt;a href="http://koppology.blogspot.com/2009/05/swine-flu-phylogeny-part-iii.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is a first attempt at recreating the phylogeny of the current swine flu virus, based off of its neuraminidase gene. &lt;br /&gt;&lt;br /&gt;Marked with arrows are the 1918 NA sequence from Taubenberger et al and the NA gene sequences from recent efforts to sequence. &lt;br /&gt;&lt;br /&gt;Enjoy. &lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://pantheon.yale.edu/~dnk5/Cal04/neuraminidase_phylo.png"&gt;&lt;br /&gt;&lt;img src="http://pantheon.yale.edu/~dnk5/Cal04/neuraminidase_phylo.png", width=640px, height=460px&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1638890137273377971?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1638890137273377971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1638890137273377971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1638890137273377971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1638890137273377971'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/swine-flu-phylogeny.html' title='swine flu phylogeny'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-9040788215497502974</id><published>2009-04-28T13:19:00.001-04:00</published><updated>2009-04-28T13:21:19.259-04:00</updated><title type='text'>obligatory</title><content type='html'>&lt;center&gt;&lt;script type="text/javascript" src="http://transparency.cit.nih.gov/widgets/swinelinks.cfm?javascript"&gt;&lt;/script&gt; &lt;noscript&gt; &lt;iframe src="http://transparency.cit.nih.gov/widgets/swinelinks.cfm" name="swineframe" frameborder=0 id="swineframe" scrolling="no" height="160" width="198" marginheight="0" marginwidth="0" &gt;Swine Flu Info&lt;/iframe&gt; &lt;/noscript&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-9040788215497502974?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/9040788215497502974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=9040788215497502974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/9040788215497502974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/9040788215497502974'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/obligatory.html' title='obligatory'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8900132490983596571</id><published>2009-04-28T13:15:00.002-04:00</published><updated>2009-04-28T13:22:15.613-04:00</updated><title type='text'>e-mail transcript</title><content type='html'>Hey Ying,&lt;br /&gt;&lt;br /&gt;Xiao, Ying wrote:&lt;br /&gt;&gt; I'm thinking that the phase transition we talked about last night is&lt;br /&gt;&gt; just an artifact of the model...the model you described is basically&lt;br /&gt;&gt; just multiplicative in time, so yes, of course we're going to get O(n)&lt;br /&gt;&gt; and O(2^n) growth as the only two possible alternatives.&lt;br /&gt;&gt;&lt;br /&gt;&gt; But I don't believe that a graph with lower connectivity would be able&lt;br /&gt;&gt; to support the exponential growth. Proximity/locality must certainly&lt;br /&gt;&gt; throttle that exponential.&lt;br /&gt;&gt;&lt;br /&gt;&gt;   &lt;br /&gt;You're right, if you're assuming that the graph is static over time. The problem as I see it is that the graph is actually very, very dynamic, and you essentially have to take the cumulative connectivity over time to see the true connectivity.&lt;br /&gt;&lt;br /&gt;&gt; Is the wave effect a result of some change in the genetic makeup of the&lt;br /&gt;&gt; virus, or is it due to the underlying dynamics of virus propagation?&lt;br /&gt;&gt;   &lt;br /&gt;I suspect mostly the latter -- see attached:&lt;br /&gt;&lt;br /&gt;http://www.ncbi.nlm.nih.gov/sites/entrez&lt;br /&gt;&lt;br /&gt;However, you do raise a good point about the genetic makeup of the virus.&lt;br /&gt;&lt;br /&gt;To explain this further, let me make an analogy to something you'll get very quickly :)&lt;br /&gt;&lt;br /&gt;Viruses are like greedy algorithms. They do not have foresight, they just evolve to do what's best at the next point in time for them. Indeed, when a novel virus that has *just* adapted to humans comes across a completely naive population, the long term solution is to simply lay low and establish a stable parasitic relationship. Indeed, this is what most viruses do in the long run -- think about how most successful pathogens work: chickenpox, herpes, Epstein-Barr virus, etc. These don't kill us, but rather lie latent within us. As an aside, I suspect that most of our genomic DNA are, in fact, some of the most successful human pathogens in the world.&lt;br /&gt;&lt;br /&gt;See, the problem with killing your host is that you don't have anywhere to go afterwards. You burn yourself out.&lt;br /&gt;&lt;br /&gt;But that's not what viruses do. They only evolve for the next point in time. And at the point when a virus breaks upon a naive population, the most successful thing to do for it *at that point in time* is to become hyper-virulent, because *that will actually increase its R value, the rate of transmission.* It may only be a slight increase in R, but it's a selection pressure, and these viruses evolve rapidly. At any rate, it is certain that there is a lack of selection pressure to *not* be virulent. As the virus burns through the population, leaving only dead and immune people, it becomes in the virus's favor to then switch strategies and become less virulent, to lie low.&lt;br /&gt;&lt;br /&gt;At least, that's what I'd do if I were a virus. And I think it matches the historical data pretty well.&lt;br /&gt;&lt;br /&gt;David&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8900132490983596571?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8900132490983596571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8900132490983596571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8900132490983596571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8900132490983596571'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/e-mail-transcript.html' title='e-mail transcript'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6183171923871707403</id><published>2009-04-28T09:41:00.006-04:00</published><updated>2009-04-28T10:03:54.421-04:00</updated><title type='text'>waves</title><content type='html'>It will come in waves: &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cdc.gov/ncidod/eid/vol12no01/images/05-0979_1b.gif"&gt;&lt;br /&gt;&lt;br /&gt;I've been trying very hard to increase the granularity of the data through various sources, but my guess is that each individual wave can be decomposed into sub-waves, until you get to *roughly* the level of the incubation period of the virus. Unfortunately, people tend to like continuous mathematics, missing the finer details of the discrete individual cases. &lt;br /&gt;&lt;br /&gt;I am actually very jealous of those schoolchildren who have already been infected in New York. They got off &lt;a href="http://www.cidrap.umn.edu/cidrap/content/influenza/panflu/news/oct0208waves-jw.html"&gt;easy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Winter will be the &lt;a href="http://news.bbc.co.uk/1/hi/health/7276447.stm"&gt;hardest&lt;/a&gt; to get through.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6183171923871707403?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6183171923871707403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6183171923871707403' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6183171923871707403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6183171923871707403'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/waves.html' title='waves'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1718543194936687138</id><published>2009-04-27T14:50:00.004-04:00</published><updated>2009-04-28T01:28:12.937-04:00</updated><title type='text'>get a pneumonia shot</title><content type='html'>Most of the deaths in 1919 were from secondary bacterial pneumonia. Go get a pneumonia shot at a &lt;a href="http://minuteclinic.com/en/USA/"&gt;Minute Clinic&lt;/a&gt;. I'm getting one tomorrow.&lt;br /&gt;&lt;br /&gt;edit: &lt;br /&gt;&lt;br /&gt;Damned bureaucracy, they'll only give it to people over 50 years of age.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1718543194936687138?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1718543194936687138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1718543194936687138' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1718543194936687138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1718543194936687138'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/get-pneumonia-shot.html' title='get a pneumonia shot'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8849076047871994382</id><published>2009-04-25T12:26:00.002-04:00</published><updated>2009-04-25T12:50:29.346-04:00</updated><title type='text'>swine flu</title><content type='html'>I have been following the swine flu development in Mexico with great interest and a healthy dose of fear. &lt;br /&gt;&lt;br /&gt;Specifically, I am concerned because: &lt;br /&gt;&lt;br /&gt;- It has already made its way into the United States&lt;br /&gt;&lt;br /&gt;- Swine are actually the ideal transmission vector for influenza to humans. There is a bit of biochemistry behind this: swine influenza hemagglutinin (HA, that's the H in H5N1) has an affinity for both alpha-2,3 and alpha-2,6 sialic acid. Humans have the alpha-2,6 sialic acid, and birds have the alpha-2,3 sialic acid. Therefore, swine are thought to be the "hub" between the two. If the virus has adapted to pigs, it is likely that it will spread more easily in another mammalian host, i.e., humans. &lt;br /&gt;&lt;br /&gt;- The subtype of this swine flu is H1N1. That is the same subtype as the great influenza pandemic of 1919 that killed between 20 and 40 million people . &lt;br /&gt;&lt;br /&gt;- The people who have died are almost all young adults. This is also consistent with the mortality histogram of the great influenza pandemic. Usually, when young adults die from influenza, it is because of a so-called "cytokine storm," wherein influenza essentially overprovokes the immune system into killing the host. &lt;br /&gt;&lt;br /&gt;Before this, I would have hazarded a guess that the next influenza pandemic to hit would be H2N2, in ~2022 A.D. This is based off of a very astute observation that &lt;a href="http://en.wikipedia.org/wiki/Maurice_Hilleman"&gt;Maurice Hilleman&lt;/a&gt; made, that influenza pandemics tend to repeat themselves every 65 years or so, since that is the time that it takes, on average, for one generation of people to die off and be replaced with a new generation that has never been exposed to the virus. The last major H2N2 outbreak was the Asian Flu pandemic of 1957, so add 65, and you get 2022. &lt;br /&gt;&lt;br /&gt;That being said, H1N1 is very scary. Also, the world's population has been exploding in recent years. Although the average generation turnover time is 65 years or so, the problem is that pandemics tend to erupt *when a threshold is passed in the concentration of humans without immunity*. Let me explain this a bit further. &lt;br /&gt;&lt;br /&gt;Let us consider the following scenario. There exists some population of people, and 90% of them are immune to the flu. Let's say one person contracts the flu, and on average, each person might spread the flu to 10 more people (I'm making these numbers up). However, since 90% of people in this population are immune, nine of those ten people will be immune, and the virus will only spread linearly, instead of exponentially -- it is therefore easy to be contained, and very likely to fizzle out on its own. This is known as &lt;a href="http://en.wikipedia.org/wiki/Herd_immunity"&gt;herd immunity&lt;/a&gt; in epidemiological circles. For smallpox, the herd immunity threshold is, for example, 84%. &lt;br /&gt;&lt;br /&gt;The problem now, however, is that when population growth curves look like &lt;a href="http://upload.wikimedia.org/wikipedia/commons/b/b7/Population_curve.svg"&gt;this&lt;/a&gt;, that we are essentially adding a big number to the denominator of the herd immunity ratio. And I suspect we are already past the threshold.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8849076047871994382?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8849076047871994382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8849076047871994382' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8849076047871994382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8849076047871994382'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/swine-flu.html' title='swine flu'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-3205087577459652166</id><published>2009-04-23T20:15:00.003-04:00</published><updated>2009-04-23T20:19:48.297-04:00</updated><title type='text'>AgnostOS</title><content type='html'>I just came up with the best name for a Linux distro ever -- AgnostOS. Kind of a pun on  CentOS. Also it means "unknowable" in Greek. Basically it would be "agnostic" in its package management, systems administration, etcetera. None of this .deb, .rpm, .tgz nonsense. &lt;br /&gt;&lt;br /&gt;Don't you even think of stealing it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-3205087577459652166?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/3205087577459652166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=3205087577459652166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3205087577459652166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3205087577459652166'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/agnostos.html' title='AgnostOS'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-3566783551706445678</id><published>2009-04-22T19:38:00.005-04:00</published><updated>2009-04-22T19:48:16.587-04:00</updated><title type='text'>package managers and EWOK</title><content type='html'>I have a long rant on package management and UNIX crap in the making, but I shouldn't rant without first coming up with something of my own. So &lt;a href="http://pantheon.yale.edu/~dnk5/ewok.py"&gt;here's a short Python script called EWOK&lt;/a&gt; (short for ewok) that I wrote. It's my first real Python script. &lt;br /&gt;&lt;br /&gt;In retrospect it's actually very similar to &lt;a href="http://www.gnu.org/software/stow/"&gt;GNU Stow&lt;/a&gt; but operates in a manner that I like more. In a nutshell, it keeps programs in its own folder, like ~/ewok/{program}, and then symlinks to ~/bin, ~/lib, etc, making things much more manageable. &lt;br /&gt;&lt;br /&gt;In the future I'd like to somehow integrate this with version control systems, but right now it's just a fun hack.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-3566783551706445678?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/3566783551706445678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=3566783551706445678' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3566783551706445678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3566783551706445678'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/package-managers-and-ewok.html' title='package managers and EWOK'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8640935396584991790</id><published>2009-04-07T21:07:00.001-04:00</published><updated>2009-04-07T21:07:34.909-04:00</updated><title type='text'>always precompile your PCRE regular expressions</title><content type='html'>Just do it&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8640935396584991790?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8640935396584991790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8640935396584991790' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8640935396584991790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8640935396584991790'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/always-precompile-your-pcre-regular.html' title='always precompile your PCRE regular expressions'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1761588867781192379</id><published>2009-04-07T15:56:00.002-04:00</published><updated>2009-04-07T15:56:51.914-04:00</updated><title type='text'>scientific figures</title><content type='html'>It is always good to export figures as .eps and keep them in a directory for reference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1761588867781192379?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1761588867781192379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1761588867781192379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1761588867781192379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1761588867781192379'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/scientific-figures.html' title='scientific figures'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6493667089022893478</id><published>2009-04-05T19:35:00.005-04:00</published><updated>2009-04-05T20:05:58.175-04:00</updated><title type='text'>LaTeX et al</title><content type='html'>I'm in the middle of writing a paper on transcriptomic analysis with several co-authors. At some point, the frustration of trying to merge Microsoft Word documents from multiple people simultaneously got the best of us, so I set about converting the paper to &lt;a href="http://www.latex-project.org/"&gt;LaTeX&lt;/a&gt; and set up a &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; repository. This way, we can keep track of changes easily and, since git is a &lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control"&gt;distributed version control system&lt;/a&gt;, we can all edit the files simultaneously and happily merge them at the end. &lt;br /&gt;&lt;br /&gt;Writing in LaTeX is significantly different from writing in Word, since it's a typesetting language rather than a WYSIWYG editor. There are several advantages: &lt;br /&gt;&lt;br /&gt;1. It's a plain text file, so you can do diffs on it (see above). &lt;br /&gt;2. It makes writing mathematical formulas incredibly easy. &lt;br /&gt;3. It looks really nice. &lt;br /&gt;4. It has its own reference format (BibTex) which is very flexible and allows you to import citations easily from, say, &lt;a href="http://www.citeulike.org/"&gt;CiteULike&lt;/a&gt;. &lt;br /&gt;5. It allows for modular document writing, since you can just \include or \includegraphics other tex files or eps files. &lt;br /&gt;&lt;br /&gt;However, just from the get-go, there are also a few things that are somewhat annoying: &lt;br /&gt;&lt;br /&gt;1. The endless compile-view-hack cycle. &lt;br /&gt;2. Cryptic, uninformative error messages. &lt;br /&gt;3. In order to compile BibTex and eps figures, you need to do the following at the command line:&lt;br /&gt;&lt;br /&gt;latex yourfile&lt;br /&gt;bibtex yourfile&lt;br /&gt;latex yourfile &lt;br /&gt;latex yourfile&lt;br /&gt;dvips -Ppdf yourfile&lt;br /&gt;open yourfile.ps&lt;br /&gt;&lt;br /&gt;At some point I am going to really figure out elisp and write myself an emacs function to do all this, but for now bash will have to do. &lt;br /&gt;&lt;br /&gt;Some fun goodies: &lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;Linus Torvalds on git, and why cvs/svn users are ugly and stupid&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=JPpk-1btGZk"&gt;Donald Knuth, the creator TeX, and generally awesome computer scientist&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apologies for all the technical stuff that has been posted on this blog recently. I do have a life outside of this. I've actually been in the process of writing a long wandering entry on evolution, mixed heritage, plagues, speciation, cultural identity, computer viruses, and killer whales, but I haven't gotten it to make sense yet. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6493667089022893478?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6493667089022893478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6493667089022893478' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6493667089022893478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6493667089022893478'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/latex-et-al.html' title='LaTeX et al'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5255900054254635094</id><published>2009-04-03T12:54:00.002-04:00</published><updated>2009-04-03T12:57:00.428-04:00</updated><title type='text'>Unix for Bioinformaticians</title><content type='html'>&lt;a href="http://www.sanger.ac.uk/Users/lh3/biounix.shtml"&gt;This&lt;/a&gt; is an incredibly useful introduction to Unix for bioinformaticians, written by the author of &lt;a href="http://maq.sourceforge.net/"&gt;MAQ&lt;/a&gt;. It has recently been saving me a lot of time, so I just wanted to put it out there. Thank you Heng Li!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5255900054254635094?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5255900054254635094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5255900054254635094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5255900054254635094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5255900054254635094'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/unix-for-bioinformaticians.html' title='Unix for Bioinformaticians'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8747768454908977913</id><published>2009-04-02T21:38:00.003-04:00</published><updated>2009-04-02T23:29:55.952-04:00</updated><title type='text'>MIT!</title><content type='html'>&lt;center&gt;&lt;i&gt;e to the u, du dx, e to the x, dx;&lt;br /&gt;cosine, secant, tangent, sine, 3.14159;&lt;br /&gt;integral, radical, mu, dv;&lt;br /&gt;slipstick, sliderule, MIT!&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;I just submitted my acceptance form to the MIT biology department! I'm really excited to have the chance &lt;a href="http://web.mit.edu/biology/www/facultyareas/facresearch/gilbert.html"&gt;to&lt;/a&gt; &lt;a href="http://web.wi.mit.edu/bartel/pub/"&gt;study&lt;/a&gt; &lt;a href="http://www.broad.mit.edu/about/bios/bio-regev.html"&gt;with&lt;/a&gt; &lt;a href="http://genes.mit.edu/burgelab/"&gt;some&lt;/a&gt; &lt;a href="http://mit.edu/manoli/"&gt;amazing&lt;/a&gt; &lt;a href="http://www.wi.mit.edu/research/faculty/reddien.html"&gt;principal&lt;/a&gt; &lt;a href="http://web.mit.edu/biology/www/facultyareas/facresearch/laub.html"&gt;investigators&lt;/a&gt; and live in Boston. &lt;br /&gt;&lt;br /&gt;At this juncture, I'd like to stress the incredible irony (or was it fate?) that &lt;a href="http://www.xanga.com/chrisvanlang"&gt;Chris&lt;/a&gt; and I created a facebook group in freshman year entitled "Arrrrgh, why am I not at MIT?!". Chris wrote the description: &lt;br /&gt;&lt;br /&gt;'So chances are you're having fun in your lab. Meanwhile, at the rate that you're going, you are going to have exactly 12 non group IV classes and 30 science classes. I mean, it's really hard to get that double major in MBB &amp; EE while fulfilling your interests in Dirac's Equation. After all, you need to take those labs to get into Med School. So, as you are working on your 5th problem set of the week concerning discrete math, while your computer is scanning information from SETI, think,&lt;br /&gt;&lt;br /&gt;"ARRRRG! Why am I not at MIT?"'&lt;br /&gt;&lt;br /&gt;I guess I am getting my chance after all. &lt;br /&gt;&lt;br /&gt;Now to learn all of the math/cs that I never learned...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8747768454908977913?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8747768454908977913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8747768454908977913' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8747768454908977913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8747768454908977913'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/04/mit.html' title='MIT!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8707496746897712490</id><published>2009-03-30T23:11:00.004-04:00</published><updated>2009-03-31T00:03:04.884-04:00</updated><title type='text'>Python</title><content type='html'>As much as I love Ocaml, I've always wondered what it'd be like to actually have a standard library that supports day-to-day programming (when &lt;a href="http://batteries.forge.ocamlcore.org/"&gt;Batteries&lt;/a&gt; comes out with a good release maybe I will change my mind). Therefore, I am trying my hand at &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt;. I'll post my thoughts after I've given it a good test drive. &lt;br /&gt;&lt;br /&gt;As a side note, I am getting somewhat weary of looking at different linux distros, different programming languages, etc. Yes, there is some beauty in the minimalism of Slackware or the brevity of Python, but there are &lt;a href="http://xkcd.com/263/"&gt;more universal truths&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;As another side note, &lt;a href="http://books.google.com/books?id=pAUdPQlCZ54C&amp;dq=introduction+to+systems+biology&amp;printsec=frontcover&amp;source=bn&amp;hl=en&amp;ei=B5XRSa-GK9rtlQey9c2UBw&amp;sa=X&amp;oi=book_result&amp;resnum=4&amp;ct=result"&gt;this&lt;/a&gt; is a really great introduction to systems biology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8707496746897712490?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8707496746897712490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8707496746897712490' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8707496746897712490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8707496746897712490'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/03/python.html' title='Python'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5737414866422475974</id><published>2009-03-26T02:10:00.007-04:00</published><updated>2009-03-31T00:05:22.923-04:00</updated><title type='text'>Tis the season to be nervous about the NSF fellowships</title><content type='html'>Last semester I applied for an NSF fellowship. The deadline for notification is "in late March," which could literally be anytime now. &lt;br /&gt;&lt;br /&gt;Being really antsy, I want to immediately know if the NSF publishes the fellowship list. &lt;br /&gt;&lt;br /&gt;Being really nerdy, I came up with the following solution. &lt;br /&gt;&lt;br /&gt;First, I wrote a short script called imessage that will use Adium, the IM client, to send a message to my cell phone. I made a few modifications to the excellent script I found &lt;a href="http://frefo.blogspot.com/2008/07/replacement-script-for-zwrite-using.html"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: lucida grande, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;span style="color: #add8e6;"&gt;#&lt;/span&gt;&lt;span style="color: #add8e6;"&gt;!/bin/&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;bash&lt;/span&gt;&lt;span style="color: #add8e6;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #b0c4de;"&gt;test&lt;/span&gt; $# -eq 0 &amp;amp;&amp;amp; &lt;span style="color: #b0c4de;"&gt;echo&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"Usage: echo hi | $0 user [otherusers] "&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style="color: #00ff7f;"&gt;exit&lt;/span&gt; 1&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #b0c4de;"&gt;export&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;MESSAGE&lt;/span&gt;=&lt;span style="color: #ffa07a;"&gt;"`cat`"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;while &lt;/span&gt;&lt;span style="color: #b0c4de;"&gt;test&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"$1"&lt;/span&gt;; &lt;span style="color: #00ff7f;"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #ff7f50;"&gt;BUDDY&lt;/span&gt;=$&lt;span style="color: #ff7f50;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #b0c4de;"&gt;export&lt;/span&gt; BUDDY&lt;br /&gt;&lt;br /&gt;/usr/bin/osascript &amp;lt;&amp;lt;EOL&lt;span style="color: #ffff00; font-weight: bold;"&gt;&lt;br /&gt;set stdinText to do shell script "echo \"\$MESSAGE\"" without altering line endings&lt;br /&gt;&lt;br /&gt;tell application "System Events" to set adiumRunning to (name of processes) contains "Adium"&lt;br /&gt;if adiumRunning then&lt;br /&gt;tell application "Adium"&lt;br /&gt;     tell account "erasmus63"&lt;br /&gt;          make new chat with contacts {contact "$BUDDY"} with new chat window&lt;br /&gt;          activate&lt;br /&gt;     end tell&lt;br /&gt;     send the active chat message stdinText&lt;br /&gt;end tell&lt;br /&gt;end if&lt;br /&gt;EOL&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #b0c4de;"&gt;shift&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;done&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then, I wrote another script that checks the NSF webpage for updates, and if there are updates, it messages my cell phone. &lt;br /&gt;&lt;pre style="font-family: lucida grande, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;span style="color: #add8e6;"&gt;#&lt;/span&gt;&lt;span style="color: #add8e6;"&gt;!/bin/&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;bash&lt;/span&gt;&lt;span style="color: #add8e6;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #b0c4de;"&gt;cd&lt;/span&gt;&lt;br /&gt;wget --no-check-certificate &lt;span style="color: #ffa07a;"&gt;"https://www.fastlane-beta.nsf.gov/grfp/AwardeeList.do?method=loadAwardeeList"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #ff7f50;"&gt;my_var&lt;/span&gt;=&lt;span style="color: #fa8072;"&gt;`diff AwardeeList.do?method=loadAwardeeList ref`&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; [ -n $&lt;span style="color: #ff7f50;"&gt;my_var&lt;/span&gt; ]; &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #b0c4de;"&gt;echo&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"The GRFP list has been published"&lt;/span&gt; | imessage +{my cell number}&lt;br /&gt;    cp -f AwardeeList.do?&lt;span style="color: #ff7f50;"&gt;method&lt;/span&gt;=loadAwardeeList ref&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;rm &lt;span style="color: #ffa07a;"&gt;"AwardeeList.do?method=loadAwardeeList"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then I installed a crontab so it checks every hour. &lt;br /&gt;&lt;br /&gt;So, one of these days, I'll get a message on my cell phone telling me that the NSF has updated their webpage!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5737414866422475974?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5737414866422475974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5737414866422475974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5737414866422475974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5737414866422475974'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/03/tis-season-to-be-nervous-about-nsf.html' title='Tis the season to be nervous about the NSF fellowships'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8552861775243445112</id><published>2009-03-08T01:30:00.003-05:00</published><updated>2009-03-08T16:32:08.547-04:00</updated><title type='text'>A simple puzzle</title><content type='html'>Recently I came across &lt;a href="http://abstrusegoose.com/"&gt;Abstruse Goose&lt;/a&gt;, an xkcd-like webcomic. They had a &lt;a href="http://abstrusegoose.com/126"&gt;Simple Puzzle&lt;/a&gt; which I found to be somewhat engaging, so I solved it: &lt;br /&gt;&lt;pre style="font-family: lucida grande, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #add8e6;"&gt;(* tests whether an integer is prime *)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;is_prime&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; n &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;max &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; int_of_float &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;sqrt &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;float_of_int n&lt;span style="color: #00ff7f;"&gt;))&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;rec&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;prime&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; x &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; x &lt;span style="color: #00ff7f;"&gt;&amp;gt;&lt;/span&gt; max &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; &lt;span style="color: #7fffd4;"&gt;true&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;n &lt;span style="color: #00ff7f;"&gt;mod&lt;/span&gt; x&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; 0 &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; &lt;span style="color: #7fffd4;"&gt;false&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; prime &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;x &lt;span style="color: #00ff7f;"&gt;+&lt;/span&gt; 1&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  prime 2&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #add8e6;"&gt;(* location of text files containing millions of digits of pi and e *)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;ic2 &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; open_in &lt;span style="color: #ffa07a;"&gt;"/home1/dnk5/programs/encode/src/e"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;ic &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; open_in &lt;span style="color: #ffa07a;"&gt;"/home1/dnk5/programs/encode/src/pi"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #add8e6;"&gt;(* recursively gets a character from the file and tests&lt;br /&gt;   whether a ten-digit window is prime *)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;rec&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;abstruse_goose&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; acc ic n &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt;  &lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;new_char &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; input_char ic &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;rep &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; int_of_char new_char &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #add8e6;"&gt;(* the integer representation of the characters 0-9 *)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;rep &lt;span style="color: #00ff7f;"&gt;&amp;lt;&lt;/span&gt; 48&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;||&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;rep &lt;span style="color: #00ff7f;"&gt;&amp;gt;&lt;/span&gt; 57&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; abstruse_goose acc ic n&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;String&lt;/span&gt;.length acc&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;&amp;lt;&lt;/span&gt; n &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;acc &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;acc &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;String&lt;/span&gt;.make 1 new_char&lt;span style="color: #00ff7f;"&gt;))&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;      abstruse_goose acc ic n&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;acc &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;((&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;String&lt;/span&gt;.sub acc 1 &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;n &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt; 1&lt;span style="color: #00ff7f;"&gt;))&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;String&lt;/span&gt;.make 1 new_char&lt;span style="color: #00ff7f;"&gt;))&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;num &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; int_of_string acc &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;is_prime num&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; num &lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; abstruse_goose acc ic n      &lt;br /&gt;    &lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;n &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;abstruse_goose &lt;span style="color: #ffa07a;"&gt;""&lt;/span&gt; ic 9&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;+&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;abstruse_goose &lt;span style="color: #ffa07a;"&gt;""&lt;/span&gt; ic2 9&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;+&lt;/span&gt; 73939133&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;_ &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Printf&lt;/span&gt;.printf &lt;span style="color: #ffa07a;"&gt;"%d\n"&lt;/span&gt; n&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8552861775243445112?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8552861775243445112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8552861775243445112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8552861775243445112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8552861775243445112'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/03/simple-puzzle-part-2.html' title='A simple puzzle'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8674787260724817329</id><published>2009-03-07T21:57:00.006-05:00</published><updated>2009-03-07T22:10:30.062-05:00</updated><title type='text'>On the economy</title><content type='html'>I recently came across what I thought was a very astute comment in a BBC thread about US unemployment. &lt;br /&gt;&lt;br /&gt;"The simple truth is that America has, for the past fifty years, translated all forms of manufacturing overseas. Left are those service related jobs in a closed-loop economy where value is arbitrarily assigned predicated on new-world thinking. Service Sector employment creates nothing in added wealth.&lt;br /&gt;&lt;br /&gt;And, at some point it will become clear to the American people that the prior eight years consisted of the rape of the American economy by the US-Arab Oil Industry. Halliburton is now in Dubai."&lt;br /&gt;&lt;br /&gt;--J. R. Warren, Kingman, AZ&lt;br /&gt;&lt;br /&gt;@Mr. J.R. Warren: &lt;br /&gt;&lt;br /&gt;Thank you for eloquently stating what I have been thinking for the past several years.&lt;br /&gt;&lt;br /&gt;@all my friends in consulting and investment banking: &lt;br /&gt;&lt;br /&gt;Please take a hard look at your profession. &lt;br /&gt;&lt;br /&gt;@myself: &lt;br /&gt;&lt;br /&gt;Am I guilty of perpetuating a valueless service economy as well? Where does biomedical research fit into all of this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8674787260724817329?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8674787260724817329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8674787260724817329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8674787260724817329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8674787260724817329'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/03/economy.html' title='On the economy'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6513028613501790420</id><published>2009-03-02T20:18:00.003-05:00</published><updated>2009-03-02T20:42:04.518-05:00</updated><title type='text'>Update: grad schools</title><content type='html'>I just concluded a very enjoyable series of interview weekends at MIT, Harvard, and UCSF. After seeing those three, I declined the rest of the places I was offered interviews -- I enjoyed all of them too much. &lt;br /&gt;&lt;br /&gt;Brief recap: &lt;br /&gt;&lt;br /&gt;MIT was extremely enjoyable. I especially enjoyed talking with Peter Reddien about six headed planarians, David Bartel about miRNAs, and Aviv Regev about computational biology. Furthermore, I got to hear Phil Sharp give a talk about the latest findings on &lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/19056940?ordinalpos=3&amp;itool=EntrezSystem2.PEntrez.Pubmed.Pubmed_ResultsPanel.Pubmed_DefaultReportPanel.Pubmed_RVDocSum"&gt;ubiquitous bidirectional transcription&lt;/a&gt;. Everyone I met seemed really friendly. I also got to sit on a group meeting of Manolis Kellis, who is basically a genius -- he has come up with all kinds of novel computational methods to analyze biological data. One of the coolest things he's done, I think, is to infer the evolutionary history of S. cerevisiae, concluding that it is the product of massive genome duplication followed by gene loss. Also, he's located in the &lt;a href="http://en.wikipedia.org/wiki/Stata_Center"&gt;Stata Center&lt;/a&gt;, that bizarre building of Frank Gehry's that leaks too much. Venkat works there too! I managed to catch up with him briefly. &lt;br /&gt;&lt;br /&gt;Harvard was also quite enjoyable. Although the faculty interviews were kind of hit or miss, I *really* enjoyed talking to Fritz Roth and John Rinn. Fritz Roth has devised probably the coolest experiment I've ever heard of. In a nutshell, you make pairwise deletions of all nonessential genes in yeast. You tag each deletion with a DNA "marker" that can be PCR amplified. Using some clever tricks, you can PCR the tags from each of the two deletions simultaneously. Then, you basically grow your huge library of pairwise deletion yeasties in a big vat, subject them to some environmental stress, dilute them in an oil emulsion to one cell per oil droplet, and use PCR and massively parallel sequencing to infer the growth rates of each pairwise deletion. Using some complicated heuristics, you can then infer the entire yeast interactome. &lt;br /&gt;&lt;br /&gt;The UCSF program also seems really cool -- it has very much of a focus on quantitative biology, and I feel like the training would be very good. Plus, San Francisco seems like a great city. Also, it probably has the strongest structural biophysics of the three institutions. I really enjoyed talking with Wendell Lim and Joe DeRisi there, and met some interesting people there too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6513028613501790420?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6513028613501790420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6513028613501790420' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6513028613501790420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6513028613501790420'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/03/update-grad-schools.html' title='Update: grad schools'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-3852334062234596973</id><published>2009-01-02T23:59:00.003-05:00</published><updated>2009-01-03T00:00:36.047-05:00</updated><title type='text'>More Brunell Quartet!</title><content type='html'>The &lt;a href="http://www.brunellquartet.com"&gt;Brunell Quartet webpage&lt;/a&gt; version two is up and running! Best of luck to the Brunellians as they take Toronto by storm!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-3852334062234596973?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/3852334062234596973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=3852334062234596973' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3852334062234596973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3852334062234596973'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2009/01/more-brunell-quartet.html' title='More Brunell Quartet!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8885807897845029478</id><published>2008-12-31T09:31:00.011-05:00</published><updated>2009-01-01T17:44:00.598-05:00</updated><title type='text'>II.4</title><content type='html'>(preface)&lt;br /&gt;II.3:&lt;br /&gt;A more general proposition, which is due to Gauss and includes those which precede as particular cases, is the following: &lt;i&gt;an algebraical equation&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;x&lt;sup&gt;n&lt;/sup&gt; + p&lt;sub&gt;1&lt;/sub&gt;x&lt;sup&gt;n-1&lt;/sup&gt; + p&lt;sub&gt;2&lt;/sub&gt;x&lt;sup&gt;n-2&lt;/sup&gt; + ... + p&lt;sub&gt;n&lt;/sub&gt; = 0. &lt;/center&gt;&lt;br /&gt;&lt;br /&gt;with integral coefficients, cannot have a rational but non-integral root.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;[For suppose that the equation has a root &lt;i&gt;a/b&lt;/i&gt;, where &lt;i&gt;a&lt;/i&gt; and &lt;i&gt;b&lt;/i&gt; are integers without a common factor, and &lt;i&gt;b&lt;/i&gt; is positive. Writing &lt;i&gt;a/b&lt;/i&gt; for &lt;i&gt;x&lt;/i&gt;, and multiplying by &lt;i&gt;b&lt;sup&gt;n-1&lt;/sup&gt;&lt;/i&gt;, we obtain&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;-a&lt;sup&gt;n&lt;/sup&gt;/b = p&lt;sub&gt;1&lt;/sub&gt;a&lt;sup&gt;n-1&lt;/sup&gt; + p&lt;sub&gt;2&lt;/sub&gt;a&lt;sup&gt;n-2&lt;/sup&gt;b + ... + p&lt;sub&gt;n&lt;/sub&gt;b&lt;sup&gt;n-1&lt;/sup&gt;&amp;nbsp***&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;a fraction in its lowest terms equal to an integer, which is absurd. Thus b = 1, and the root is a. It is evident that a must be a divisor of p&lt;sub&gt;n&lt;/sub&gt;. More generally, if a/b is a root of &lt;i&gt;p&lt;sub&gt;0&lt;/sub&gt;x&lt;sup&gt;n&lt;/sup&gt; + p&lt;sub&gt;1&lt;/sub&gt;x&lt;sup&gt;n-1&lt;/sup&gt; + ... + p&lt;sub&gt;n&lt;/sub&gt; = 0, &lt;/i&gt;then a is a divisor of p&lt;sub&gt;n&lt;/sub&gt; and b of p&lt;sub&gt;0&lt;/sub&gt;. &lt;br /&gt;&lt;br /&gt;4. Show that if p&lt;sub&gt;n&lt;/sub&gt; = 1 and neither of &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 + p&lt;sub&gt;1&lt;/sub&gt; + p&lt;sub&gt;2&lt;/sub&gt; + p&lt;sub&gt;3&lt;/sub&gt; + ...,&lt;br /&gt;&lt;br /&gt;1 - p&lt;sub&gt;1&lt;/sub&gt; + p&lt;sub&gt;2&lt;/sub&gt; - p&lt;sub&gt;3&lt;/sub&gt; + ... &lt;br /&gt;&lt;br /&gt;is zero, then the equation cannot have a rational root.] &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let us suppose that there is some rational root of the algebraical equation, a/b. As stated in the previous example, b must equal 1. Therefore, the equation can be rewritten&lt;br /&gt;&lt;br /&gt;&lt;i&gt;a&lt;sup&gt;n&lt;/sup&gt; + p&lt;sub&gt;1&lt;/sub&gt;a&lt;sup&gt;n-1&lt;/sup&gt; + ... + p&lt;sub&gt;n-1&lt;/sub&gt;a + 1 = 0&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Furthermore, a must be a divisor of p&lt;sub&gt;n&lt;/sub&gt;, as stated in the previous example, because substituting b = 1 into *** yields &lt;br /&gt;&lt;br /&gt;-a&lt;sup&gt;n&lt;/sup&gt; = p&lt;sub&gt;1&lt;/sub&gt;a&lt;sup&gt;n-1&lt;/sup&gt; + p&lt;sub&gt;2&lt;/sub&gt;a&lt;sup&gt;n-2&lt;/sup&gt; + ... + p&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;br /&gt;Dividing by a and rearranging, we get &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;0 = a&lt;sup&gt;n-1&lt;/sup&gt; + p&lt;sub&gt;1&lt;/sub&gt;a&lt;sup&gt;n-2&lt;/sup&gt; + p&lt;sub&gt;2&lt;/sub&gt;a&lt;sup&gt;n-3&lt;/sup&gt; + ... + p&lt;sub&gt;n&lt;/sub&gt;/a. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thus, p&lt;sub&gt;n&lt;/sub&gt;/a is integral. Since p&lt;sub&gt;n&lt;/sub&gt; = 1, a = 1 or -1. Substituting these values into the previous equation, we get 1 + p&lt;sub&gt;1&lt;/sub&gt; + p&lt;sub&gt;2&lt;/sub&gt; + p&lt;sub&gt;3&lt;/sub&gt; + ... = 0 or 1 - p&lt;sub&gt;1&lt;/sub&gt; + p&lt;sub&gt;2&lt;/sub&gt; - p&lt;sub&gt;3&lt;/sub&gt; ... = 0. QED&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8885807897845029478?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8885807897845029478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8885807897845029478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8885807897845029478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8885807897845029478'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/ii4.html' title='II.4'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5895476395913141585</id><published>2008-12-31T01:12:00.004-05:00</published><updated>2008-12-31T01:18:23.743-05:00</updated><title type='text'>Carry things through</title><content type='html'>This statement by the great mathematician Hardy, about one of his graduate students, hits me particularly close to home. I hope that I can learn from it and finish at least his book. &lt;br /&gt;&lt;br /&gt;Polya recalled how Hardy '... valued clarity, yet what he valued most in mathematics was not clarity but power, surmounting great obstacles that others abandoned in despair.' Polya also recalled how much Hardy loved jokes and told an anecdote which illustrated both aspects of Hardy's character: &lt;br /&gt;&lt;center&gt;&lt;i&gt;&lt;br /&gt;In working with Hardy, I once had an idea of which he approved. &lt;br /&gt;But afterwards I did not work sufficiently hard to carry out that &lt;br /&gt;idea, and Hardy disapproved. He did not tell me so, of course, yet&lt;br /&gt;it came out when he visited a zoological garden in Sweden with &lt;br /&gt;Marcel Riesz. In a cage there was a bear. The cage had a gate, &lt;br /&gt;and on the gate there was a lock. The bear sniffed at the lock, hit&lt;br /&gt;it with his paw, then growled a little, turned around and walked&lt;br /&gt;away. 'He is like Polya', said Hardy. 'He has excellent ideas, but &lt;br /&gt;does not carry them out.&lt;/i&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5895476395913141585?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5895476395913141585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5895476395913141585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5895476395913141585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5895476395913141585'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/carry-things-through.html' title='Carry things through'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8238701749591609035</id><published>2008-12-30T10:52:00.009-05:00</published><updated>2008-12-30T23:02:12.064-05:00</updated><title type='text'>How to beat computer game addiction with cron jobs</title><content type='html'>Over Thanksgiving break, much to &lt;a href="http://jessicatina.blogspot.com"&gt;Jess&lt;/a&gt;'s chagrin, I rediscovered Warcraft III. Although I was having fun tower rushing noobs, this ultimately led to much wasted time and neglecting the girl, which was just no good on my part. Therefore, I came up with a nifty solution to prevent myself from playing it. First, I got rid of the Warcraft III CDs. However, I realized that I still have access to my old backups and files, and it would be really easy to just reinstall it.&lt;br /&gt;&lt;br /&gt;First, I created a shell script, called nowarcraft.sh. Basically, if the Warcraft folder exists, then it will delete it. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: monaco, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;span style="color: #add8e6;"&gt;#&lt;/span&gt;&lt;span style="color: #add8e6;"&gt;!/bin/&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;bash&lt;/span&gt;&lt;span style="color: #add8e6;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff7f50;"&gt;dir&lt;/span&gt;=&lt;span style="color: #ffa07a;"&gt;"/Applications/"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff7f50;"&gt;warcraft&lt;/span&gt;=&lt;span style="color: #ffa07a;"&gt;"Warcraft III"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #b0c4de;"&gt;cd&lt;/span&gt; $&lt;span style="color: #ff7f50;"&gt;dir&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; [ -d &lt;span style="color: #ffa07a;"&gt;"$warcraft"&lt;/span&gt; ]&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; &lt;br /&gt;    rm -rf &lt;span style="color: #ffa07a;"&gt;"$warcraft"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;exit&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;fi&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;I gave it a chmod 100 -- basically, the bare minimum executable status by root, nothing else. &lt;br /&gt;&lt;br /&gt;As root, I did: &lt;br /&gt;crontab -u root -e&lt;br /&gt;&lt;br /&gt;I pressed "i" to insert text, and in the vi window typed: &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: monaco, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;0,15,30,45 0-23 1-31 1-12 0-7 bash /Users/david/programs/scripts/nowarcraft.sh&lt;/pre&gt;&lt;br /&gt;I pressed escape, and did "ZZ" to install the crontab. Done! &lt;br /&gt;&lt;br /&gt;Now, if I've got Warcraft installed, it'll delete it every fifteen minutes!&lt;br /&gt;&lt;br /&gt;Edit: I guess there is a newer version of this, launchd, but cron is the old school way of doing things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8238701749591609035?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8238701749591609035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8238701749591609035' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8238701749591609035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8238701749591609035'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/how-to-beat-computer-game-addiction.html' title='How to beat computer game addiction with cron jobs'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-7370250134500947418</id><published>2008-12-29T17:43:00.002-05:00</published><updated>2008-12-30T22:59:39.332-05:00</updated><title type='text'>Some thoughts</title><content type='html'>1. I just realized: my Dad named my middle initials, "Neal Pira," for P = NP. I can't believe it took me this long to figure that out. Does that make me NP complete?&lt;br /&gt;&lt;br /&gt;2. I can't get through the first page of "A Course of Pure Mathematics" by Hardy. To quote Firefly: "This food is problematic." &lt;br /&gt;&lt;br /&gt;3. There is a difference between the Wilcoxon signed-rank test and the Wilcoxon sum of ranks test. Shit. &lt;br /&gt;&lt;br /&gt;4. To follow in a rich history of misinterpreting Godel's incompleteness theorems (there are two), I would like to submit the following: if we are formal mathematical systems, then it is best to find love. &lt;br /&gt;&lt;br /&gt;Re: #2: can someone explain this to me? &lt;br /&gt;&lt;br /&gt;"The positive rational numbers may be arranged in the form of a simple series as follows: &lt;br /&gt;&lt;br /&gt;1/1, 2/1, 1/2, 3/1, 2/2, 1/3, 4/1, 3/2, 2/3, 1/4, ...&lt;br /&gt;&lt;br /&gt;Show that p/q is the [(p + q - 1)(p + q - 2)/2 + q]th term of the series. &lt;br /&gt;&lt;br /&gt;Edit: I got this problem, using a few approaches. First, you can observe that there are groups distinct groups {1/1}, {2/1 and 1/2}, {3/1, 2/2, 1/3}, and so on. The number of this group is n = p + q - 1 -- for example, the second group is 2 + 1 - 1. If you can prove that the element BEFORE the group starts is [(p + q - 1)(p + q - 2)/2] then all you need to do is add q to get the correct element. For example, to get 1/3, it's three after 1/2. The "starting positions" are simply 0,1,3,6,10... The formula for this series is n(n - 1)/2 (since we are starting at zero). Substitute n = p + q - 1, and add q to get the final answer. Thanks to Liwei for the insight on separating them into groups. &lt;br /&gt;&lt;br /&gt;The other approach is to observe that a given p starts at p(p - 1)/2 + 1, and repeats at (p + 1) + (p + 2) + (p + 3)... We can observe that the qth element of this series is our desired p/q, thanks to Venkat's insight. This element can thus be expressed as p(p - 1)/2 + 1 + (q - 1)p + q(q - 1)/2. Combining terms, this turns into (p^2 + 2 + 2pq - 3p + q^2 - q)/2. This can be rearranged to get our answer, [(p + q - 1)(p + q - 2)/2 + q]. &lt;br /&gt;&lt;br /&gt;Now on to page 2...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-7370250134500947418?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/7370250134500947418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=7370250134500947418' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/7370250134500947418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/7370250134500947418'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/some-thoughts.html' title='Some thoughts'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5205873144838259612</id><published>2008-12-25T04:15:00.000-05:00</published><updated>2008-12-25T04:16:15.604-05:00</updated><title type='text'>Merry Christmas</title><content type='html'>I have been waiting for the day when xkcd would &lt;a href="http://www.xkcd.com/520/"&gt;salute bio majors&lt;/a&gt;. Whoo! &lt;br /&gt;&lt;br /&gt;P.S. Merry Christmas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5205873144838259612?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5205873144838259612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5205873144838259612' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5205873144838259612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5205873144838259612'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/merry-christmas.html' title='Merry Christmas'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6850712500781194821</id><published>2008-12-17T19:07:00.000-05:00</published><updated>2008-12-18T00:59:20.384-05:00</updated><title type='text'>Kind souls on the internet</title><content type='html'>I would like to address this post to all of the kind souls on the internet who post tutorials, HOWTOs, and various techie informational material, free of charge. Without you, so many would-be techie geeks would be lost and floundering in a sea of code. Just in the last few days, I've used the following tutorials, and there are seriously so many more that I use every single day. Thank you! &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li /&gt;&lt;a href="http://en.wikipedia.org/wiki/Patrick_Volkerding"&gt;Patrick Volkerding&lt;/a&gt; et al., for writing the &lt;a href="http://www.slackbook.org"&gt;Slackbook&lt;/a&gt;, which has been my steadfast guide to the Linux/Unix world for the past few months.&lt;br /&gt;&lt;br /&gt;&lt;li /&gt;&lt;a href="http://macles.blogspot.com"&gt;Macles&lt;/a&gt;, for writing incredibly helpful tutorials on how to hack the Acer Aspire One to perform better (which is &lt;a href="http://jessicatina.blogspot.com"&gt;Jess's&lt;/a&gt; new computer!).&lt;br /&gt;&lt;br /&gt;&lt;li /&gt;&lt;a href="http://blog.puppygrinder.com"&gt;Michael Buehler&lt;/a&gt;, for writing really helpful articles on embedding Wordpress using PHP.&lt;br /&gt;&lt;br /&gt;&lt;li /&gt;&lt;a href="http://autopragmatic.com/2008/01/26/hosting-a-git-repository-on-dreamhost/"&gt;Autopragmatic&lt;/a&gt;, for writing an extended tutorial on how to install Git on Dreamhost. I seriously would have been lost without this one. &lt;br /&gt;&lt;br /&gt;&lt;li /&gt;The good souls on the &lt;a href="http://tech.groups.yahoo.com/group/ocaml_beginners/"&gt;Ocaml beginners list&lt;/a&gt;, even if they get into flame wars sometimes :-). &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;To all you great programmers/hackers/techie people: thank you, and I will do my best to give back to this flourishing community. &lt;br /&gt;&lt;br /&gt;And, most importantly, thanks to &lt;a href="http://jessicatina.blogspot.com"&gt;Jess&lt;/a&gt; for keeping me sane, happy, and well-fed :-). I love you. &lt;br /&gt;&lt;br /&gt;As something of a corollary, I would like to unveil &lt;a href="http://www.biocaml.org"&gt;Biocaml Redux!&lt;/a&gt; I've spent a bit of time working on it recently, it's got a wiki, mailing list, repository, archives, blog, and much much more to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6850712500781194821?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6850712500781194821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6850712500781194821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6850712500781194821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6850712500781194821'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/kind-souls-on-internet.html' title='Kind souls on the internet'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-2537837542969756745</id><published>2008-12-08T15:13:00.000-05:00</published><updated>2008-12-08T15:15:15.382-05:00</updated><title type='text'>Now Announcing BioCaml</title><content type='html'>The &lt;a href="http://www.biocaml.org"&gt;BioCaml&lt;/a&gt; website is up and running! It is extremely bare-bones right now, but will soon feature a full webpage, revision control system, wiki, forum, etcetera. &lt;br /&gt;&lt;br /&gt;You can also e-mail me at &lt;a href="mailto:koppology@biocaml.org"&gt;koppology@biocaml.org&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-2537837542969756745?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/2537837542969756745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=2537837542969756745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2537837542969756745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2537837542969756745'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/now-announcing-biocaml.html' title='Now Announcing BioCaml'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6106181175802763637</id><published>2008-12-05T10:24:00.001-05:00</published><updated>2008-12-05T10:24:13.615-05:00</updated><title type='text'>Slackware!</title><content type='html'>After I got fed up with Gobolinux breaking all the time (it's a very interesting idea, rearranging the filesystem hierarchy, but the distro is immature... perhaps I will contribute to it in the future, when I know my way around Linux) I decided to make the switch to &lt;a href="http://www.slackware.com"&gt;Slackware&lt;/a&gt;. This is the linux distro to end linux distros. Not only is it the oldest distro around, but also probably one of the most stable. It largely avoids GUIs in general, although you can definitely run your favorite desktop environment (KDE in my case) if you like, but everything from the install to the configuration to the package management has a "do it yourself" kind of mentality. Therefore, even just installing it, I've learned how to use fdisk, fstab, lilo, dd (I had to wipe the MBR using dd), how to configure x, how to use vi, why you should have separate partitions for /, /home, and /usr, and then some.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6106181175802763637?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6106181175802763637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6106181175802763637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6106181175802763637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6106181175802763637'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/slackware.html' title='Slackware!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-4427679194504180982</id><published>2008-12-03T17:29:00.000-05:00</published><updated>2008-12-06T03:10:47.241-05:00</updated><title type='text'>BitTorrent Integrity Check</title><content type='html'>Please enjoy this little Ocaml script I wrote for checking the file integrity of downloaded BitTorrent files (using md5 checksum). Here is an example of it in action (yes, I downloaded &lt;a href="http://slackware.com"&gt;Slackware&lt;/a&gt;; yes, I intend to live in the command line for the next few months). &lt;br /&gt;&lt;br /&gt;Here is an example of it in action: &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: monaco, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;span style="color: #ffffff;"&gt;bash-3.2$ &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;md5check&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Welcome to the MD5 checksum script by David Koppstein!&lt;br /&gt;This script checks the file integrity of all files with *.md5 information in the current working directory.&lt;br /&gt;You are in the /Users/david/Desktop/slackware-12.1-iso directory.&lt;br /&gt;&lt;br /&gt;These are the files that have associated *.md5 information.&lt;br /&gt;slackware-12.1-source-d6.iso&lt;br /&gt;slackware-12.1-source-d5.iso&lt;br /&gt;slackware-12.1-source-d4.iso&lt;br /&gt;slackware-12.1-install-d3.iso&lt;br /&gt;slackware-12.1-install-d2.iso&lt;br /&gt;slackware-12.1-install-d1.iso&lt;br /&gt;&lt;br /&gt;Please wait a moment while I check the integrity of these files...&lt;br /&gt;All of these files have passed the MD5 checksum test. Congratulations, you are a winner!&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here's the script. Why I am using Ocaml as a scripting language is beyond me, but hey, whatever works... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: monaco, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;_ &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;cwd &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Sys&lt;/span&gt;.getcwd&lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;files &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Array&lt;/span&gt;.to_list &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;Sys&lt;/span&gt;.readdir cwd&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  print_newline&lt;span style="color: #00ff7f;"&gt;();&lt;/span&gt;&lt;br /&gt;  print_endline &lt;span style="color: #ffa07a;"&gt;"Welcome to the MD5 checksum script by David Koppstein!"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;  print_endline &lt;span style="color: #ffa07a;"&gt;"Would you like to manually check the md5 of a file, or do an automatic check?"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;  print_endline &lt;span style="color: #ffa07a;"&gt;"Type m for manual, or a for automatic:"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;rec&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;reader&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; read_line&lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"a"&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;br /&gt;          &lt;span style="color: #00ff7f;"&gt;begin&lt;/span&gt;&lt;br /&gt;            print_endline &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ffa07a;"&gt;"This script checks the file integrity of all files with *.md5"&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: #ffa07a;"&gt;" information in the current working directory."&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;);&lt;/span&gt;&lt;br /&gt;            print_endline &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ffa07a;"&gt;"You are in the "&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt; cwd &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;" directory."&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;);&lt;/span&gt;&lt;br /&gt;            print_newline&lt;span style="color: #00ff7f;"&gt;();&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;md5_files &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;              &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;f&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; lst acc elem &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;pred&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; elem a &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; elem &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;a &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;".md5"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; &lt;span style="color: #7fffd4;"&gt;true&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; &lt;span style="color: #7fffd4;"&gt;false&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;try&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;List&lt;/span&gt;.find &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;pred elem&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; lst&lt;span style="color: #00ff7f;"&gt;)::&lt;/span&gt;acc&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt; Not_found &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; acc &lt;br /&gt;              &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: #98fb98;"&gt;List&lt;/span&gt;.fold_left &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;f files&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;[]&lt;/span&gt; files&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; md5_files &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt; &lt;br /&gt;              &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;[]&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; print_endline &lt;br /&gt;                  &lt;span style="color: #ffa07a;"&gt;"There are no files with associated *.md5 info in this directory. Goodbye!"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;                  print_newline&lt;span style="color: #00ff7f;"&gt;();&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; md5_files &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; print_endline &lt;br /&gt;                  &lt;span style="color: #ffa07a;"&gt;"These are the files that have associated *.md5 information."&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt; &lt;br /&gt;                  &lt;span style="color: #98fb98;"&gt;List&lt;/span&gt;.iter print_endline md5_files&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;                  print_newline&lt;span style="color: #00ff7f;"&gt;();&lt;/span&gt;&lt;br /&gt;                  print_endline &lt;br /&gt;                    &lt;span style="color: #ffa07a;"&gt;"Please wait a moment while I check the integrity of these files..."&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;                  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;bad_md5_files &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;f&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; lst acc elem &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;md5 &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Digest&lt;/span&gt;.to_hex &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;Digest&lt;/span&gt;.file elem&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;md5_file &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; elem &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;".md5"&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;ic &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; open_in md5_file &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;ln &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; input_line ic &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;_ &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; close_in ic &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;regex &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Pcre&lt;/span&gt;.regexp md5 &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;try&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Pcre&lt;/span&gt;.exec &lt;span style="color: #00ff7f;"&gt;~&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt;rex&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;:&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;regex ln &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; _ &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; acc&lt;br /&gt;                      &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt; Not_found &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; elem&lt;span style="color: #00ff7f;"&gt;::&lt;/span&gt;acc&lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #98fb98;"&gt;List&lt;/span&gt;.fold_left &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;f md5_files&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;[]&lt;/span&gt; md5_files&lt;br /&gt;                  &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                  &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; bad_md5_files &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;[]&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; print_endline &lt;br /&gt;                        &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ffa07a;"&gt;"All of these files have passed the MD5 checksum test."&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;^&lt;/span&gt;&lt;br /&gt;                          &lt;span style="color: #ffa07a;"&gt;" Congratulations, you are a winner!"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; lst &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; print_endline &lt;span style="color: #ffa07a;"&gt;"The following files are bad:"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color: #98fb98;"&gt;List&lt;/span&gt;.iter print_endline lst&lt;br /&gt;          &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"m"&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;br /&gt;          &lt;span style="color: #00ff7f;"&gt;begin&lt;/span&gt;&lt;br /&gt;            print_endline &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ffa07a;"&gt;"Which file would you like to examine?"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;file &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; read_line&lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;md5 &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Digest&lt;/span&gt;.to_hex &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;Digest&lt;/span&gt;.file file&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;            print_endline &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ffa07a;"&gt;"Please input the md5 code of the file that you have selected:"&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;);&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;md5_to_check &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; read_line&lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;            print_newline&lt;span style="color: #00ff7f;"&gt;();&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; md5 &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; md5_to_check &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; &lt;br /&gt;              print_endline &lt;span style="color: #ffa07a;"&gt;"Congratulations! Your file passed the md5 checksum."&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; print_endline &lt;span style="color: #ffa07a;"&gt;"Your file did not pass the md5 checksum. Sorry!"&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; _ &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;br /&gt;          print_endline &lt;span style="color: #ffa07a;"&gt;"Sorry, you need to input either an a or an m. Type Ctrl-C to quit."&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;;&lt;/span&gt;&lt;br /&gt;          reader &lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  reader &lt;span style="color: #00ff7f;"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As always, suggestions are welcome, since I am still very much an amateur (or should I say n00b?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-4427679194504180982?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/4427679194504180982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=4427679194504180982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4427679194504180982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4427679194504180982'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/12/please-enjoy-this-little-ocaml-script-i.html' title='BitTorrent Integrity Check'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-6439789474603502879</id><published>2008-11-24T15:56:00.001-05:00</published><updated>2008-11-24T16:00:15.211-05:00</updated><title type='text'>Obama's Treasury Team</title><content type='html'>I've gotta say, I'm very happy with Obama's choice of people for Secretary of the Treasury and director of the National Economic Council. Tim Geithner and Larry Summers (yes, of Harvard) have worked well with each other in the past (Geithner is apparently Summers's protege), and are both incredibly intelligent people. Maybe Summers will ruffle some people's feathers, but I don't care, he'll get the job done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-6439789474603502879?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/6439789474603502879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=6439789474603502879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6439789474603502879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/6439789474603502879'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/11/obama-treasury-team.html' title='Obama&apos;s Treasury Team'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8537405383368923341</id><published>2008-11-18T13:35:00.001-05:00</published><updated>2008-11-18T13:41:55.630-05:00</updated><title type='text'>another bad pun</title><content type='html'>In the spirit of bad puns, Jess just told me to take my work "one byte at a time." &lt;br /&gt;&lt;br /&gt;Hyuk hyuk hyuk. &lt;br /&gt;&lt;br /&gt;By the way, I am building up a data structure called a monster, because it contains a lot of arms, two legs, and a tail. It kind of looks like this: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;       |&lt;br /&gt;      /|\&lt;br /&gt;      /|\ &lt;br /&gt;      /|\&lt;br /&gt;      /|\&lt;br /&gt;     / | \&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It's basically a data structure for efficient lookup of pairs of elements that may overlap. Here's a snippet of my code. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: monaco, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;module&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Monster &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt;Ord&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;:&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;OrderedType&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;struct&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;type&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;elt &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Ord&lt;/span&gt;.t &lt;span style="color: #00ff7f;"&gt;*&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;Ord&lt;/span&gt;.t&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;type&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;appendage &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; Arm &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; elt &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; Leg&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;type&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;body &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; Body &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; elt &lt;span style="color: #00ff7f;"&gt;*&lt;/span&gt; appendage &lt;span style="color: #00ff7f;"&gt;*&lt;/span&gt; body &lt;span style="color: #00ff7f;"&gt;*&lt;/span&gt; appendage &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; Tail&lt;br /&gt;      &lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;empty &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; Tail&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;insert&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt;f1&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt;f2 &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;as&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; sbf&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt;r1&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt;r2 &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;as&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; rsbl&lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; monster &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;rec&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;ins&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; b &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;      &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; b &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; Tail &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; sbf &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; rsbl &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; Body &lt;span style="color: #00ff7f;"&gt;((&lt;/span&gt;f1&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt;f2&lt;span style="color: #00ff7f;"&gt;),&lt;/span&gt; Leg&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; Tail&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; Leg&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; Body &lt;span style="color: #00ff7f;"&gt;((&lt;/span&gt;f1&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt;r2&lt;span style="color: #00ff7f;"&gt;),&lt;/span&gt; Arm &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;sbf&lt;span style="color: #00ff7f;"&gt;),&lt;/span&gt; Tail&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; Arm &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;rsbl&lt;span style="color: #00ff7f;"&gt;))&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; Body &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;elt&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; l&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; body&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; r&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; Body &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;elt&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; l&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; ins body&lt;span style="color: #00ff7f;"&gt;,&lt;/span&gt; r&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt; ins monster&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8537405383368923341?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8537405383368923341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8537405383368923341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8537405383368923341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8537405383368923341'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/11/another-bad-pun.html' title='another bad pun'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8717448735737048740</id><published>2008-11-17T13:58:00.001-05:00</published><updated>2008-11-17T19:23:50.751-05:00</updated><title type='text'>Gobolinux!</title><content type='html'>I am having fun with a new distribution of linux, &lt;a href="http://www.gobolinux.org"&gt;Gobolinux&lt;/a&gt;, that my Dad recently recommended to me. It's a very new distro, not much past the &lt;a href="http://www.linuxfromscratch.org/blfs/"&gt;BFLS&lt;/a&gt; (Beyond Linux From Scratch) stage. Yet it's already attracted a lot of developers because of its novel directory structure, which basically trashes the old unix /usr /mnt /bin /dev etcetera, and has a FHS that is a lot more &lt;a href="http://en.wikipedia.org/wiki/GoboLinux"&gt;intuitive&lt;/a&gt;. It's also received a lot of &lt;a href="http://developers.slashdot.org/article.pl?sid=04/06/05/1949213"&gt;press&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;It's basically a very forward-looking linux distro. It features a very nice source-based "package manager" called compile. I use quotes here because it is the filesystem that acts as the package manager, negating the need for .rpms or .pgis or whatever. Very nifty. It also runs &lt;a href="http://zsh.dotsrc.org/"&gt;zsh&lt;/a&gt; by default, which is like bash but better. &lt;br /&gt;&lt;br /&gt;Also, here's my Ocaml version of a binary search algorithm over dynamic arrays -- &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: monaco, sans-serif; color: #f5deb3; background-color: #000000; font-size: 8pt"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;open&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;ExtLib&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;binary_search&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; cmp elem dynarr &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;last &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;&lt;span style="color: #98fb98;"&gt;DynArray&lt;/span&gt;.length dynarr &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt; 1&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;get&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; idx &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #98fb98;"&gt;DynArray&lt;/span&gt;.get dynarr idx &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; last &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt;1 &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt;1 &lt;br /&gt;  &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; cmp elem &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;get 0&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt;1 &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt;1 &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt;  0 &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt;  0&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt;  1 &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;br /&gt;         &lt;span style="color: #00ff7f;"&gt;begin&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;asserter&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; lo &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;br /&gt;             &lt;span style="color: #00ff7f;"&gt;assert&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;((&lt;/span&gt;get lo&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;&amp;lt;=&lt;/span&gt; elem&lt;span style="color: #00ff7f;"&gt;);&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt;lo &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt; 2&lt;br /&gt;           &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;rec&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;aux&lt;/span&gt;&lt;span style="color: #ff7f50;"&gt; lo hi &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt;&lt;br /&gt;             &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;mid &lt;/span&gt;&lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;lo &lt;span style="color: #00ff7f;"&gt;+&lt;/span&gt; hi &lt;span style="color: #00ff7f;"&gt;+&lt;/span&gt; 1&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;/&lt;/span&gt; 2 &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;             &lt;span style="color: #00ff7f;"&gt;match&lt;/span&gt; cmp elem &lt;span style="color: #00ff7f;"&gt;(&lt;/span&gt;get mid&lt;span style="color: #00ff7f;"&gt;)&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;with&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;-&lt;/span&gt;1 &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; hi &lt;span style="color: #00ff7f;"&gt;=&lt;/span&gt; mid &lt;span style="color: #00ff7f;"&gt;||&lt;/span&gt; lo &lt;span style="color: #00ff7f;"&gt;&amp;gt;=&lt;/span&gt; mid &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; asserter lo &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt;&lt;br /&gt;                    aux lo mid&lt;br /&gt;               &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt;  0 &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; mid&lt;br /&gt;               &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt;  1 &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; mid &lt;span style="color: #00ff7f;"&gt;&amp;gt;=&lt;/span&gt; hi &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; asserter lo &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; aux mid hi&lt;br /&gt;               &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt;  _ &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;failwith&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"Comparison should only give -1, 0, or 1."&lt;/span&gt; &lt;br /&gt;           &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;           aux 0 last&lt;br /&gt;         &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;|&lt;/span&gt;  _ &lt;span style="color: #00ff7f;"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color: #00ff7f;"&gt;failwith&lt;/span&gt; &lt;span style="color: #ffa07a;"&gt;"Comparison should only give -1, 0, or 1."&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It's a bit rough around the edges, but it works. &lt;br /&gt;&lt;br /&gt;David&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8717448735737048740?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8717448735737048740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8717448735737048740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8717448735737048740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8717448735737048740'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/11/gobolinux.html' title='Gobolinux!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-9074523110321769278</id><published>2008-11-05T21:51:00.001-05:00</published><updated>2008-11-05T21:51:41.416-05:00</updated><title type='text'>More xkcd crap</title><content type='html'>&lt;a href="http://www.xkcd.com/404"&gt;The 404th xkcd comic&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-9074523110321769278?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/9074523110321769278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=9074523110321769278' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/9074523110321769278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/9074523110321769278'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/11/more-xkcd-crap.html' title='More xkcd crap'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1957709155413049850</id><published>2008-11-05T20:36:00.000-05:00</published><updated>2008-11-05T20:51:17.328-05:00</updated><title type='text'>Obama wins!</title><content type='html'>Whoo!!&lt;br /&gt;&lt;br /&gt;I picked this up from &lt;a href="http://www.slashdot.org"&gt;Slashdot&lt;/a&gt; -- an &lt;a href="http://www.newsweek.com/id/167581/page/1"&gt;interesting article&lt;/a&gt; in Newsweek about how both the McCain and Obama campaigns were hacked, possibly by foreign governments. Along with the Sinowal Trojan, it seems like advanced cybercrime is increasingly on the move. So basically, now is a good time to get acquainted with &lt;a href="http://www.openbsd.org/"&gt;OpenBSD&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Some other insights include the fact that Sarah Palin spent even more than we thought on clothes (corruption charges, anyone?), and that the McCain campaign was probably not going to bring up the Ayers issue, but Palin jumped the gun. Man, picking Palin was a pretty bad move for Mr. McCain. I don't even dislike the guy, I think he'd definitely have been a better President than Bush (not that that's saying much), but poor choice in VP. &lt;br /&gt;&lt;br /&gt;But seriously, Obama is going to be awesome as President. His victory speech was incredibly inspiring -- I think it's a message of hope to everyone around the world. I guess I won't have to move to Australia, after all!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1957709155413049850?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1957709155413049850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1957709155413049850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1957709155413049850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1957709155413049850'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/11/campaigns-hacked.html' title='Obama wins!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1659966526439185398</id><published>2008-10-31T15:35:00.000-04:00</published><updated>2008-10-31T15:43:25.493-04:00</updated><title type='text'>Why you should always back up your computer</title><content type='html'>I recently was working on Bulldogi, the supercomputer at Yale. I wanted to create a clone of my programs directory from my home computer, so I did&lt;br /&gt;&lt;br /&gt;rsync -rltv ~/programs --progress --delete dnk5@bulldogi.wss.yale.edu:~/stripe_scratch/dnk5/programs&lt;br /&gt;&lt;br /&gt;Then, I deleted my original ~/programs directory from bulldogi, by doing&lt;br /&gt;&lt;br /&gt;cd&lt;br /&gt;rm -Rf programs&lt;br /&gt;&lt;br /&gt;except... I WAS ON MY HOME COMPUTER! I had forgotten to login to Bulldogi. This actually trashed my entire programs directory, which contains basically all of my code. Fortunately, I had just rsynced to Bulldogi, so I was able to retrieve it fairly easily. But holy shiznack! This was a good lesson in backing up your computer! &lt;br /&gt;&lt;br /&gt;PS - also you should alias rm to rm -i in your .bashrc for this very reason!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1659966526439185398?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1659966526439185398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1659966526439185398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1659966526439185398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1659966526439185398'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/10/why-you-should-always-back-up-your.html' title='Why you should always back up your computer'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-4598092786936285748</id><published>2008-10-17T12:49:00.001-04:00</published><updated>2008-10-17T12:52:13.199-04:00</updated><title type='text'>Presidential Race, part II</title><content type='html'>I was really disappointed when both McCain and Obama sidestepped two important questions:&lt;br /&gt;&lt;br /&gt;1. What are we going to do about entitlements? &lt;br /&gt;2. Can you give me a specific number of how much we can reduce oil dependency? &lt;br /&gt;&lt;br /&gt;Regarding the latter, I would be interested to see how each of them did on a relatively challenging math test. &lt;br /&gt;&lt;br /&gt;Also, I am published in &lt;a href=http://www.cell.com/content/article/abstract?uid=PIIS0092867408011902&gt;Cell!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-4598092786936285748?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/4598092786936285748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=4598092786936285748' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4598092786936285748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4598092786936285748'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/10/presidential-race-part-ii.html' title='Presidential Race, part II'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8021340125227156788</id><published>2008-10-12T01:00:00.001-04:00</published><updated>2008-10-12T01:01:16.602-04:00</updated><title type='text'>On the presidential race...</title><content type='html'>When one candidate has a history of getting the wrong thing done, and the other says the right things but does not get them done, for whom do you vote?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8021340125227156788?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8021340125227156788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8021340125227156788' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8021340125227156788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8021340125227156788'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/10/on-presidential-race.html' title='On the presidential race...'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-4840889441398215973</id><published>2008-09-22T22:49:00.001-04:00</published><updated>2008-09-22T22:50:00.680-04:00</updated><title type='text'>Bit by bit</title><content type='html'>Never tell a programmer to take their work "bit by bit."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-4840889441398215973?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/4840889441398215973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=4840889441398215973' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4840889441398215973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/4840889441398215973'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/09/bit-by-bit.html' title='Bit by bit'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-2580210315121634674</id><published>2008-09-18T10:44:00.000-04:00</published><updated>2008-09-18T15:22:42.296-04:00</updated><title type='text'>Ocaml Koans</title><content type='html'>I really got a kick out of these &lt;a href="http://eigenclass.org/hiki/fp-ocaml-koans"&gt;Ocaml koans&lt;/a&gt;. Here's a sampler:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size=+1&gt;let rec&lt;/font&gt;&lt;/b&gt; &lt;p&gt;One day, a disciple of another sect came to Xavier Leroy and said mockingly:&lt;/p&gt; &lt;p&gt;"The OCaml compiler seems very limited: why do you have to indicate when a function is recursive, cannot the compiler infer it?"&lt;/p&gt; &lt;p&gt;Xavier paused for a second, and replied patiently with the following story:&lt;/p&gt; &lt;p&gt;"One day, a disciple of another sect came to Xavier Leroy and said mockingly..."&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-2580210315121634674?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/2580210315121634674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=2580210315121634674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2580210315121634674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2580210315121634674'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/09/ocaml-koans.html' title='Ocaml Koans'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-155671709969870355</id><published>2008-09-17T00:33:00.001-04:00</published><updated>2008-09-17T00:51:03.535-04:00</updated><title type='text'>First Big Program!</title><content type='html'>This is a solution to one of the first problems in &lt;a href="http://www.cs.princeton.edu/~appel/modern/ml/"&gt;"Modern Compiler Implementation in ML"&lt;/a&gt; by &lt;a href="http://www.cs.princeton.edu/~appel/"&gt;Andrew Appel&lt;/a&gt;. It takes a pre-parsed program, interprets it, and spits out the answer. For example, the program "prog" in this case can be written as&lt;br /&gt;&lt;br /&gt;a := 5 + 3; b := (print (a, a - 1), b := a * 10); print b&lt;br /&gt;&lt;br /&gt;and should print out &lt;br /&gt;&lt;br /&gt;8 7 &lt;br /&gt;80&lt;br /&gt;&lt;br /&gt;I'm having a good time with functional programming! This class is taught in &lt;a href=http://www.smlnj.org/&gt;ML&lt;/a&gt;, which is a distant cousin of Ocaml. Taking CS421 (Compilers) after just taking CS112 (Introduction to Programming) is a bit daunting though. Good thing I'm not taking it for credit! &lt;br /&gt;&lt;br /&gt;Any comments on my code, by the way, would be much appreciated. &lt;br /&gt;&lt;br /&gt;&lt;pre style="color: #f5deb3; background-color: #000000;"&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;type&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;id&lt;/span&gt; = string&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;datatype&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;binop&lt;/span&gt; = PLUS | MINUS | TIMES | DIV&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;datatype&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;stm&lt;/span&gt; = SEQ &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; stm * stm&lt;br /&gt;             | ASSIGN &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; id * exp&lt;br /&gt;             | PRINT &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; exp list&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: #00ff7f;"&gt;and&lt;/span&gt; exp = VAR &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; id&lt;br /&gt;             | CONST &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; int&lt;br /&gt;             | BINOP &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; exp * binop * exp&lt;br /&gt;             | ESEQ &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; stm * exp&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;prog&lt;/span&gt; = &lt;br /&gt;    SEQ(ASSIGN(&lt;span style="color: #ffa07a;"&gt;"a"&lt;/span&gt;,BINOP(CONST 5, PLUS, CONST 3)),&lt;br /&gt;        SEQ(ASSIGN(&lt;span style="color: #ffa07a;"&gt;"b"&lt;/span&gt;,ESEQ(PRINT[VAR&lt;span style="color: #ffa07a;"&gt;"a"&lt;/span&gt;,BINOP(VAR&lt;span style="color: #ffa07a;"&gt;"a"&lt;/span&gt;,MINUS,CONST 1)],&lt;br /&gt;                            BINOP(CONST 10, TIMES, VAR&lt;span style="color: #ffa07a;"&gt;"a"&lt;/span&gt;))),&lt;br /&gt;            PRINT[VAR &lt;span style="color: #ffa07a;"&gt;"b"&lt;/span&gt;]))&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;fun&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;max_exp&lt;/span&gt; (e : exp) = &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; e &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt;&lt;br /&gt;        VAR ident =&amp;gt; 0&lt;br /&gt;      | CONST num =&amp;gt; 0 &lt;br /&gt;      | BINOP (e1, b, e2) =&amp;gt; Int.max (max_exp e1, max_exp e2)&lt;br /&gt;      | ESEQ (s, exp) =&amp;gt; Int.max (maxargs s, max_exp exp)&lt;br /&gt;                         &lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;and&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;maxargs&lt;/span&gt; (s : stm) = &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; s &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt;&lt;br /&gt;        SEQ (s1, s2) =&amp;gt; Int.max (maxargs s1, maxargs s2)&lt;br /&gt;      | ASSIGN (ident, exp) =&amp;gt; max_exp exp&lt;br /&gt;      | PRINT l =&amp;gt; List.foldl Int.max 0 ((List.length l)::(List.map max_exp l))&lt;br /&gt;                   &lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;type&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;table&lt;/span&gt; = (id * int) list&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;fun&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;update&lt;/span&gt; (t : table) (v : id) (i : int) = (v,i)::t&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;and&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;lookup&lt;/span&gt; (t : table) (v : id) = &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; t &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; &lt;br /&gt;                                      [] =&amp;gt; NONE&lt;br /&gt;                                    | (ident, num)::cdr =&amp;gt; &lt;span style="color: #00ff7f;"&gt;if&lt;/span&gt; v = ident &lt;span style="color: #00ff7f;"&gt;then&lt;/span&gt; SOME num&lt;br /&gt;                                                           &lt;span style="color: #00ff7f;"&gt;else&lt;/span&gt; lookup cdr v&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;exception&lt;/span&gt; NotInTable;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #00ff7f;"&gt;fun&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;interp&lt;/span&gt; p = &lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;br /&gt;        &lt;span style="color: #00ff7f;"&gt;fun&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;interp_stm&lt;/span&gt; (s : stm) (t : table) = &lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; s &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt;&lt;br /&gt;                SEQ (s1, s2) =&amp;gt; interp_stm s2 (interp_stm s1 t)&lt;br /&gt;              | ASSIGN (v, e) =&amp;gt; &lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (num, tab) = interp_exp e t&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                    update t v num&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;              | PRINT lst =&amp;gt; &lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;fun&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;intlist_maker&lt;/span&gt; (l, t) = &lt;br /&gt;                        &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; (l, t) &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; &lt;br /&gt;                            ([], t) =&amp;gt; ([], t)&lt;br /&gt;                          | ((car::cdr), t) =&amp;gt; &lt;br /&gt;                            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt;&lt;br /&gt;                                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (num, t) = interp_exp car t;&lt;br /&gt;                                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (intl, t) = intlist_maker (cdr, t)&lt;br /&gt;                            &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                                (num::intl, t)&lt;br /&gt;                            &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;fun&lt;/span&gt; &lt;span style="color: #ffd700;"&gt;p&lt;/span&gt; il = &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; il &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt;&lt;br /&gt;                                   [] =&amp;gt; print &lt;span style="color: #ffa07a;"&gt;"\n"&lt;/span&gt;&lt;br /&gt;                                 | [car] =&amp;gt; print ((Int.toString car) ^ &lt;span style="color: #ffa07a;"&gt;"\n"&lt;/span&gt;)&lt;br /&gt;                                 | (car::cdr) =&amp;gt; (print ((Int.toString car) ^ &lt;span style="color: #ffa07a;"&gt;" "&lt;/span&gt;); p cdr)&lt;br /&gt;                    &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (intl, tbl) = intlist_maker (lst, t)&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                    p intl; tbl&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #00ff7f;"&gt;and&lt;/span&gt; &lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #add8e6;"&gt;(* &lt;/span&gt;&lt;span style="color: #add8e6;"&gt;exp * table -&amp;gt; int * table &lt;/span&gt;&lt;span style="color: #add8e6;"&gt;*)&lt;/span&gt;&lt;br /&gt;        interp_exp (e : exp) (t : table) = &lt;br /&gt;        &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; e &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; &lt;br /&gt;            VAR ident =&amp;gt; &lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;looked_up&lt;/span&gt; = lookup t ident&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; looked_up &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt;&lt;br /&gt;                    SOME num =&amp;gt; (num, t)&lt;br /&gt;                  | NONE =&amp;gt; &lt;span style="color: #00ff7f;"&gt;raise&lt;/span&gt; NotInTable&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;          | ESEQ (s, expr) =&amp;gt; &lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; &lt;span style="color: #ff7f50;"&gt;stm_tab&lt;/span&gt; = interp_stm s t;&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (num, tab) = interp_exp expr stm_tab&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                (num, tab)&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;          | CONST num =&amp;gt; (num, t)&lt;br /&gt;          | BINOP (e1, b, e2) =&amp;gt; &lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;let&lt;/span&gt; &lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (num1, tab1) = interp_exp e1 t;&lt;br /&gt;                &lt;span style="color: #00ff7f;"&gt;val&lt;/span&gt; (num2, tab2) = interp_exp e2 tab1&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;                (&lt;span style="color: #00ff7f;"&gt;case&lt;/span&gt; b &lt;span style="color: #00ff7f;"&gt;of&lt;/span&gt; &lt;br /&gt;                     PLUS =&amp;gt; ((num1 + num2), tab2)&lt;br /&gt;                   | MINUS =&amp;gt; ((num1 - num2), tab2)&lt;br /&gt;                   | TIMES =&amp;gt; ((num1 * num2), tab2)&lt;br /&gt;                   | DIV =&amp;gt; ((num1 div num2), tab2))&lt;br /&gt;            &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;in&lt;/span&gt;&lt;br /&gt;        interp_stm p []; ()&lt;br /&gt;    &lt;span style="color: #00ff7f;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The code was generated using &lt;a href="http://fly.srk.fer.hr/~hniksic/emacs/htmlize.el"&gt;htmlize&lt;/a&gt; for emacs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-155671709969870355?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/155671709969870355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=155671709969870355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/155671709969870355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/155671709969870355'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/09/first-big-program.html' title='First Big Program!'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-7274646454221915333</id><published>2008-09-09T14:36:00.000-04:00</published><updated>2008-09-09T14:44:34.251-04:00</updated><title type='text'>Ocaml FAIL</title><content type='html'>I wrote this code in Ocaml without even realizing it. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_mNQk1MJTzoc/SMbCR-GA84I/AAAAAAAAAA4/5P4CdwgYVhw/s1600/destiny.png" alt="[destiny.png]" border=0&gt;&lt;br /&gt;&lt;br /&gt;It seems that it is my destiny to &lt;a href="http://failblog.org"&gt;fail&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-7274646454221915333?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/7274646454221915333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=7274646454221915333' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/7274646454221915333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/7274646454221915333'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/09/it-seems-that-it-is-my-destiny-to-fail.html' title='Ocaml FAIL'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mNQk1MJTzoc/SMbCR-GA84I/AAAAAAAAAA4/5P4CdwgYVhw/s72-c/destiny.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-2113047227980578701</id><published>2008-09-05T20:05:00.000-04:00</published><updated>2008-09-05T20:08:25.703-04:00</updated><title type='text'>The Lord of Elisp</title><content type='html'>Knuth’s Tex for the Math-kings of sigma, and pi,&lt;br /&gt;Unix vim for the Server-lords with their O’Reilly tomes,&lt;br /&gt;Word for Mortal Men doomed to die,&lt;br /&gt;Emacs from the Bearded One on his Gnu throne,&lt;br /&gt;In the land of Stallman where free software lies.&lt;br /&gt;One Emacs to rule them all. One Emacs to find them,&lt;br /&gt;One Emacs to take commands and to the keystrokes bind them,&lt;br /&gt;In the land of Stallman, where free software lies.&lt;br /&gt;&lt;br /&gt;--Raffael Cavallero&lt;br /&gt;&lt;br /&gt;I have been having fun playing with my .emacs file recently.&lt;br /&gt;&lt;br /&gt;In other news, I am pretending to be a Yale student by getting discounts at the Yale Bookstore, going to Payne Whitney, auditing classes, and stealing Yale wireless. All with an old netID and keycard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-2113047227980578701?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/2113047227980578701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=2113047227980578701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2113047227980578701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/2113047227980578701'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/09/lord-of-elisp.html' title='The Lord of Elisp'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-8521381388572037898</id><published>2008-08-31T10:46:00.001-04:00</published><updated>2008-08-31T11:16:27.102-04:00</updated><title type='text'>xkcd = my life?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/moving.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://imgs.xkcd.com/comics/moving.png" alt="" border="0" /&gt;&lt;/a&gt;Subtitle: &lt;span class="attribute-value"&gt;&lt;span style="font-family:monospace;"&gt;&lt;/span&gt;We need a special holiday to honor the countless kind souls with unsecured networks named 'linksys'.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Sometimes I think that my life is paralleling xkcd. Here is another strikingly relevant cartoon from Mr. Munroe that manages to capture my status quo. Up until yesterday, I was hijacking internet sporadically from some hapless user who set up a linksys router and did not encrypt it. Finally, the comcast man came, and after a bit of trouble getting the modem to work properly I managed to set up the &lt;a href="http://catalog.belkin.com/IWCatSectionView.process?Section_Id=200340"&gt;Belkin&lt;/a&gt; 802.11n router -- it's BLAZIN'! So much better than g or g+. So here I am posting again, after wandering the streets of New Haven looking for free wireless from Au Bon Pain, The Publick Cup, Atticus, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xanga.com/chrisvanlang"&gt;Chris&lt;/a&gt; is in town! We hung out at Rudy's and GPSCY last night, and will be playing some pickup ultimate for the old times. Good luck at Stanford, Chris!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-8521381388572037898?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/8521381388572037898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=8521381388572037898' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8521381388572037898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/8521381388572037898'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/08/sometimes-i-think.html' title='xkcd = my life?'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-1311161657789810256</id><published>2008-08-19T12:04:00.000-04:00</published><updated>2008-08-21T12:33:27.286-04:00</updated><title type='text'>Emacs and Ocaml</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mNQk1MJTzoc/SKr0_gmMY_I/AAAAAAAAAAw/HTg1UQnwnhQ/s1600-h/real_programmers.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_mNQk1MJTzoc/SKr0_gmMY_I/AAAAAAAAAAw/HTg1UQnwnhQ/s320/real_programmers.png" alt="" id="BLOGGER_PHOTO_ID_5236266888690689010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now that I am becoming a "real" programmer, I have made the decision to learn how to use the behemoth of a text editor, &lt;a href="http://en.wikipedia.org/wiki/Emacs"&gt;Emacs&lt;/a&gt;. A feature-rich and highly customizable editor, Emacs is distributed by the &lt;a href="http://en.wikipedia.org/wiki/GNU_project"&gt;GNU project&lt;/a&gt; and has historically been one of the most popular text editors in programming history, along with &lt;a href="http://en.wikipedia.org/wiki/Vi"&gt;vi&lt;/a&gt;. Indeed, there has been something of an "Editor War" between the proponents of Emacs and vi for the last twenty years or so, which lead to much flaming on threads, quasi-religious cult movements, etcetera. This was expounded by &lt;a href="http://en.wikipedia.org/wiki/Randall_Munroe"&gt;Randall Munroe&lt;/a&gt; in his recent &lt;a href="http://www.xkcd.com/"&gt;xkcd&lt;/a&gt; cartoon, shown above.&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Learning Emacs is like learning how to drive stick. It requires a significant investment of time and an understanding of how things work on a more fundamental level, but in the end I believe it is rewarding since you have a much greater control over the machine that you are using. However, instead of having just four or five gears, it is possible to draw on over twenty years of customization by computer programmers around the world that have enabled optimization and automation of nearly every task a programmer needs to do. Effortlessly, I can invoke shell commands, yank snippets of code, use regular expressions to search through files, and edit using multiple windows. I have come to realize that Emacs can, in fact, do everything short of writing the code for me.  &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Emacs is, however, useless without some good code to input into it. My new mentor,  &lt;a href="http://homes.gersteinlab.org/people/ashish/"&gt;Ashish&lt;/a&gt; in the &lt;a href="http://bioinfo.mbb.yale.edu/"&gt;Gerstein lab&lt;/a&gt;, uses &lt;a href="http://en.wikipedia.org/wiki/Ocaml"&gt;Ocaml&lt;/a&gt; to develop new bioinformatic algorithms, and recommended that I start learning it. I personally had never heard of Ocaml – I expected to learn Perl, Python, perhaps some more Java, since those are the languages popularly used for bioinformatics.  &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;In my one week of using Ocaml, I have become rather attached to it. Like Emacs, it is at first difficult to learn, especially from a conventional Java/C point of view, since it is strongly typed and the syntax is very mathematical. Indeed, it was developed in 1996 by several French mathematicians, and has not achieved great popularity in the US. Yet it has odd ways of being incredibly concise. As an example, here is a Java program that creates a method called “average” that takes the average of two numbers and prints it.  &lt;/p&gt;       &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="color:#38b63c;"&gt;public class Average&lt;br /&gt;     {&lt;br /&gt;         public static void main(String[] args)&lt;br /&gt;       {&lt;br /&gt;                System.out.println(average(1,3));&lt;br /&gt;      }&lt;/span&gt;&lt;/p&gt;&lt;span style="color:#38b63c;"&gt;      &lt;/span&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style="color:#38b63c;"&gt;         public static double average(double a, double b)&lt;br /&gt;            {&lt;br /&gt;           double avg = (a + b)/2;&lt;br /&gt;                               return avg;&lt;br /&gt;       }&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Here is the corresponding Ocaml program:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="color:#38b63c;"&gt;let average x y = (x +. y) /. 2 in average 1 3;;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;In addition, Ocaml can reach at least 50% the speed of C programs, which is very good considering that it is also a high level, object-oriented, functional programming language. Also, I can read my code after I write it, which is totally not true for Perl. I'm looking forward to learning it.   &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;I also had a great weekend at Tanglewood, where I heard &lt;a href="http://jessicatina.blogspot.com/"&gt;Jess&lt;/a&gt; play an amazing solo for the &lt;a href="http://en.wikipedia.org/wiki/George_Enescu"&gt;Enescu&lt;/a&gt; octet. I'm also learning some PHP to make a webpage for her new quartet, the Brunell quartet!  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-1311161657789810256?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/1311161657789810256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=1311161657789810256' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1311161657789810256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/1311161657789810256'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/08/emacs-and-ocaml.html' title='Emacs and Ocaml'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mNQk1MJTzoc/SKr0_gmMY_I/AAAAAAAAAAw/HTg1UQnwnhQ/s72-c/real_programmers.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-5512710157220119388</id><published>2008-08-12T12:01:00.001-04:00</published><updated>2008-08-12T12:18:05.641-04:00</updated><title type='text'>Calling the Fire Brigade</title><content type='html'>Last week, I smelled gas in the apartment. Upon further inspection, I noticed that a &lt;a href="http://en.wikipedia.org/wiki/Pilot_light"&gt;pilot light&lt;/a&gt; in the oven was out, causing a natural gas buildup in the oven. I opened the oven, aired out the room, and notified maintenance, who said they'd take care of it.&lt;br /&gt;&lt;br /&gt;A week later, I come back into the apartment and the room just reeks of gas (actually, for the scientists out there, it's not the methane that smells, but an odorant they put in called &lt;a href="http://en.wikipedia.org/wiki/Butanethiol"&gt;butanethiol&lt;/a&gt;). After opening all the windows to max capacity and fanning the room, I e-mail, call, and knock on the door of maintenance -- no response. I waited for four hours, then tried again. Still no response. At this point, I'm debating whether to just light the pilot myself, but the strong smell of gas convinces me otherwise.&lt;br /&gt;&lt;br /&gt;Finally, I take matters into my own hands and call the fire department to see what to do. "We'll send someone over," the operator tells me. Three minutes later, a fire truck is pulling in, sirens blaring, and six firefighters hop out in full gear. At this point, I just want to hide somewhere, but I let the firefighters in and they come up to investigate. They do determine that there is a good amount of gas in the apartment, but not enough to cause a spontaneous explosion, so they remove the oven, turn off the gas, and call up the gas company to send someone over.&lt;br /&gt;&lt;br /&gt;Well, all's well that ends well. The gas company guy came to look at the oven, and determined that there are some major problems with it that could indeed lead to an explosion, and sent a message to the landlord. So, after all the craziness, fire trucks coming to my apartment and all-- I'm getting a new stove, at least!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-5512710157220119388?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/5512710157220119388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=5512710157220119388' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5512710157220119388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/5512710157220119388'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/08/calling-fire-brigade.html' title='Calling the Fire Brigade'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-3495352925034263466</id><published>2008-08-10T10:30:00.000-04:00</published><updated>2008-08-11T01:35:02.627-04:00</updated><title type='text'>A weekend in New York</title><content type='html'>I spent this weekend up in New York, visiting my old friends Sidharth and &lt;a href="http://tillperfect.net/"&gt;Juliet&lt;/a&gt;. It was two days spent very differently -- Sidharth is living in upscale Greenwich Village, and Juliet is living in an essentially all-black community, Crown Heights, in Brooklyn. It's amazing that two completely different worlds can coexist just a subway stop away from each other.&lt;br /&gt;&lt;br /&gt;The first day with Sidharth, who is now a &lt;a href="http://www2.goldmansachs.com/"&gt;Goldman-Sachs&lt;/a&gt; technologist, we spent walking around Greenwich Village. There is a &lt;a href="http://www.mamounsfalafel.com/"&gt;Mamoun's&lt;/a&gt; falafel restaurant there, which as I suspected, was related to the one in New Haven! We then went to a Belgian bar, where we met up with some of Sidharth's co-workers and imbibed delirium tremens and lambic. It was a great time -- we talked until 3 or 4 in the morning, and then had some sandwiches before heading back to Sidharth's loft. It was like college all over again, in a way. I even ran into Reuben, a Yalie who also played on &lt;a href="http://www.yale.edu/superfly/B948FFE3-654C-4816-953F-6A989A82DDF0.html"&gt;Superfly&lt;/a&gt; with me!&lt;br /&gt;&lt;br /&gt;The second day was unexpectedly interesting, and definitely took me off guard. I had actually never been to Brooklyn before, home of Mos Def, The Notorious B.I.G., and the GZA. Juliet and her friend Billy took me around town to a block party called "Rock the Block" that featured three locations, which respectively had artwork, fashion, and live music. It was kind of otherworldly -- on the fourth floor of a run-down, decrepit apartment complex there was a veritable museum of  art which included urban, gothic, and ultra-modern forms. We spent only a short amount of time at the fashion location, but lingered for about two hours at the third location, listening to upcoming bands play in someone's backyard while people feasted on soul food. It was actually quite fun -- the music was good, and the folks were really progressive, singing songs like "Vote for Obama" and getting the audience to sing, and the MCs tried to spread the word to call everyone "my dude" instead of "my n*****." By the way, if you hadn't caught on, I was one of maybe twenty non-black people at the concert.&lt;br /&gt;&lt;br /&gt;My world was jolted again when we went back to Manhattan into Chinatown later that night, where we tried to meet up with one of Juliet's friends at a lounge. But ultimately we found that the lounge was too crowded and raucous for our taste, so we headed back into Brooklyn. We finally ended up at a backyard party in Crown Heights at around 1 am, which is definitely the most outlandish experience I had this weekend. The smell of pot was everywhere, and this time Juliet, Billy, and I were literally the only non-black people there except a handful of hipsters. At first, I'm not going to lie, I was kind of unnerved. But Juliet seemed to know the right approach to situations like these, which was to get some macaroni'n'cheese and do the electric slide with everyone else. Billy and I watched on, and joined in on a Stevie Wonder-style Happy Birthday song while cake was dished out.&lt;br /&gt;&lt;br /&gt;Talk about a weekend in New York. In all, I enjoyed myself quite a bit, but I've come to the conclusion that New York isn't quite the place for me. While Manhattan is fun to visit, I don't think my lifestyle is compatible with the decadent and fast-paced environment filled with financial experts and consultants.  And while Brooklyn is apparently undergoing a bit of a cultural renaissance right now, I don't have the same gypsy spirit that Juliet has, so I don't think I'd feel quite at home there either.&lt;br /&gt;&lt;br /&gt;And so it's back to New Haven I go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-3495352925034263466?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/3495352925034263466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=3495352925034263466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3495352925034263466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/3495352925034263466'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/08/weekend-in-new-york.html' title='A weekend in New York'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5667255696238653528.post-481495619703291127</id><published>2008-08-08T02:24:00.001-04:00</published><updated>2008-08-08T03:47:50.019-04:00</updated><title type='text'>Macbook: Triple booting monster</title><content type='html'>After a nightmare of a time trying to use &lt;a href="http://gparted.sourceforge.net/"&gt;gparted&lt;/a&gt; to partition my hard drive, I finally gave up, reinstalled Mac OS X, and used &lt;a href="http://en.wikipedia.org/wiki/Disk_Utility"&gt;Disk Utility&lt;/a&gt; to do it. Thanks to Jeff Huang for helping me out.&lt;br /&gt;&lt;br /&gt;The result: I am now the proud of owner of an ass-kicking, triple-booting Macbook that runs Mac OS 10.4.11, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; 8.04 "Hardy Heron", and Windows XP Professional.&lt;br /&gt;&lt;br /&gt;It is interesting to compare the three operating systems. In terms of usability, Mac and Windows definitely take the cake -- perhaps Mac more so, because of its search features and its Unix-based terminal. Ubuntu is just downright hard to use. In order to get everything working properly, you need to go into the command line, edit files by hand, and generally download packages helter-skelter using the &lt;a href="http://en.wikipedia.org/wiki/Synaptic_Package_Manager"&gt;Synaptic Package Manager&lt;/a&gt;. However, after the initial nightmare of configuring things in Ubuntu, I have a much deeper understanding of how operating systems work and am very comfortable tinkering around with the innards of a Unix-like OS. So, in spite of the learning curve, I think that ultimately Ubuntu will be the operating system of choice.&lt;br /&gt;&lt;br /&gt;In my remaining time at home, I will be learning &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; and &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; to prepare for my time in the &lt;a href="http://bioinfo.mbb.yale.edu/"&gt;Gerstein lab&lt;/a&gt;. I also can't wait to visit my wonderful girlfriend &lt;a href="http://jessicatina.blogspot.com/"&gt;Jess&lt;/a&gt; at the &lt;a href="http://www.bso.org/bso/mods/toc_01_gen_noSubCat.jsp;jsessionid=SF2BJFEVAKOXMCTFQMGSFEQ?id=bcat5240076"&gt;Tanglewood Music Center&lt;/a&gt; in two weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5667255696238653528-481495619703291127?l=koppology.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koppology.blogspot.com/feeds/481495619703291127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5667255696238653528&amp;postID=481495619703291127' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/481495619703291127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5667255696238653528/posts/default/481495619703291127'/><link rel='alternate' type='text/html' href='http://koppology.blogspot.com/2008/08/macbook-triple-booting-monster.html' title='Macbook: Triple booting monster'/><author><name>David</name><uri>http://www.blogger.com/profile/14326089794226622680</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_mNQk1MJTzoc/SJvl-HeXdtI/AAAAAAAAAAY/6yV7D_i2uOk/s1600-R/david2good_07.jpg'/></author><thr:total>4</thr:total></entry></feed>
