<?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-2043135047960620857</id><updated>2012-02-16T03:03:48.122-05:00</updated><category term='firearms'/><category term='gpu'/><category term='ferroequinology'/><category term='avx'/><category term='ocelot'/><category term='vacation'/><category term='scooters'/><category term='sailing'/><category term='fall'/><category term='indomitable'/><category term='mountaineering'/><category term='computing'/><category term='290'/><title type='text'>Spatchcock</title><subtitle type='html'>Unrestrained corporate greed</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default?start-index=101&amp;max-results=100'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>126</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-1336993374028476647</id><published>2011-12-13T12:26:00.002-05:00</published><updated>2011-12-13T14:34:12.929-05:00</updated><title type='text'>On to WordPress</title><content type='html'>As a demonstration, I followed WordPress's five-minute installation process and the results are fairly gratifying. Thus, I plan on ceasing future updates to this blog (I write about 30 posts a year and publish 20 of them; it's not like they're that frequent).&lt;br /&gt;&lt;br /&gt;Look for future updates at &lt;a href="http://akerr.net/andrew/blog/"&gt;http://akerr.net/andrew/blog/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See you there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-1336993374028476647?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/1336993374028476647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=1336993374028476647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1336993374028476647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1336993374028476647'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/12/on-to-wordpress.html' title='On to WordPress'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4913336483410287433</id><published>2011-09-01T23:03:00.002-04:00</published><updated>2011-09-01T23:09:20.961-04:00</updated><title type='text'>Software Rasterization</title><content type='html'>The previous post awakened the part of me that is somewhat passionate about graphics programming. In the last three nights, I threw together a software rasterizer that is now capable of perspective-correct texture mapping in addition to point lights. &lt;br /&gt;&lt;br /&gt;Here is a screenshot:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://akerr.net/andrew/downloads/rotating-cube.png" alt="Rotating cube" /&gt;&lt;br /&gt;&lt;br /&gt;And &lt;a href="http://akerr.net/andrew/downloads/rotating-cube.avi"&gt;here is a video&lt;/a&gt; that VLC should have no trouble playing.&lt;br /&gt;&lt;br /&gt;Some details:&lt;br /&gt;&lt;br /&gt;The rasterization algorithm is very primitive. Triangle setup first ensures clockwise vertex ordering (cross product of the two edge vectors followed by a sign comparison) and culls backfaces. Next, a transformation to Barycentric coordinates is computed, and blocks of pixels in the render target are transformed and compared. If their Barycentric coordinates are found to lie within the triangle, they are used to interpolate vertex color and texture samples. &lt;br /&gt;&lt;br /&gt;It is not yet GPU accelerated, though expect a CUDA implementation to follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4913336483410287433?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4913336483410287433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4913336483410287433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4913336483410287433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4913336483410287433'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/09/software-rasterization.html' title='Software Rasterization'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4715615854570682525</id><published>2011-07-22T11:59:00.003-04:00</published><updated>2011-07-22T12:14:45.333-04:00</updated><title type='text'>ASCII Torus</title><content type='html'>Inspired by &lt;a href="http://a1k0n.net/2011/07/20/donut-math.html"&gt;this guy's&lt;/a&gt; 3D torus rendered to an ASCII palette, I decided to spend an hour last night implementing something similar. Here's the &lt;a href="http://www.akerr.net/andrew/misc/simple3d.cpp"&gt;source&lt;/a&gt;, and here's the result. It was a fun exercise:&lt;br /&gt;&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;br /&gt;      !*#$$$$$#*=~-,,,                     ~:~::!*#$$$$$#*!     &lt;br /&gt;     ;!*#$$$$$#*=,.                           ~~!*#$$$$$#*!;    &lt;br /&gt;    -;!*#$$$$$$#!,                             ~*#$$$$$$#*!;,   &lt;br /&gt;    ~:;==**#$$$@@@$                           #@@@$$$#**!=;~,   &lt;br /&gt;    ~~~:;=!*###$$@@@@                       @@@@$$###*!=;:~-,   &lt;br /&gt;     ~~~::;=!***#$$$@@@@@@             @@@@@@$$$#***!=;:~~--    &lt;br /&gt;     :~~~~~::;=!!**###$$$$@@@@@@@@@@@@@$$$$###**!!=;;:~~---,    &lt;br /&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;&lt;br /&gt;And here it is rendered by the same utility to a higher resolution.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.akerr.net/images/misc/torus3d.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4715615854570682525?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4715615854570682525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4715615854570682525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4715615854570682525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4715615854570682525'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/07/ascii-torus.html' title='ASCII Torus'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7790752309211142111</id><published>2011-07-20T12:03:00.006-04:00</published><updated>2011-07-20T12:06:16.961-04:00</updated><title type='text'>Screencapture Utility</title><content type='html'>I wrote a quick'n'dirty alternative to &lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt; for Linux because Shutter was always so crappy. It's a simple Python script that enables on-the-fly cropping and immediate upload to the configured server. Took about ten minutes to research, write, and debug.&lt;br /&gt;&lt;br /&gt;Here's a sample:&lt;br /&gt;&lt;img src="http://www.akerr.net/images/misc/uploads/captured-image-c7ca3010df9df1b3d5ab9f20c9ed14d8.png" alt="Sample screenshot" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-7790752309211142111?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7790752309211142111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7790752309211142111' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7790752309211142111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7790752309211142111'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/07/screencapture-utility.html' title='Screencapture Utility'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6282551539153200414</id><published>2011-06-08T12:55:00.003-04:00</published><updated>2011-06-08T13:24:55.320-04:00</updated><title type='text'>Alpine Ascents Successful Climb of Mount Everest</title><content type='html'>In brighter news, Seattle-based &lt;a href="http://www.alpineascents.com/"&gt;Alpine Ascents&lt;/a&gt; is currently wrapping up a &lt;a href="http://expedition2011.blogspot.com/"&gt;successful summit assault on both Everest&lt;/a&gt; and nearby Lhotse a day later. A &lt;a href="http://www.akerr.net/images/preserve/alpine-ascents-everest.png"&gt;topological map&lt;/a&gt; illustrates the incredible vertical and horizontal distances covered. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/preserve/alpine-ascents-everest-satellite.png"&gt;&lt;img src="http://www.akerr.net/images/preserve/alpine-ascents-everest-satellite-small.png" alt="Alpine Ascents May 2011 successful summit assaults of Mount Everest and Lhotse" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This shows the route from base camp, traversal to Camp I across the Khumbu Icefall, Advanced Base Camp II at 21,000 ft, Camp III at  24,000 ft, Lhotse High Camp, and finally Camp IV at 26,000ft. From Camp IV, the route to the summit ascends 3,000 ft during a grueling 12 hour climb requiring a 9pm departure time to reach the summit by the next morning. The elevation profile shows the several returns to base camp from Camp II during the acclimatization period. It also shows the ascent of Lhotse by three of the climbers from the Everest group prior to the group's descent.&lt;br /&gt;&lt;br /&gt;Alpine Ascents does a pretty thorough job listing their itinerary and equipment recommendations. Check it out, particularly the group electronics gear.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6282551539153200414?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6282551539153200414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6282551539153200414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6282551539153200414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6282551539153200414'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/06/alpine-ascents-successful-climb-of.html' title='Alpine Ascents Successful Climb of Mount Everest'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4134830186938330396</id><published>2011-06-08T11:39:00.010-04:00</published><updated>2011-06-08T12:55:04.754-04:00</updated><title type='text'>Into Thin Air</title><content type='html'>I recently finished reading &lt;a href="http://www.amazon.com/Into-Thin-Air-Personal-Disaster/dp/0385492081"&gt;Into Thin Air&lt;/a&gt;, Jon Krakauer's incredible description of his summit attempt on Mount Everest during what became the &lt;a href="http://en.wikipedia.org/wiki/1996_Mount_Everest_disaster"&gt;1996 Mount Everest Disaster&lt;/a&gt;. The narrative describes Krakauer's experience during the heyday of commercial mountaineering guide services. As a journalist writing for &lt;i&gt;Outside&lt;/i&gt; magazine, Krakauer described what was hoped to be a routine climb along Mount Everest's South Col summit route used by Hillary and Norgay during their record-setting first summit in 1953, now the standard route.&lt;br /&gt;&lt;br /&gt;During summit day, slow progress by inexperienced climbers and judgment errors by guides set the stage for tragedy when a storm quickly materialized along the southern ridge. Blowing 40 knots and producing incredible wind chills, many tardy climbers including the leader of Krakauer's expedition were trapped high on the upper mountain. By this time, Krakauer himself had nearly made it to high camp in the col and narrowly escaped incredible amounts of exposure in the high winds. Lack of visibility thwarted rescue attempts, and by the next day eight members from two expeditions had perished while others suffered extreme frost bite.&lt;br /&gt;&lt;br /&gt;An expedition filming the IMAX documentary &lt;a href="http://www.amazon.com/Everest-Liam-Neeson/dp/B00001U0E2/ref=sr_1_1?ie=UTF8&amp;qid=1307548107&amp;sr=1-1-catcorr"&gt;Everest&lt;/a&gt; offered assistance and supplies such as additional bottled oxygen in addition to arranging a helicopter evacuation of two frost bitten climbers. This film hauntingly documents their perspective of the disaster.&lt;br /&gt;&lt;br /&gt;One of the most striking components of this story is how altitude clouded the judgments of the people involved. Several times, someone attempting to adjust their oxygen regulators would get it wrong and either turn off the flow of O2 entirely or drain the tank in minutes. Tragically, one of the guides who had reached high camp during the storm incorrectly stated that all of the oxygen bottles were empty when, in fact, at least two were not. Krakauer speculates this incorrect information changed the plans of Rob Hall, the lead climber, who elected to stay with a client near &lt;a href="http://7summits.com/images/media/haston_on_hillary_step2b.jpg"&gt;Hillary Step&lt;/a&gt;, just below the summit, where both he and his client perished.&lt;br /&gt;&lt;br /&gt;The 1996 Everest Disaster demonstrates the consequences of hubris high on a mountain. One of the guides from an American expedition wasn't climbing with oxygen. While this might be a personal challenge to overcome at other times, doing so while employed to take care of others is exceedingly dangerous. When disaster struck, he was unable to assist; he couldn't even wait around with a distressed climber, for the lack of oxygen slows human metabolism such that the only substantial source of internal heat is produced from muscles as they are operating. Additionally, the many climbers from multiple commercial expeditions created bottlenecks that delayed summit times and increased exposure to weather-related hazards; if the storm had struck even an hour later, many more people are likely to have made it to [limited] shelter in the South Col. Finally, turn around times were ignored at great peril.&lt;br /&gt;&lt;br /&gt;One of the other lessons here is no climb is guaranteed, and achieving the summit is only the half-way point. Mountaineering is inherently quite dangerous, particularly above 8000m where oxygen levels are so low that it's virtually impossible to carry someone. Anyone considering undertaking such a venture should come to terms with the fact that rescue is nearly impossible; doubts in one's abilities, fitness levels, and weather conditions should be headed. Underscoring this point, most of the climbing along the upper mountain is done without ropes linking the climbers; falls are so perilous on the steep slopes that doing so would simply increase the scope of one person's tragedy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4134830186938330396?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4134830186938330396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4134830186938330396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4134830186938330396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4134830186938330396'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/06/into-thin-air.html' title='Into Thin Air'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7038952609110559035</id><published>2011-05-11T10:25:00.003-04:00</published><updated>2011-05-11T10:26:43.580-04:00</updated><title type='text'>Coquette</title><content type='html'>&lt;a href="http://www.windfinder.com/forecast/lake_lanier_gainesville"&gt;WindFinder&lt;/a&gt; is a coquette and a tease. &lt;i&gt;Spectacular sailing conditions&lt;/i&gt; are always forecast four days out. When time moves forward, things always settle down to calm conditions that aren't worth the drive up.&lt;br /&gt;&lt;br /&gt;Summer must be upon us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-7038952609110559035?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7038952609110559035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7038952609110559035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7038952609110559035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7038952609110559035'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/05/coquette.html' title='Coquette'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-880122840488576144</id><published>2011-04-10T22:08:00.003-04:00</published><updated>2011-04-10T22:14:32.146-04:00</updated><title type='text'>DEC is Dead</title><content type='html'>I was perusing Amazon and came upon this title: &lt;a href="http://www.amazon.com/DEC-Dead-Long-Live-Corporation/dp/1576753050/ref=pd_sim_b_3"&gt;&lt;i&gt;DEC is Dead. Long Live DEC&lt;/i&gt;&lt;/a&gt;. This book describes the rise and fall of Digital Equipment Corporation, a legend in the computing industry that introduced many innovations in processor and system design. Many of the architects went on to other companies such as AMD and Transmetta and continued to advance the state of the art. It's an appealing topic, to be sure.&lt;br /&gt;&lt;br /&gt;I wanted to point that out. &lt;br /&gt;&lt;br /&gt;Additionally, the title seems to confuse the etymological implications of "The &lt;i&gt;x&lt;/i&gt; is dead. Long live &lt;i&gt;y&lt;/i&gt;." In this case, even if &lt;i&gt;x&lt;/i&gt; and &lt;i&gt;y&lt;/i&gt; appear to be the same improper noun, lexically, they never refer to the same individual or entity; that'd be a contradiction. The phrase actually refers to a transitional event, where the life of an old entity, &lt;i&gt;x&lt;/i&gt;, is over and we should now bestow praise and hope on the life of a new entity, &lt;i&gt;y&lt;/i&gt;. See &lt;a href="http://en.wikipedia.org/wiki/The_King_is_dead._Long_live_the_King."&gt;this&lt;/a&gt; for a foothold on more information.&lt;br /&gt;&lt;br /&gt;I've seen a lot of smart people get this wrong, and evidently someone solidified their mistake as the title of their book. In this case, I suggest &lt;i&gt;DEC is dead. Long live Intel, AMD, and Transmetta.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;You're welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-880122840488576144?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/880122840488576144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=880122840488576144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/880122840488576144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/880122840488576144'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/04/dec-is-dead.html' title='DEC is Dead'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6297126580561413223</id><published>2011-04-04T13:27:00.003-04:00</published><updated>2011-04-04T13:29:08.685-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sailing'/><title type='text'>Sailing Adventure</title><content type='html'>Saturday, I went sailing 420s on Lake Lanier with a labmate. Of five boats that went out, we were one of two that didn't both capsize and require a rescue. The other boat that avoided capsize spent much of the morning with only the jib flying and left early.&lt;br /&gt;&lt;br /&gt;Winds were intense, from 15 to 20 mph, and waves were high. Our 420 achieved planing speed several times; the sudden boost in speed and rudder authority was reminiscent of a jetski.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.windfinder.com/forecast/lake_lanier_gainesville"&gt;Windfinder&lt;/a&gt; provides a great and detailed wind forecast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6297126580561413223?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6297126580561413223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6297126580561413223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6297126580561413223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6297126580561413223'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/04/sailing-adventure.html' title='Sailing Adventure'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5967096555231515337</id><published>2011-03-10T15:02:00.016-05:00</published><updated>2011-03-16T00:25:48.971-04:00</updated><title type='text'>Exploring R.M.S. Queen Mary</title><content type='html'>&lt;a href="http://www.akerr.net/images/2011March06/IMG_1512.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1512.JPG" alt="Bow of RMS Queen Mary" width="512" height="384" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.queenmary.com/"&gt;RMS Queen Mary&lt;/a&gt; is an ocean liner from the Cunard Line in service from 1936 to 1967. Propelled by four screws, each moved by a collection of high-speed steam turbines, Queen Mary offered the fastest civilian Atlantic crossings available. Her record setting voyage of 3 days, 21 hours earned her the &lt;a href="http://en.wikipedia.org/wiki/Blue_Riband"&gt;Blue Riband&lt;/a&gt; which she held for 14 years. Unlike many of the other liners of the day, Queen Mary survived her service life and found a permanent home along the coast of Long Beach, California, where she now accommodates hotel guests, numerous restaurants, tourists, and a community center built into her forward engine room and aft boiler rooms.&lt;br /&gt;&lt;br /&gt;On Sunday morning, I drove up to Long Beach along the Pacific Coast Highway to spend as much of the day as possible exploring Queen Mary's decks and interior spaces, hoping to see as much of the ship as possible. Displacing 81,000 tons and with a length of 1,020 ft, I would surely run out of daylight long before I ran out of things to see.&lt;br /&gt;&lt;br /&gt;Hopefully this blog post captures some of the highlights of my visit.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Forward well deck, superstructure, and bridge of RMS Queen Mary&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1513.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1513.JPG" alt="Forward well deck, superstructure, and bridge of R.M.S. Queen Mary" width="512" height="384" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Port side showing bridge wing, hull, and superstructure.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1515.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1515.JPG" height="512" width="384" alt="Port side showing bridge wing, hull, and superstructure" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Various controls and telegraphs in the aft engine room. The forward engine room housing propulsion machinery for the outer screws has been emptied of contents, and a public area has been constructed in its place. I think they may have removed part of the bulkhead separating it from the aft-most boiler room.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1518.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1518.JPG" width="512" height="384" alt="Gauges and valve controls in aft engine room." /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Controls and telegraphs in the aft engine room. The telegraph is how the bridge suggests a speed and direction to the engineers who actually adjust the steam valves accordingly. Turbines aren't typically reversible, so a separate set of high-pressure and intermediate pressure turbines are provided for moving astern. Note, the "astern" valves are open in spite of the request to move "ahead slow;" this is an unrealistic configuration.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1519.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1519.JPG" width="512" height="384" alt="Controls and telegraph in aft engine room." /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The engine room is large, and structural elements are clearly visible. Several of the turbines and gearboxes are in place and exposed revealing large cast iron gearing and the lowest-pressure turbine rotor. The author appreciates seeing exposed machinery.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1523.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1523.JPG" width="512" height="384" alt="Looking aft from control platform in aft engine room" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Looking forward along the port side at the Promenade (A) Deck level. Many of the internal passage ways inside the ship are blocked, so getting from the engine room to the promenade deck can only be completed by this external catwalk system. Lame.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1527.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1527.JPG" height="512" width="384" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;It's a long way down from the boat deck to the water line. Ripples indicate 1 on the &lt;a href="http://en.wikipedia.org/wiki/Beaufort_scale"&gt;Beaufort scale&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1534.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1534.JPG"  height="512" width="384" alt="Long way down. 1 on the Beaufort scale" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Looking forward, view of B deck, forward well deck, and the forecastle. The rifle battery is an homage to her WWII service. Queen Mary holds the record for largest number of people transported on a ship at any given time (16,000 or so).&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1535.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1535.JPG"  height="512" width="384" alt="Looking forward, view of B deck, the forward well deck, and the forecastle." /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I never look happy about anything. I am, though.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1537.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1537.JPG"  height="512" width="384" alt="I never look happy about anything." /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Queen Mary's outer port propeller is still on its shaft. A tank built around the ship and illumination sources make it visible. It's an incredible sight. In viewing this, I realized QM is actually grounded and not afloat making her immune to the tides and quite stationary.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1545.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1545.JPG" width="512" height="384" alt="RMS Queen Mary's port outer propeller visible from an observation box outside the ship." /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I was clearly here all day.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1550.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1550.JPG" height="512" width="384" alt="I was clearly here all day" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;RMS Queen Mary's bridge.&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011March06/IMG_1561.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011March06/IMG_1561.JPG" width="512" height="384" alt="RMS Queen Mary's bridge" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More images are visible in &lt;a href="http://www.akerr.net/images/2011March06/"&gt;this directory&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5967096555231515337?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5967096555231515337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5967096555231515337' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5967096555231515337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5967096555231515337'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/03/exploring-rms-queen-mary.html' title='Exploring R.M.S. Queen Mary'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2020859705523050620</id><published>2011-02-21T10:31:00.006-05:00</published><updated>2011-02-21T11:06:25.268-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ferroequinology'/><category scheme='http://www.blogger.com/atom/ns#' term='290'/><title type='text'>Ferroequinology: More Running Boards</title><content type='html'>Saturday, I revisited SERM to spend some time on A&amp;WP 290. The previous visit, we cleared several brackets and attached steam and air pipes to expose a nearly clear boiler shell. In preparation for &lt;a href="http://www.ndt-ed.org/EducationResources/CommunityCollege/Ultrasonics/Introduction/description.htm"&gt;Ultrasonic Thickness testing&lt;/a&gt;, a grid over each &lt;i&gt;course&lt;/i&gt; of the shell must be arranged and test points ground to expose bare metal. To access the entire shell, running boards on the fireman's (left) side of the locomotive needed to be installed.&lt;br /&gt;&lt;br /&gt;Installing the fireman's side running boards used all of the mounting hardware remaining and, to our chagrin, exposed mistakes in mounting the engineer's side running boards. This image depicts the two large castings that support both running boards and compressed air tanks. Each of the four castings is distinct, not correctly labeled, and not easily positioned even with a crane (of which I have become a precise and efficient operator).  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.akerr.net/images/2011Jan15/IMG_1448.JPG"&gt;&lt;img src="http://www.akerr.net/images/2011Jan15/IMG_1448.JPG" width="384" height="512" alt="Engineer's side running boards on A&amp;amp;WP 290 installed on Jan 15, 2011 at Southeastern Railroad Museum. Pictured: AWP290 project manager Dale Grice." /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ultimately, we had to remove the engineer's side running boards, remove what we guessed was the incorrectly placed bracket, place a different bracket, reinstall the running board, install that bracket on the other side in both possible locations, and hopefully achieve the best fit. Moreover, studs can be bent so it's a matter of luck and judgment to determine whether a part doesn't fit because it's not the correct part or because you're not using a large enough hammer. &lt;br /&gt;&lt;br /&gt;By end of day, with many possible combinations attempted, all air tank brackets were soundly mounted, running boards placed, and the boiler now accessible from all sides. During the next disassembly, we'll surely stamp each casting and avoid confusion in the future... ha.&lt;br /&gt;&lt;br /&gt;Up next, ultrasonic thickness measurement over every square foot of a 37ft pressure vessel with working pressure 201 psi and operational temperature of 450 degF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2020859705523050620?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2020859705523050620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2020859705523050620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2020859705523050620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2020859705523050620'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/02/ferroequinology-more-running-boards.html' title='Ferroequinology: More Running Boards'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-919214403654362320</id><published>2011-02-20T14:58:00.010-05:00</published><updated>2011-02-28T11:30:23.444-05:00</updated><title type='text'>Orthographic Meet 2011</title><content type='html'>Last night, &lt;a href="http://www.fanbolt.com/blog.php?id=1"&gt;Emma&lt;/a&gt; and I attended the &lt;a href="http://www.atlantaopenorthographicmeet.org/"&gt;Atlanta Open Orthographic Meet&lt;/a&gt;, an annual spelling competition held at Manuel's Tavern. My score was 19 total, although I feel bad pronunciation robbed me of of 'pharoah.' These are the words from each of four rounds with my best effort to recall the particular definition provided during the competition.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Round 1&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;pharoah&lt;/b&gt; - a tyrant&lt;br /&gt;&lt;b&gt;shellacked&lt;/b&gt; - to defeat decisively&lt;br /&gt;&lt;b&gt;corpuscle&lt;/b&gt; - an unattached body cell, such as a blood or lymph cell&lt;br /&gt;&lt;b&gt;artisan&lt;/b&gt; - a skilled manual worker; a craftsperson&lt;br /&gt;&lt;b&gt;ululate&lt;/b&gt; - to howl or wail, as with grief&lt;br /&gt;&lt;b&gt;metallurgy&lt;/b&gt; - the study of metals and their properties in bulk and at the atomic level&lt;br /&gt;&lt;b&gt;bulwark&lt;/b&gt; - wall or embankment raised as a defensive fortification&lt;br /&gt;&lt;b&gt;privilege&lt;/b&gt; - a special advantage, immunity, permission&lt;br /&gt;&lt;b&gt;artesian&lt;/b&gt; - a well from which water flows spontaneously due to internal pressure&lt;br /&gt;&lt;b&gt;mischief&lt;/b&gt; -  behavior that causes discomfiture or annoyance in anothe&lt;br /&gt;&lt;b&gt;sauerbraten&lt;/b&gt; - pot roast of beef marinated in vinegar, water, wine, and spices before being cooked&lt;br /&gt;&lt;b&gt;poltergeist&lt;/b&gt; - a ghost that manifests itself by noises, rappings, and the creation of disorder&lt;br /&gt;&lt;b&gt;deuce&lt;/b&gt; -  a tied score in tennis&lt;br /&gt;&lt;b&gt;lien&lt;/b&gt; -  right to take and hold the property of a debtor as security for a debt&lt;br /&gt;&lt;b&gt;apropos&lt;/b&gt; - being at once opportune and to the point&lt;br /&gt;&lt;b&gt;rendezvous&lt;/b&gt; - meeting at a prearranged time and place&lt;br /&gt;&lt;b&gt;vaudeville&lt;/b&gt; - theatrical performance of this kind; a variety show&lt;br /&gt;&lt;b&gt;pharisaic&lt;/b&gt; - hypocritically self-righteous and condemnatory&lt;br /&gt;&lt;b&gt;apiary&lt;/b&gt; - place where bees are kept&lt;br /&gt;&lt;b&gt;bamboozle&lt;/b&gt; - to take in by elaborate methods of deceit&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Round 2&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;grok&lt;/b&gt; - to understand profoundly through intuition&lt;br /&gt;&lt;b&gt;uxorious&lt;/b&gt; - excessively submissive or devoted to one's wife&lt;br /&gt;&lt;b&gt;apocopate&lt;/b&gt; - to omit the final sound or sounds of (a word)&lt;br /&gt;&lt;b&gt;diurnal&lt;/b&gt; - occurring or active during the daytime rather than at night&lt;br /&gt;&lt;b&gt;succedaneum&lt;/b&gt; - a substitute&lt;br /&gt;&lt;b&gt;poinciana&lt;/b&gt; - having large orange or red flowers&lt;br /&gt;&lt;b&gt;snollygoster&lt;/b&gt; - one, especially a politician, who is guided by personal advantage rather than by consistent, respectable principles&lt;br /&gt;&lt;b&gt;involucrar&lt;/b&gt; - ??&lt;br /&gt;&lt;b&gt;viand&lt;/b&gt; - a very choice or delicious dish&lt;br /&gt;&lt;b&gt;onomatopoeia&lt;/b&gt; - the formation or use of words such as buzz or murmur that imitate the sounds associated with the objects or actions they refer to&lt;br /&gt;&lt;b&gt;???&lt;/b&gt; - &lt;br /&gt;&lt;b&gt;antipyretic&lt;/b&gt; - a medication that reduces fever&lt;br /&gt;&lt;b&gt;trepanation&lt;/b&gt; - the medical procedure of making a hole in the skull&lt;br /&gt;&lt;b&gt;anneal&lt;/b&gt; - to subject glass or metal to a process of heating and slow cooling in order to toughen and reduce brittleness&lt;br /&gt;&lt;b&gt;coccygodynia&lt;/b&gt; -  pain in the coccyx or tailbone area&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Round 3&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;kuemmel&lt;/b&gt; - a sweet, colorless liqueur flavored with caraway seed&lt;br /&gt;&lt;b&gt;zugzwang&lt;/b&gt; - a situation where one player is put at a disadvantage because he has to make a movel the player would prefer to pass and make no move&lt;br /&gt;&lt;b&gt;fissiparous&lt;/b&gt; - inclined to cause or undergo division into separate parts or groups&lt;br /&gt;&lt;b&gt;psammite&lt;/b&gt; - a metamorphosed rock unit with a dominantly sandstone&lt;br /&gt;&lt;b&gt;smaragd&lt;/b&gt; - having the color of emeralds&lt;br /&gt;&lt;b&gt;coryphee&lt;/b&gt; - a ballet dancer&lt;br /&gt;&lt;b&gt;ratamacue&lt;/b&gt; - &lt;br /&gt;&lt;b&gt;majuscule&lt;/b&gt; - capital letters&lt;br /&gt;&lt;b&gt;mirliton&lt;/b&gt; - a pear-shaped vegetable or its vine&lt;br /&gt;&lt;b&gt;claquer&lt;/b&gt; - an organized body of professional applauders&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Round 4&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;cimicine&lt;/b&gt; - &lt;br /&gt;&lt;b&gt;rijstaffel&lt;/b&gt; - a dish originating in Indonesia; a wide variety of foods and sauces are served with rice&lt;br /&gt;&lt;b&gt;mbaqanga&lt;/b&gt; - a style of Black popular music of urban South Africa&lt;br /&gt;&lt;b&gt;jobbernowl&lt;/b&gt; - a blockhead&lt;br /&gt;&lt;b&gt;tchick&lt;/b&gt; - a slight sound such as that made by pressing the tongue against the roof of the mouth and explosively sucking out the air at one side, as in urging on a horse&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-919214403654362320?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/919214403654362320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=919214403654362320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/919214403654362320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/919214403654362320'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/02/orthographic-meet-2011.html' title='Orthographic Meet 2011'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5263410793674793407</id><published>2011-02-07T15:01:00.004-05:00</published><updated>2011-02-21T11:07:01.126-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ocelot'/><category scheme='http://www.blogger.com/atom/ns#' term='gpu'/><category scheme='http://www.blogger.com/atom/ns#' term='computing'/><title type='text'>Install GPU Ocelot on Ubuntu 10.04</title><content type='html'>We've recently acquired a new machine to test Advanced Vector Extensions with &lt;a href="http://code.google.com/p/gpuocelot/"&gt;GPU Ocelot&lt;/a&gt;'s experimental vectorizing execution manager and code generator. I decided to document the complete set of procedures needed to build Ocelot on a fresh installation of Ubuntu 10.04.&lt;br /&gt;&lt;br /&gt;1.) Install Ubuntu updates&lt;br /&gt;&lt;br /&gt;2.) Install prerequisites:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install g++ subversion libboost-all-dev &lt;br /&gt;sudo apt-get install glutg3-dev libglew1.5-dev glew-utils &lt;br /&gt;sudo apt-get install bison flex automake autoconf libtool&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3.) Install &lt;a href="http://developer.nvidia.com/object/cuda_3_2_downloads.html#Linux"&gt;NVIDIA CUDA 3.2&lt;/a&gt; for Ubuntu 10.04. This includes an updated video driver and CUDA 3.2 Toolkit.&lt;br /&gt;&lt;br /&gt;4.) Download, build, and install &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;br /&gt;cd llvm&lt;br /&gt;./configure &amp;&amp; make ENABLE_OPTIMIZED=1 -j 8&lt;br /&gt;sudo make install ENABLE_OPTIMIZED=1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;5.) Download, build, and install &lt;a href="http://code.google.com/p/gpuocelot/"&gt;GPU Ocelot&lt;/a&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;svn checkout http://gpuocelot.googlecode.com/svn/trunk/ gpuocelot-read-only&lt;br /&gt;cd gpuocelot-read-only/ocelot&lt;br /&gt;libtoolize &amp;&amp; aclocal &amp;&amp; autoconf &amp;&amp; automake &amp;&amp; ./configure&lt;br /&gt;make check -j 8&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;6.) Run built in unit tests:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;make test&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5263410793674793407?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5263410793674793407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5263410793674793407' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5263410793674793407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5263410793674793407'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/02/install-gpu-ocelot-on-ubuntu-1004.html' title='Install GPU Ocelot on Ubuntu 10.04'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3443867602962373150</id><published>2011-01-31T11:20:00.004-05:00</published><updated>2011-01-31T16:08:38.279-05:00</updated><title type='text'>Attention all Personnel</title><content type='html'>Update your blogs, folks! I know you've been up to something; what is it? What did you learn from it?&lt;br /&gt;&lt;br /&gt;A short observation: I discovered the level of accuracy in my technique at pool vastly improved if I decreased the distance between cue and cue ball. Short stroke trumps long stroke.&lt;br /&gt;&lt;br /&gt;Another short observation: Under sail, when preparing for a gybe, be sure you are running directly down wind. A gybe should not involve significant rudder/tiller movements, and one's heading should not change dramatically. In &lt;a href="http://www.youtube.com/watch?v=PExk7aE6ijM"&gt;this video&lt;/a&gt;, the nose of the boat does not turn during the gybe; the main is simply sheeted in until the wind carries it across. &lt;br /&gt;&lt;br /&gt;Strolls through Piedmont Park are best completed with &lt;a href="http://emmaloggins.com/blog/"&gt;Emma&lt;/a&gt; and a smoothie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3443867602962373150?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3443867602962373150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3443867602962373150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3443867602962373150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3443867602962373150'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/attention-all-personnel.html' title='Attention all Personnel'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6907558817790389376</id><published>2011-01-18T16:23:00.004-05:00</published><updated>2011-02-21T11:07:14.551-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avx'/><category scheme='http://www.blogger.com/atom/ns#' term='computing'/><title type='text'>Taste of AVX</title><content type='html'>One can use Intel's &lt;a href="http://software.intel.com/en-us/articles/intel-software-development-emulator/"&gt;Software Development Emulator&lt;/a&gt; to execute programs utilizing unsupported ISA extensions such as &lt;a href="http://software.intel.com/en-us/avx/"&gt;Advanced Vector Extensions&lt;/a&gt;. This tool, based on &lt;a href="http://www.pintool.org/"&gt;Pin&lt;/a&gt;, instruments binaries and emulates instructions not supported in hardware. It also provides detailed instruction opcode histograms so you can, for instance, figure out whether some video game or library was compiled with SSE support.&lt;br /&gt;&lt;br /&gt;Here's an example x86-64 function implementing element-wise multiply-accumulate of two single-precision floating-point vectors of arbitrary length.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;; void vectorFMA(float *R, float *A, float *B, int N)&lt;br /&gt;;&lt;br /&gt;; R[i] += A[i] * B[i] for i = 0 .. N-1&lt;br /&gt;;&lt;br /&gt;; uses AVX to multiply two vectors, elementwise, and add&lt;br /&gt;; results to a third vector&lt;br /&gt;;&lt;br /&gt;; rdi - R&lt;br /&gt;; rsi - A&lt;br /&gt;; rdx - B&lt;br /&gt;; rcx - N&lt;br /&gt;;&lt;br /&gt;vectorFMA:&lt;br /&gt; &lt;br /&gt;.L1:&lt;br /&gt; ; load words from R, A, and B&lt;br /&gt; vmovups ymm1, [rdi]&lt;br /&gt; vmovups ymm2, [rsi]&lt;br /&gt; vmovups ymm3, [rdx]&lt;br /&gt; &lt;br /&gt; ; *R += *A * *B&lt;br /&gt; vmulps ymm4, ymm2, ymm3&lt;br /&gt; vaddps ymm5, ymm1, ymm4&lt;br /&gt; vmovups [rdi], ymm5&lt;br /&gt; &lt;br /&gt; ; R+=8, A+=8, B+=8&lt;br /&gt; add rdi, 32&lt;br /&gt; add rsi, 32&lt;br /&gt; add rdx, 32&lt;br /&gt; &lt;br /&gt; ; if (--rcx == 0) break;&lt;br /&gt; dec rcx&lt;br /&gt; jnz .L1&lt;br /&gt;.L5:&lt;br /&gt; ret&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When our SandyBridge machine arrives next week, I should have a handful of interesting microbenchmarks to run on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6907558817790389376?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6907558817790389376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6907558817790389376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6907558817790389376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6907558817790389376'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/taste-of-avx.html' title='Taste of AVX'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4217399129981518203</id><published>2011-01-18T10:55:00.007-05:00</published><updated>2011-02-21T11:07:26.397-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ferroequinology'/><category scheme='http://www.blogger.com/atom/ns#' term='290'/><title type='text'>Ferroequinology: Running Boards</title><content type='html'>We hoisted engineer's side running boards onto the brackets mounted the previous week. Now, it is possible to access the top of A&amp;WP 290's boiler shell. We used the opportunity to heat and remove a handful of brackets to clear several sand and steam pipes.&lt;br /&gt;&lt;br /&gt;Protip: when applying a socket wrench to a red-hot steel nut, make sure your gloves are dry to prevent any unwanted heat transfer...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: water soaked into gloves acts as a thermal conductor resulting in scalds if a gloved hand is applied to steel whose temperature is several hundred degrees above the boiling point of water.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4217399129981518203?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4217399129981518203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4217399129981518203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4217399129981518203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4217399129981518203'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/ferroequinology-running-boards.html' title='Ferroequinology: Running Boards'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8621012705329911623</id><published>2011-01-14T14:04:00.001-05:00</published><updated>2011-01-14T14:04:22.372-05:00</updated><title type='text'>Wanted</title><content type='html'>My notebook. Last seen December 6, 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8621012705329911623?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8621012705329911623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8621012705329911623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8621012705329911623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8621012705329911623'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/wanted.html' title='Wanted'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-826996080762300322</id><published>2011-01-14T10:23:00.009-05:00</published><updated>2011-02-21T11:07:36.400-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computing'/><title type='text'>Constant-time Set Membership</title><content type='html'>While scouring the internet yesterday, I came upon an article written by Preston Briggs, currently at NVIDIA and a former office mate in Bellevue. &lt;a href="http://portal.acm.org/citation.cfm?id=176454.176484"&gt;Efficient representation for sparse sets&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This paper considers set representations of objects for which a bijection to the natural numbers exists and provides a novel alternative to bit vectors.&lt;br /&gt;&lt;br /&gt;Sets represented by bit vectors are one of the more common approaches [what we use in Ocelot]. Given a universe of size &lt;i&gt;u&lt;/i&gt;, bit vectors indicate whether element &lt;i&gt;i&lt;/i&gt; is a member of a set by setting bit &lt;i&gt;i&lt;/i&gt; providing access times on the order &lt;i&gt;O(u)&lt;/i&gt;. This representation also requires &lt;i&gt;O(u)&lt;/i&gt; time to clear the bit vector initially. If short-lived sets with large &lt;i&gt;u&lt;/i&gt; are needed frequently, overheads can be prohibitive. A sparse representation may be desirable, but it should have &lt;i&gt;O(1)&lt;/i&gt; access times.&lt;br /&gt;&lt;br /&gt;Preston's approach represents a sparse set with two arrays of size &lt;i&gt;u&lt;/i&gt;, denoted &lt;i&gt;dense&lt;/i&gt; and &lt;i&gt;sparse&lt;/i&gt;, and an integer &lt;i&gt;k&lt;/i&gt; representing the number of elements in the set. The array &lt;i&gt;dense&lt;/i&gt; stores a packed sequence of elements that have been added to the set, and valid indices are 0 ... &lt;i&gt;k-1&lt;/i&gt;. The array &lt;i&gt;sparse&lt;/i&gt; provides a mapping of natural numbers to possible indices into &lt;i&gt;dense&lt;/i&gt;. For example, assume &lt;i&gt;j&lt;/i&gt; belongs to the set and is stored in location &lt;i&gt;dense[p]&lt;/i&gt;; the following is true: &lt;i&gt;sparse[j] = p&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;With two array access, both &lt;i&gt;O(1)&lt;/i&gt; we can efficiently determine whether element &lt;i&gt;j&lt;/i&gt; is in the set:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def isIn(j, S):&lt;br /&gt;  return (S.sparse[j] &lt; S.k) and (S.dense[S.sparse[j]] == j)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That is, if &lt;i&gt;sparse[j]&lt;/i&gt; is a valid index (from 0 to &lt;i&gt;k-1&lt;/i&gt;) and the object at that index is indeed the element, then it belongs to the set. This technique has the advantage that neither &lt;i&gt;dense&lt;/i&gt; nor &lt;i&gt;sparse&lt;/i&gt; needs to be cleared initially. To clear the set, simply set &lt;i&gt;k = 0&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;Elements are added by:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def insert(S, j):&lt;br /&gt;  S.dense[S.k] = j&lt;br /&gt;  S.sparse[j] = S.k&lt;br /&gt;  S.k += 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Storage requirements are 2*(u+1) for a set of &lt;i&gt;u&lt;/i&gt; integers. I thought this was interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-826996080762300322?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/826996080762300322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=826996080762300322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/826996080762300322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/826996080762300322'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/constant-time-set-membership.html' title='Constant-time Set Membership'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-33098972698091096</id><published>2011-01-12T19:53:00.000-05:00</published><updated>2011-01-12T19:54:09.323-05:00</updated><title type='text'>Human Knowledge</title><content type='html'>&lt;a href="http://matt.might.net/articles/phd-school-in-pictures/"&gt;PhD in pictures&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-33098972698091096?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/33098972698091096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=33098972698091096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/33098972698091096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/33098972698091096'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/human-knowledge.html' title='Human Knowledge'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8380303177609263018</id><published>2011-01-11T11:34:00.006-05:00</published><updated>2011-01-11T12:03:40.844-05:00</updated><title type='text'>Delegates in C++</title><content type='html'>I reimplemented the &lt;a href="http://akerr.blogspot.com/2010/03/baker-valve-gear-simulator-in-python.html"&gt;Baker valve gear simulator&lt;/a&gt; in C++ a few weeks ago. This involved adding a nonlinear equation solver to &lt;i&gt;libkerr&lt;/i&gt;'s matrix library, my custom-made high-performance linear algebra library that's been reused over the years in dozens of small projects and a few large ones.&lt;br /&gt;&lt;br /&gt;The algorithm itself is nothing special: &lt;a href="http://en.wikipedia.org/wiki/Newton's_method"&gt;Newton's method&lt;/a&gt;. Implementing it in a general and yet efficient manner in C++, however, presents a design choice.&lt;br /&gt;&lt;br /&gt;I was tempted to accept a template argument and call that class's &lt;i&gt;operator()&lt;/i&gt; member function. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;template &amp;lt; typename Real, typename Functor &amp;gt;&lt;br /&gt;int fsolve(matrix&lt;Real&gt; &amp;x, const Functor &amp;F, Real precision, int maxIterations) {&lt;br /&gt;  ..&lt;br /&gt;  while () {&lt;br /&gt;    matrix&lt;Real&gt; fx = F(x);  // operator()&lt;br /&gt;  }&lt;br /&gt;  ..&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This, however, would require a separate class for each constraint function. In my case of coupled systems, I need to determine roots for two distinct constraint functions that shared both constant state and analytically computed state. Additionally, the zeros of the first function would be needed as input to the second function.&lt;br /&gt;&lt;br /&gt;Instead, I opted for the &lt;a href="http://en.wikipedia.org/wiki/Delegation_pattern"&gt;delegate&lt;/a&gt; design pattern. The functor includes both the object as well as references to member functions.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;template &amp;lt;typename Real, typename Functor&amp;gt;&lt;br /&gt;int fsolve(matrix&amp;lt;Real&amp;gt; &amp;x, const Functor &amp;F, matrix&amp;lt;Real&amp;gt; (Functor::*ptr)(matrix&amp;lt;Real&amp;gt;), Real precision, int maxIterations) {&lt;br /&gt;  ..&lt;br /&gt;  while () {&lt;br /&gt;    matrix&amp;lt;Real&amp;gt; fx = (F.*ptr)(x);  // delegate&lt;br /&gt;  }&lt;br /&gt;  ..&lt;br /&gt;}&lt;br /&gt;..&lt;br /&gt;BakerValve instance;&lt;br /&gt;fsolve&amp;lt;double, BakerValve&amp;gt;(x1, instance, &amp;BakerValve::constraintF1);&lt;br /&gt;..&lt;br /&gt;fsolve&amp;lt;double, BakerValve&amp;gt;(x2, instance, &amp;BakerValve::constraintF2);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Some additional features of my solver are the Jacobian can either be estimated by a default solver or computed analytically by a user-supplied function.&lt;br /&gt;&lt;br /&gt;The implementation seems to work well and always converge. I haven't implemented an aesthetically pleasing visualization of its output, as this was mostly scratching an itch for implementing the constraint solver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8380303177609263018?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8380303177609263018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8380303177609263018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8380303177609263018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8380303177609263018'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/delegates-in-c.html' title='Delegates in C++'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8029147268845529237</id><published>2011-01-09T13:19:00.010-05:00</published><updated>2011-02-21T11:07:44.750-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ferroequinology'/><category scheme='http://www.blogger.com/atom/ns#' term='290'/><title type='text'>Ferroequinology: clearing A&amp;WP 290's Boiler Shell</title><content type='html'>Yesterday, I visited the &lt;a href="http://www.srmduluth.org/default.shtml"&gt;Southeastern Railway Museum&lt;/a&gt; and worked on A&amp;WP 290 with Dale Grice.&lt;br /&gt;&lt;br /&gt;In continuing with the goal of removing everything from the boiler shell to prepare for an eventual blast with baking soda, we removed a steam pipe carrying a "signal" that actuates cylinder cocks. A valve in the engineer's side of the cab raises steam pressure in this pipe which actuates valves at the bottoms of the main cylinders at the front of the locomotive that permit condensation and steam to blow out when the locomotive starts. This is why steam engines seem to start in a cloud of steam.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.railpictures.net/viewphoto.php?id=36565&amp;nseq=15848"&gt;&lt;img src="http://www.railpictures.net/images/d1/5/2/0/8520.1066798260.jpg" alt="A&amp;WP 290 venting cylinder cocks"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This required removing two &lt;a href=""&gt;unions&lt;/a&gt; coupling a network of steel pipes. I tried without luck during a previous visit to wrench them apart. Yesterday, we used a "rosebud" oxy-acetylene torch to heat the union coupling to dull cherry red then quenched it with a cup of water. The first coupling I tried this on came loose readily and after one revolution with the wrench [and plenty of time to cool], I removed it the rest of the way with torque applied by [gloved] hand.&lt;br /&gt;&lt;br /&gt;The second union would not budge in spite of this treatment. Between heatings, I hit it with a hammer but it remained fast. Consequently, we used a cutting torch which emits a jet of oxygen gas through a flame and oxidizes steel. A short segment of pipe was cut between the union and a T-coupling thus freeing the main pipe along the boiler.&lt;br /&gt;&lt;br /&gt;With unions apart, the cylinder cock pipe would come loose with the removal of a single bracket fastened to the boiler shell via a threaded stud. Unfortunately, the nut holding the bracket was corroded and could not be made to turn without heat. After heating to cherry red, a wrench with torque magnified by a breaker bar [steel pipe] eventually made some progress. Or we thought it was progress. After about half a revolution the nut fell off revealing we had literally torqued the 1/2" stud apart and never moved the nut. One more thing to fix on the boiler...&lt;br /&gt;&lt;br /&gt;I manned the portable crane and we pulled the pipes off the boiler then applied a set of labels so they can be replaced or new copies made.&lt;br /&gt;&lt;br /&gt;To reach the top of the boiler, the next step was to replace air cylinder brackets. These are large castings [weighing probably 50 or 60 pounds each] that suspend two large air cylinders along the locomotive, one on each side, and support running boards.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/11035256@N05/3311813538/"&gt;&lt;img src="http://farm4.static.flickr.com/3500/3311813538_691989aaa2.jpg" alt="A&amp;WP 290 in New Georgia Railroad's Pullman Yard" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Again, I manned the crane lifting the castings up to the boiler while Dale aligned them with 1.5" diameter threaded studs. These studs were placed in the boiler from within when it was built and cannot be easily replaced without potentially compromising the boiler's integrity [not to mention incurring a laborious and detailed inspection]. The first bracket went on without much trouble but we discovered it was mis-labeled and didn't sit flush with the boiler shell. The next bracket didn't slide onto the studs at all, and we discovered the reason was due to the forward stud bent up and forward. The studs needed to be parallel for the bracket to slide on, and this clearly wouldn't do.&lt;br /&gt;&lt;br /&gt;To straighten it, Dale fitted a large 12' steel pipe over the stud, and I climbed up on a scaffold. The plan was for me to bend the stud using the pipe as a lever. Doing this proved problematic; the pipe was not adequately stiff, and all force I applied deformed the pipe like a spring. I had visions of losing my grip and the pipe springing back; the last thing I would see is a 2.5" steel pipe swinging back to hit me in the face...&lt;br /&gt;&lt;br /&gt;We abandoned this idea pretty quickly. When Dale attached a nut to the end of the stud and hit it with a sledgehammer without any success, he decided heat was the only solution. Again, the rosebud torch came out and in no time, the base of the stud was glowing cherry red. Each gentle stroke of the sledgehammer moved the end of it by about 1/4", and in no time we had straightened it. &lt;br /&gt;&lt;br /&gt;Both brackets slid on without difficulty after this, and now we'll be able to add running boards and access the top of the boiler. Progress!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8029147268845529237?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8029147268845529237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8029147268845529237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8029147268845529237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8029147268845529237'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/ferroequinology-clearing-290s-boiler.html' title='Ferroequinology: clearing A&amp;WP 290&apos;s Boiler Shell'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3500/3311813538_691989aaa2_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-291782913470853587</id><published>2011-01-05T16:37:00.007-05:00</published><updated>2011-02-21T11:08:24.242-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='indomitable'/><category scheme='http://www.blogger.com/atom/ns#' term='computing'/><title type='text'>My Struggles in Trigonometry Class</title><content type='html'>During a period of restlessness last night, while lying in bed I recalled a project I completed during 11th grade trigonometry class in high school. Today, I don't remember the minimum scope requirements, but I chose to satisfy them by building a game that simulated artillery. The game environment consisted of a simulated island (a 3D heightfield) and two textured stone bunkers corresponding to each player's location. &lt;br /&gt;&lt;br /&gt;In another window with GUI controls, the player submitted elevation, azimuth, and velocity of an artillery shell. Then, they would click FIRE and a shell would launch from their location, arc over the simulated island, and impact somewhere. If it impacted the other player's bunker (or their own), the player who's bunker survived received a point and the game restarted with new random locations. The camera was attached to the shell so the firing player would have a chance to observe the island, reconnoiter their opponents location, and update their trajectory. Differences in elevation between the two players' bunkers and physical obstructions such as the island itself meant each player needed to determine a unique trajectory to the other. I believe there was also simulated wind.&lt;br /&gt;&lt;br /&gt;I spent plenty of time working on it and made it finally ready to present the day all projects were due. No one else did anything related to computing, let alone implement a real-time 3D renderer with a game built around it. The morning before class, I installed it on the antiquated classroom PC to test it out. To my horror, the low max-resolution of the video card prevented the GUI controls from appearing; the input window was obscured and not sizable. The controls for entering artillery parameters and firing the shell were out of view. Our teacher was perpetually suspicious of technology and told me I would have to submit it as is; no deadlines would be granted. I think she may have even been slightly pleased that smarty-pants Andykerr would finally be hoist with his own petard (when taken literally, 'sent into the air by one's own powder keg' -- a remarkably delightful metaphor given the context of my game).&lt;br /&gt;&lt;br /&gt;I had until sixth period, classtime, to resolve the issue and make the game playable. Unfortunately, I did not have the source code, and even if I did, the machines I had access to with Visual Studio lacked the DirectX software development kit. Recompiling it was impossible.&lt;br /&gt;&lt;br /&gt;So I edited the binary instead.&lt;br /&gt;&lt;br /&gt;Windows applications store layouts of controls as resource files embedded in the executable. These are binary also, but I knew enough to expect the X and Y coordinates of the critical controls to be stored as 16-bit unsigned integers. Using MSPaint, I took a screenshot of the application to determine what the locations of the buttons and textboxes actually were. I visited the electronics lab where computers with Visual Studio were installed, and I used Visual Studio's hex editor to search and edit the executable. Fortunately for me, the coordinates made unique binary sequences for that particular application, so finding them was straightforward. I made up new values, overwrote the old ones, and hoped.&lt;br /&gt;&lt;br /&gt;I brought it Trigonometry during sixth period, installed it on the classroom PC, and was met with pleased astonishment. The controls were in new positions, visible, and the game could be played as designed. The textures were crappy, and the slow video card made gameplay uninteresting, but it ran and I received full credit.&lt;br /&gt;&lt;br /&gt;3D games rely heavily on trigonometric relationships to transform and project mathematical representations of a virtual world onto a raster display, but the math was by *far* not the most difficult part of that project. I don't think anyone else appreciated what I went through for that damn grade...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-291782913470853587?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/291782913470853587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=291782913470853587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/291782913470853587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/291782913470853587'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2011/01/reflections.html' title='My Struggles in Trigonometry Class'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3689687454035613831</id><published>2010-12-28T09:34:00.002-05:00</published><updated>2010-12-28T09:38:52.994-05:00</updated><title type='text'>A Key Insight on Heterogeneity in Computing</title><content type='html'>Reading a PhD dissertation on parallel computing [&lt;a href="http://babrodtk.at.ifi.uio.no/files/publications/brodtkorb_phd_thesis.pdf"&gt;link&lt;/a&gt; PDF].&lt;br /&gt;&lt;br /&gt;"The Cell Broadband Engine is a heterogeneous processor by itself,.."&lt;br /&gt;&lt;br /&gt;I've been arguing that today's modern multicore CPUs are heterogeneous processors and some folks at Intel seem to agree. Processors have multiple functional units with differing capabilities, a scheduler, and wide vector units with their own Instruction Set Architecture. Each revision of Intel and AMD x86 processors seem to include a few additional instructions to power some specialized unit such as video processing or floating point. &lt;br /&gt;&lt;br /&gt;AndyKerr insight: every modern superscalar processor is a heterogeneous platform by itself, and the extent of heterogeneity is rising.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3689687454035613831?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3689687454035613831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3689687454035613831' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3689687454035613831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3689687454035613831'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/12/key-insight-on-heterogeneity-in.html' title='A Key Insight on Heterogeneity in Computing'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-766847646283643234</id><published>2010-12-14T16:20:00.003-05:00</published><updated>2010-12-14T16:25:55.918-05:00</updated><title type='text'>Fall 2010 Complete</title><content type='html'>In one week, I represented GT during &lt;a href="http://www.microarch.org/micro43/"&gt;Micro-43&lt;/a&gt;, wrote a paper submitted to &lt;a href="http://www.ece.neu.edu/GPGPU/"&gt;GPGPU-4&lt;/a&gt;, and completed two extensive meetings with industry sponsors. Winter 2010 will hopefully provide a much-needed reprieve.&lt;br /&gt;&lt;br /&gt;Anyone interested in a trip to the Tennessee Valley Railroad Museum to ride #610 before her FRA boiler certificate expires? I should call up the museum to see if they plan on any steam-ups of ex Southern #630, a splendid 2-8-0 steam locomotive in the final stages of a complete restoration. Chattanooga isn't too far, but we combine trips when we can to make the most of things.&lt;br /&gt;&lt;br /&gt;I would like to perform one sailing adventure. Things are cold, to be sure, but the winds should be stellar. If we can keep the 420 from capsizing, I'm sure we'll have one hell of a time. Robust constitutions only need apply.&lt;br /&gt;&lt;br /&gt;A range visit is scheduled for this Friday.&lt;br /&gt;&lt;br /&gt;Back to Christmas shopping...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-766847646283643234?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/766847646283643234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=766847646283643234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/766847646283643234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/766847646283643234'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/12/fall-2010-complete.html' title='Fall 2010 Complete'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8691215548979194351</id><published>2010-11-24T14:20:00.004-05:00</published><updated>2010-11-24T14:43:34.608-05:00</updated><title type='text'>Happy Thanksgiving</title><content type='html'>While preparing your Thanksgiving meal, remember the following, dear readers.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.akerr.net/images/preserve/WWII-conserve-fats-explosives.jpg" alt="Preserve fats" /&gt;&lt;br /&gt;&lt;br /&gt;Happy Thanksgiving!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8691215548979194351?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8691215548979194351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8691215548979194351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8691215548979194351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8691215548979194351'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/11/happy-thanksgiving.html' title='Happy Thanksgiving'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5102611888575986214</id><published>2010-11-20T14:42:00.007-05:00</published><updated>2010-11-20T15:11:48.765-05:00</updated><title type='text'>B-Tree</title><content type='html'>Saturday morning algorithms practice: I implemented insert() and find() members std::map&lt;&gt; as a &lt;a href="http://en.wikipedia.org/wiki/B-tree"&gt;B-tree&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Each node in the B-tree has at most 2*t-1 keys and at most 2*t children. The best-case depth of a B-tree is log_{2*t}(N) and the worst case is log_{t}(N). During a search, O(2t) comparisons are performed per node, and O(height) nodes are visited.&lt;br /&gt;&lt;br /&gt;For t = 3, my implementation shows the following complexity for searching:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;N = 1000&lt;br /&gt;Average nodes visited: 4.68&lt;br /&gt;log_3(N) = 6.28771  (worst)&lt;br /&gt;log_6(N) = 3.85529  (best)&lt;br /&gt;tree depth = 5&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For N = 25000, you may compare to an earlier implementation of &lt;a href="http://akerr.blogspot.com/2010/09/skiplists.html"&gt;skiplists&lt;/a&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;N = 25000&lt;br /&gt;Average nodes visited: 7.68968&lt;br /&gt;log_3(N) = 9.21766  (worst)&lt;br /&gt;log_6(N) = 5.65178  (best)&lt;br /&gt;depth = 8&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/2043135047960620857-5102611888575986214?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5102611888575986214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5102611888575986214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5102611888575986214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5102611888575986214'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/11/b-tree.html' title='B-Tree'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-1762131524319606871</id><published>2010-11-03T13:55:00.002-04:00</published><updated>2010-11-03T14:19:49.501-04:00</updated><title type='text'>LLVM Floating-point Performance Bug</title><content type='html'>I've noticed an unusual behavior of the LLVM x86 code generator that results in&lt;br /&gt;nearly a 4x slow-down in floating-point throughput that I would like to report.&lt;br /&gt;&lt;br /&gt;I've written a compute-intensive microbenchmark to approach theoretical peak&lt;br /&gt;throughput of the target processor by issuing a large number of independent&lt;br /&gt;floating-point multiplies. The distance between dependent instructions is at&lt;br /&gt;least four instructions to match the latency of the floating-point functional&lt;br /&gt;unit in my Intel Core2 Quad (Q9550 at 2.83 GHz).&lt;br /&gt;&lt;br /&gt;The microbenchmark itself replicates the following block 512 times:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt; {&lt;br /&gt;  p1 = p1 * a; &lt;br /&gt;  p2 = p2 * b;&lt;br /&gt;  p3 = p3 * c; &lt;br /&gt;  p4 = p4 * d;&lt;br /&gt; }&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Compiling with NVCC, Ocelot, and LLVM, I can confirm the interleaved instruction&lt;br /&gt;schedule with a four-instruction reuse distance. An excerpt follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;  %r1500 = fmul float %r1496, %r24 ; compute %1500&lt;br /&gt;  %r1501 = fmul float %r1497, %r23&lt;br /&gt;  %r1502 = fmul float %r1498, %r22&lt;br /&gt;  %r1503 = fmul float %r1499, %r21&lt;br /&gt;&lt;br /&gt;  %r1504 = fmul float %r1500, %r24  ; first use of %1500&lt;br /&gt;  %r1505 = fmul float %r1501, %r23&lt;br /&gt;  %r1506 = fmul float %r1502, %r22&lt;br /&gt;  %r1507 = fmul float %r1503, %r21&lt;br /&gt;&lt;br /&gt;  %r1508 = fmul float %r1504, %r24  ; first use of %1504&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The JIT compiler, however, seems to break the interleaving of independent instructions&lt;br /&gt;and issues a long sequence of instructions with back-to-back dependencies. It is as if&lt;br /&gt;all p1 = .. expressions are collected at once followed by all p2 = .. expressions and so&lt;br /&gt;forth.&lt;br /&gt;&lt;code&gt;&lt;br /&gt; p1 = p1 * a&lt;br /&gt; p1 = p1 * a&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt;&lt;br /&gt; p2 = p2 * b&lt;br /&gt; p2 = p2 * b&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt;&lt;br /&gt; p3 = p3 * c&lt;br /&gt; p3 = p3 * c&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;An actual excerpt of the generated x86 assembly follows:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  mulss %xmm8, %xmm10&lt;br /&gt;  mulss %xmm8, %xmm10&lt;br /&gt;  .&lt;br /&gt;  . repeated 512 times &lt;br /&gt;  .&lt;br /&gt;&lt;br /&gt;  mulss %xmm7, %xmm9&lt;br /&gt;  mulss %xmm7, %xmm9&lt;br /&gt;  .&lt;br /&gt;  . repeated 512 times &lt;br /&gt;  .&lt;br /&gt;  &lt;br /&gt;  mulss %xmm6, %xmm3&lt;br /&gt;  mulss %xmm6, %xmm3&lt;br /&gt;  .&lt;br /&gt;  . repeated 512 times &lt;br /&gt;  .&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Since p1, p2, p3, and p4 are all independent, this reordering is correct. This would have &lt;br /&gt;the possible advantage of reducing live ranges of values. However, in this microbenchmark, &lt;br /&gt;the number of live values is eight single-precision floats - well within SSE's sixteen&lt;br /&gt;architectural registers.&lt;br /&gt;&lt;br /&gt;Moreover, the pipeline latency is four cycles meaning back-to-back instructions with true &lt;br /&gt;dependencies cannot issue immediately. The benchmark was intentionally written to avoid this&lt;br /&gt;hazard but LLVM's code generator seems to ignore that when it schedules instructions.&lt;br /&gt;&lt;br /&gt;When I run this benchmark on my 2.83 GHz CPU [45.3 GFLOP/s stated single-precision throughput],&lt;br /&gt;I observe the following performance results:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  1 threads       0.648891 GFLOP/s&lt;br /&gt;  2 threads       1.489049 GFLOP/s&lt;br /&gt;  3 threads       2.209838 GFLOP/s&lt;br /&gt;  4 threads       2.940443 GFLOP/s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;When I rewrite the generated assembly to exhibit the same interleaving as in the LLVM IR form&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;  mulss %xmm8, %xmm10&lt;br /&gt;  mulss %xmm7, %xmm9&lt;br /&gt;  mulss %xmm6, %xmm3&lt;br /&gt;  mulss %xmm5, %xmm11&lt;br /&gt;&lt;br /&gt;  mulss %xmm8, %xmm10&lt;br /&gt;  mulss %xmm7, %xmm9&lt;br /&gt;  mulss %xmm6, %xmm3&lt;br /&gt;  mulss %xmm5, %xmm11&lt;br /&gt;&lt;br /&gt;  mulss %xmm8, %xmm10&lt;br /&gt;  mulss %xmm7, %xmm9&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;observed performance increases by nearly a factor of four:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  1 threads       2.067118 GFLOP/s&lt;br /&gt;  2 threads       5.569419 GFLOP/s&lt;br /&gt;  3 threads       8.285519 GFLOP/s&lt;br /&gt;  4 threads       10.81742 GFLOP/s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I show similar results with packed single-precision floating point instructions. The LLVM-generated&lt;br /&gt;machine code is nearly 4x slower than the interleaved schedule suggested by the LLVM IR input.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  Vectorized - No instruction interleaving - back-to-back dependencies&lt;br /&gt;&lt;br /&gt;  1 threads        1.540621 GFLOP/s&lt;br /&gt;  2 threads        5.900833 GFLOP/s&lt;br /&gt;  3 threads        8.755953 GFLOP/s&lt;br /&gt;  4 threads        11.257122 GFLOP/s&lt;br /&gt;&lt;br /&gt;  Vectorized - Interleaved - stride-4 reuse distance&lt;br /&gt;&lt;br /&gt;  1 threads       3.157255 GFLOP/s&lt;br /&gt;  2 threads       22.104369 GFLOP/s&lt;br /&gt;  3 threads       32.300111 GFLOP/s&lt;br /&gt;  4 threads       39.112162 GFLOP/s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It is worth noting that 39.1 GFLOP/s is approaching the theoretical limits of the processor &lt;br /&gt;(stated to be 45.25 GFLOP/s single-precision).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-1762131524319606871?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/1762131524319606871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=1762131524319606871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1762131524319606871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1762131524319606871'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/11/llvm-floating-point-performance-bug.html' title='LLVM Floating-point Performance Bug'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3905448046712348618</id><published>2010-09-29T15:33:00.007-04:00</published><updated>2010-09-29T15:51:45.490-04:00</updated><title type='text'>Skiplists</title><content type='html'>&lt;a href="ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf"&gt;Skiplists&lt;/a&gt; are probabilistic data structures with many of the same properties as balanced binary search trees. They are analogous to express and local passenger trains and have O(log N) insert and search complexities.&lt;br /&gt;&lt;br /&gt;I implemented a skiplist container class in C++ to have the same semantics as STL's std::map&lt;&gt;. Here are some results for insertion of unique integers in random order:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;iteration and search tests pass.&lt;br /&gt;&lt;br /&gt;N = 25000&lt;br /&gt;avg insert: 13.1927&lt;br /&gt;log_2(N): 14.6096&lt;br /&gt;&lt;br /&gt;N = 25000&lt;br /&gt;avg search: 14.503&lt;br /&gt;log_2(N): 14.6096&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Another neat property is there isn't an expensive re-balancing operation as seen in red-black and AVL trees. The insert() and delete() operations simply need to update at most log_2(N) pointers. Haven't looked at actual performance of my implementation but I thought it was an interesting exercise.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is an example skiplist after 11 inserts (after the jump).&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[header]&lt;br /&gt; |         |         |        &lt;br /&gt; -&gt; [0]   -&gt; [1]   -&gt; [2]  &lt;br /&gt;&lt;br /&gt;[0] = 0&lt;br /&gt; |        &lt;br /&gt; -&gt; [1]  &lt;br /&gt;&lt;br /&gt;[1] = 10&lt;br /&gt; |         |        &lt;br /&gt; -&gt; [2]   -&gt; [2]  &lt;br /&gt;&lt;br /&gt;[2] = 20&lt;br /&gt; |         |         |        &lt;br /&gt; -&gt; [3]   -&gt; [6]   -&gt; [6]  &lt;br /&gt;&lt;br /&gt;[3] = 30&lt;br /&gt; |        &lt;br /&gt; -&gt; [4]  &lt;br /&gt;&lt;br /&gt;[4] = 40&lt;br /&gt; |        &lt;br /&gt; -&gt; [5]  &lt;br /&gt;&lt;br /&gt;[5] = 50&lt;br /&gt; |        &lt;br /&gt; -&gt; [6]  &lt;br /&gt;&lt;br /&gt;[6] = 60&lt;br /&gt; |         |         |        &lt;br /&gt; -&gt; [7]   -&gt; null   -&gt; null  &lt;br /&gt;&lt;br /&gt;[7] = 70&lt;br /&gt; |        &lt;br /&gt; -&gt; [8]  &lt;br /&gt;&lt;br /&gt;[8] = 80&lt;br /&gt; |        &lt;br /&gt; -&gt; [9]  &lt;br /&gt;&lt;br /&gt;[9] = 90&lt;br /&gt; |        &lt;br /&gt; -&gt; [10]  &lt;br /&gt;&lt;br /&gt;[10] = 100&lt;br /&gt; |        &lt;br /&gt; -&gt; null  &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Searching for key [9] would consist of visiting the following sequence of nodes: (header, 2, 6, 7, 8, 9). Searching for key [3] would consist of visiting (header, 2, 3).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3905448046712348618?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3905448046712348618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3905448046712348618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3905448046712348618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3905448046712348618'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/09/skiplists.html' title='Skiplists'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2255061821542913286</id><published>2010-08-16T13:39:00.007-04:00</published><updated>2011-02-21T11:08:43.884-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mountaineering'/><title type='text'>Ascent of Mount Rainier</title><content type='html'>On August 14, I set out with three companion to summit Mount Rainier. At 9:15 am yesterday, August 15, we reached the summit crater.&lt;br /&gt;&lt;br /&gt;The climb was well-documented with a digital camera, but here are some snapshots I took with my iPhone.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cRlKDoaLh7I/TGl4la1bIxI/AAAAAAAAABg/tddef03lNFA/s1600/IMG_0962.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_cRlKDoaLh7I/TGl4la1bIxI/AAAAAAAAABg/tddef03lNFA/s320/IMG_0962.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5506064603691033362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Mount Rainier seen from Muir Snowfield&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cRlKDoaLh7I/TGl4ziHNgjI/AAAAAAAAABo/lft75nlfdoQ/s1600/IMG_0973.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_cRlKDoaLh7I/TGl4ziHNgjI/AAAAAAAAABo/lft75nlfdoQ/s320/IMG_0973.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5506064846162854450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Summit crater of Mount Rainier&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cRlKDoaLh7I/TGl5BFnA1vI/AAAAAAAAABw/DgsN-kCDLT4/s1600/IMG_0984.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_cRlKDoaLh7I/TGl5BFnA1vI/AAAAAAAAABw/DgsN-kCDLT4/s320/IMG_0984.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5506065079029782258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Me, Ryan, and Tim (left to right) on Columbia Crest looking northwest toward Seattle.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cRlKDoaLh7I/TGnM7Ig5dSI/AAAAAAAAAB4/CFPZh2Dh7-Y/s1600/IMG_0983.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_cRlKDoaLh7I/TGnM7Ig5dSI/AAAAAAAAAB4/CFPZh2Dh7-Y/s320/IMG_0983.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5506157335706957090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Me on Columbia Crest with Mount Adams in background&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Comprehensive post to follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2255061821542913286?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2255061821542913286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2255061821542913286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2255061821542913286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2255061821542913286'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/08/ascent-of-mount-rainier.html' title='Ascent of Mount Rainier'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_cRlKDoaLh7I/TGl4la1bIxI/AAAAAAAAABg/tddef03lNFA/s72-c/IMG_0962.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7252006274451930102</id><published>2010-08-13T14:00:00.005-04:00</published><updated>2011-02-21T11:08:53.704-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mountaineering'/><title type='text'>Mount Rainier Weather Forecast</title><content type='html'>I've been refreshing &lt;a href="http://www.atmos.washington.edu/data/rainier_report.html"&gt;this page&lt;/a&gt; continuously for the past few days. If the forecast is correct, the summit should be warm and relatively calm. I'll have my four thermal layers nevertheless, but I feel the need to post the current forecast (below the break).&lt;br /&gt;&lt;br /&gt;&lt;img src="http://akerr.net/images/respect.jpg" alt="Mount Rainier, August 2009" /&gt;&lt;br /&gt;&lt;i&gt;Mount Rainier, August 22, 2009&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;MOUNT RAINIER RECREATIONAL FORECAST&lt;br /&gt;NATIONAL WEATHER SERVICE SEATTLE WA&lt;br /&gt;410 AM PDT FRI AUG 13 2010&lt;br /&gt;&lt;br /&gt;.SYNOPSIS...A STRONG UPPER LEVEL HIGH PRESSURE AREA OFFSHORE WILL &lt;br /&gt;BRING A PERIOD OF SUNNY DAYS...WITH TEMPERATURES WARMING THROUGH THE &lt;br /&gt;WEEKEND AS THE LOW LEVEL FLOW TURNS OFFSHORE. CLEAR WEATHER WILL&lt;br /&gt;CONTINUE EARLY NEXT WEEK WITH TEMPERATURES LIKELY TO MODERATE&lt;br /&gt;GRADUALLY.&lt;br /&gt;&lt;br /&gt;&amp;&amp;&lt;br /&gt;&lt;br /&gt;.FRIDAY...SUNNY. FREEZING LEVEL ABOVE 15000 FEET. &lt;br /&gt;.FRIDAY NIGHT...CLEAR. FREEZING LEVEL ABOVE 15000 FEET. &lt;br /&gt;.SATURDAY...SUNNY. FREEZING LEVEL ABOVE 15000 FEET. &lt;br /&gt;.SATURDAY NIGHT...CLEAR. FREEZING LEVEL ABOVE 15000 FEET. &lt;br /&gt;.SUNDAY...SUNNY. FREEZING LEVEL ABOVE 15000 FEET. &lt;br /&gt;&lt;br /&gt;&amp;&amp;&lt;br /&gt;TEMPERATURE AND WIND FORECASTS FOR SELECTED LOCATIONS.&lt;br /&gt;&lt;br /&gt;                       FRI    FRI    SAT    SAT    SUN  &lt;br /&gt;                            NIGHT         NIGHT        &lt;br /&gt;&lt;br /&gt;SUMMIT   (14411 FT)     34     33     37     34     38&lt;br /&gt;                      N 25  NE 14   E 10  NE  5   N  5 &lt;br /&gt;&lt;br /&gt;CAMP MUIR(10188 FT)     55     43     55     46     55&lt;br /&gt;                      E 10   E 15   E 15   E  5  SE  5 &lt;br /&gt;&lt;br /&gt;PARADISE  (5420 FT)     75     58     78     59     80&lt;br /&gt;                      E 10   E 10   E 10   E 10   E 10 &lt;br /&gt;&lt;br /&gt;LONGMIRE  (2700 FT)     81     58     84     58     88&lt;br /&gt;                      CALM   CALM   CALM   CALM   CALM&lt;br /&gt;&lt;br /&gt;++ TEMPERATURES AND WIND FOR THE SUMMIT AND CAMP MUIR ARE AVERAGE&lt;br /&gt;   CONDITIONS EXPECTED IN THE FREE AIR AT THOSE ELEVATIONS.&lt;br /&gt;++ TEMPERATURES FOR PARADISE AND LONGMIRE ARE THE EXPECTED HIGHS AND&lt;br /&gt;   LOWS. WIND IS THE AVERAGE WIND EXPECTED DURING THAT PERIOD.&lt;br /&gt;&lt;br /&gt;.EXTENDED FORECAST...&lt;br /&gt;&lt;br /&gt;.SUNDAY NIGHT THROUGH WEDNESDAY NIGHT...CLEAR. FREEZING LEVEL ABOVE&lt;br /&gt;15000 FEET. &lt;br /&gt;.THURSDAY...PARTLY SUNNY. A CHANCE OF SHOWERS IN THE AFTERNOON. &lt;br /&gt;FREEZING LEVEL 15000 FEET. &lt;br /&gt;&lt;br /&gt;$$&lt;br /&gt;&lt;br /&gt;WEATHER.GOV/SEATTLE&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/2043135047960620857-7252006274451930102?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7252006274451930102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7252006274451930102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7252006274451930102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7252006274451930102'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/08/mount-rainier-weather-forecast.html' title='Mount Rainier Weather Forecast'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5028674770941608343</id><published>2010-08-12T20:52:00.004-04:00</published><updated>2011-02-21T11:09:01.805-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mountaineering'/><title type='text'>Mount Rainier Climbing Information</title><content type='html'>Here are some Mount Rainier climbing resources if you're interested.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nps.gov/mora/planyourvisit/climbing.htm"&gt;Climbing information&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nps.gov/mora/planyourvisit/mount-rainier-maps.htm"&gt;Climbing routes&lt;/a&gt; (look for Paradise Routes - this is the best topographic map of the route to summit)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.summitpost.org/route/155670/disappointment-cleaver.html"&gt;Route information&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mountainguides.com/rainier-gear.shtml"&gt;Equipment checklist&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.atmos.washington.edu/data/rainier_report.html"&gt;Weather forecast&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5028674770941608343?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5028674770941608343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5028674770941608343' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5028674770941608343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5028674770941608343'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/08/mount-rainier-climbing-information.html' title='Mount Rainier Climbing Information'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8759780850500992218</id><published>2010-08-12T00:28:00.005-04:00</published><updated>2010-08-12T17:29:00.534-04:00</updated><title type='text'>To Climb Mount Rainier</title><content type='html'>The stars have aligned such that I might be a part of a three or four person rope team to attempt a summit of Mount Rainier on the weekend of August 13 - August 15. If all goes according to plan, we will reach Mount Rainier's 14,400 ft summit crater by approximately 10am Sunday morning.&lt;br /&gt;&lt;br /&gt;A detail plan will come out of a meeting between the climbers tomorrow evening. We will follow the &lt;a href="http://www.summitpost.org/route/155670/disappointment-cleaver.html"&gt;Disappointment Cleaver&lt;/a&gt; route. This is a two-day climb from the trailhead at Paradise to high camp at Camp Muir (10,100 ft) on a ridge between Cowlitz and Nisqually Glacier on Rainier's southern face. Early the next morning, we'll rope up and cross Cowlitz glacier and Ingraham flats toward Disappointment Cleaver, a rock formation dividing Emmons and Ingraham Glaciers. Once we reach the top of this formation, we'll proceed over snow up toward the crater rim, and from there to Columbia Crest (summit ridge) if weather permits.&lt;br /&gt;&lt;br /&gt;I hope it permits.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;Follow Mount Rainier's weather forecast &lt;a href="http://www.atmos.washington.edu/data/rainier_report.html"&gt;http://www.atmos.washington.edu/data/rainier_report.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;.THURSDAY...SUNNY. FREEZING LEVEL 14000 FEET. &lt;br /&gt;.THURSDAY NIGHT...MOSTLY CLEAR. FREEZING LEVEL 15000 FEET.&lt;br /&gt;.FRIDAY...SUNNY. FREEZING LEVEL ABOVE 15000 FEET. &lt;br /&gt;.FRIDAY NIGHT...CLEAR. FREEZING LEVEL ABOVE 15000 FEET.&lt;br /&gt;.SATURDAY...SUNNY. FREEZING LEVEL ABOVE 15000 FEET.&lt;br /&gt;&lt;br /&gt;.SATURDAY NIGHT THROUGH WEDNESDAY...CLEAR NIGHTS AND SUNNY DAYS. FREEZING&lt;br /&gt;LEVEL ABOVE 15000 FEET.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That appears to be ideal climbing weather.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8759780850500992218?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8759780850500992218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8759780850500992218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8759780850500992218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8759780850500992218'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/08/to-climb-mount-rainier.html' title='To Climb Mount Rainier'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6209323383754839184</id><published>2010-07-28T17:06:00.009-04:00</published><updated>2010-07-29T15:49:24.869-04:00</updated><title type='text'>Glacier Training: Prusik</title><content type='html'>The essence of human-powered ascent, by any means, is a lift followed by a rest. When climbing stairs, you lift yourself then stand while hoisting your free leg to the next tread. When climbing a rope, it's quite beneficial to have similar options. It is ideal if your legs can bear most of the lifting load, yet at any point relax while muscles regain strength.&lt;br /&gt;&lt;br /&gt;Enter the prusik hitch.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Three-wrap prusik hitch:&lt;br /&gt;&lt;img src="http://www.westernsafety.com/msa2009/msa09pg182-PrusikHitches.jpg" alt="hotlink: three-wrap prusik hitch" /&gt;&lt;br /&gt;&lt;br /&gt;This is a simple knot that may be tied from a loop of line that grips a climbing rope with great force when loaded, but when unloaded may be moved upwards or downwards. A pair of these hitches may be used to ascend a climbing rope as follows. A short loop makes the "waist prusik" and includes a three-wrap prusik hitch around the climbing rope as illustrated above and links to the climber's harness via a locking carabiner. A longer length of rope makes up the leg prusik; stirrups at the ends tie around boots. &lt;br /&gt;&lt;br /&gt;To ascend, start from sitting, suspended by the waist prusik with legs in stirrups of unloaded leg prusik. Employ the following procedure.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Stretch out legs and attempt to stand in leg prusik, using arms to maintain vertical posture&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use free hand to move unloaded waist prusik hitch as high up on the rope as possible&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sit in (now raised) waist prusik which should immediately grip climbing rope. You are now ~8 inches higher than you were before.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fold legs inward, unloading leg prusik&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use free hand to raise leg prusik upwards, just below waist prusik&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Repeat until at top of climbing rope&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a href="http://akerr.net/andrew/gallery/controllers/Nodes.php?action=show&amp;id=81"&gt;&lt;img src="http://akerr.net/andrew/gallery/controllers/Images.php?action=show&amp;id=183" /&gt;&lt;/a&gt; &lt;a href="http://akerr.net/andrew/gallery/controllers/Nodes.php?action=show&amp;id=82"&gt;&lt;img src="http://akerr.net/andrew/gallery/controllers/Images.php?action=show&amp;id=185" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To descend, the same process is used but in reverse, but you must govern yourself and not be too greedy. Only attempt ~8 inches of down-climb per iteration.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;While sitting, lower leg prusik 8" from below waist prusik hitch&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Stand in stirrups, unloading waist prusik&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lower waist prusik to top of leg prusik hitch&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sit in (now lowered) waist prusik to unload leg prusik hitch&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Repeat until on ground or bottom of climbing rope&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;After every eight to ten feet of elevation change, it would be nice to save progress so, in the event of slippage or other accident, you do not wind up at the bottom again. To accomplish this, make a "bight" in the climbing rope just below the prusik hitches and tie a figure eight knot. Clip this into your climbing harness with a free carabiner [NEVER open the gate of a carabiner that is providing protection to you or your gear]. Once this is done, a fall will at most set you back to the highest safety knot.&lt;br /&gt;&lt;br /&gt;If carrying a heavy backpack, it's very difficult to execute the above without quickly fatiguing. The pack moves your center of gravity outward putting more load on your arms. The only viable solution we were able to work out was to attach a third prusik hitch between the bag and the climbing rope below the leg prusik hitch. &lt;br /&gt;&lt;br /&gt;The sequence is modified by performing the following during every iteration:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;While seated, after raising leg prusik, lift bag hanging below.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use free hand to raise unloaded bag prusik hitch to below leg prusik.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Resume basic prusiking process, but execute this procedure after sitting every iteration.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Other options beyond a bag prusik were attempted, but none of them yielded satisfactory results when clipping into knots in the climbing rope. One method was to carabiner the bag to a loop that forms in the climbing rope, but this adds weight and pulls downward on your harness reducing the distance change per iteration. Another method ties the bag to the end of the climbing rope, but the first safety knot you make will transfer the bag's load to you. Neither of these were particularly satisfactory or as elegant as the third prusik.&lt;br /&gt;&lt;br /&gt;I took this camping:&lt;br /&gt;&lt;a href="http://akerr.net/andrew/gallery/controllers/Nodes.php?action=show&amp;id=83"&gt;&lt;img src="http://akerr.net/andrew/gallery/controllers/Images.php?action=show&amp;id=187" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Coming soon: glacier traversal&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6209323383754839184?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6209323383754839184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6209323383754839184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6209323383754839184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6209323383754839184'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/07/glacier-training-prusik.html' title='Glacier Training: Prusik'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2324435938807333264</id><published>2010-07-26T13:37:00.011-04:00</published><updated>2010-07-29T15:50:53.947-04:00</updated><title type='text'>Glacier Training on Mount Baker</title><content type='html'>The climb of Mount Adams two weeks ago was exhilarating and exhausting, but an important element of mountaineering was [thankfully] lacking: ice. Glaciers present a new set of hazards and require specialized techniques to overcome them. It behooves every mountaineer to obtain training and plenty of practice such that, in an emergency, the mountaineer can immediately swing into action and apply rescue procedures quickly and correctly. We react how we train.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/andrew/gallery/controllers/Nodes.php?action=show&amp;id=84"&gt;&lt;img src="http://akerr.net/andrew/gallery/controllers/Images.php?action=show&amp;id=188" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was fortunate enough to spend this weekend camping with Brooke and Ryan next to a glacier on Mount Baker. Ryan had taken a glacier class from a mountaineering guide service the previous weekend and explained to us as much of the material as we could get through. On the glacier, we put these concepts into action. Here is a list of the glacier traversal and rescue procedures we covered.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;prusiking&lt;/li&gt;&lt;br /&gt;&lt;li&gt;glacier traversal&lt;/li&gt;&lt;br /&gt;&lt;li&gt;crevasse identification&lt;/li&gt;&lt;br /&gt;&lt;li&gt;anchoring in snow&lt;/li&gt;&lt;br /&gt;&lt;li&gt;anchoring in ice&lt;/li&gt;&lt;br /&gt;&lt;li&gt;roping up&lt;/li&gt;&lt;br /&gt;&lt;li&gt;self-arrest&lt;/li&gt;&lt;br /&gt;&lt;li&gt;crevasse rescue&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ice climbing&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The two-day trip consisted of the following events. &lt;br /&gt;&lt;br /&gt;On Day 1, we: drove to Mount Baker-Snoqualmie National Forest, we hiked 2.5 miles from the trailhead to the camp site crossing numerous streams carrying glacier melt water down the volcano, setup camp, discussed rope climbing fundamentals, prusiked up a tree, had camp supper, enjoyed a view of the heavily glaciated face of Mount Baker, enjoyed discussion with some other climbers camping there, and I slept in a bivouac sack+thermarest+sleeping bag.&lt;br /&gt;&lt;br /&gt;On Day 2, we: carried gear onto the glacier, practiced traversal techniques, climbed over some ice mounds, made all sorts of anchors, setup ropes, practiced rescue techniques, practiced self-arrests, ice climbed, broke camp, hiked out, and enjoyed a nice supper at a brewery in Bellingham.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;What will eventually follow is a brief description of each of the hazards and techniques we trained for. The entire two-day trip was well documented, for the sake of both posterity and so I can review material. It will take several days to coalesce photos from two cameras and write things down, but I'll try to complete at least one section before the end of the week.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Coming soon: Prusiking&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2324435938807333264?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2324435938807333264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2324435938807333264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2324435938807333264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2324435938807333264'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/07/glacier-training-on-mount-baker.html' title='Glacier Training on Mount Baker'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3848887394801070692</id><published>2010-07-20T03:07:00.001-04:00</published><updated>2010-07-20T03:09:50.760-04:00</updated><title type='text'>Cimbing Mount Adams</title><content type='html'>&lt;a href="http://akerr.net/andrew/gallery/controllers/Albums.php?action=show&amp;id=1"&gt;&lt;img src="http://akerr.net/andrew/gallery/controllers/Images.php?action=show&amp;id=88"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/andrew/gallery/controllers/Albums.php?action=show&amp;id=1"&gt;Mount Adams&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3848887394801070692?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3848887394801070692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3848887394801070692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3848887394801070692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3848887394801070692'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/07/cimbing-mount-adams.html' title='Cimbing Mount Adams'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6782041624975326823</id><published>2010-07-14T13:37:00.016-04:00</published><updated>2010-07-26T14:01:57.722-04:00</updated><title type='text'>Climbing Mount Adams</title><content type='html'>&lt;span style="font-style:italic;"&gt;Mount Adams Climb Report. What follows is a somewhat meandering description of my climb of Mount Adams. I wrote most of this several days after the climb but didn't wrap it up until just now. One could conceivably annotate each paragraph with photos from the next blog post.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mount Adams is a prominent 12,280 ft stratovolcano in southern Washington state approximately 25 miles north of the Hood River and 20 miles east of Mount St. Helens. In early July, its beautiful slopes are snow-covered and offers an 'easy' climbing route along its southern face that is free from significant mountaineering hazards - crevasses to fall into, cliffs from which rocks fall, and avalanche-prone slopes - making it a popular climb for residents of Portland and Seattle. On July 11, 2010, I accompanied my roommate Tim and his friend Rumi to the summit of Mount Adams in a single day's climb. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Getting to Mount Adams wilderness requires approximately four hours of driving time from Bellevue, so we left at 11pm the night before and drove all night. Delayed slightly in acquiring our third climber, we didn't really depart Federal Way until close to midnight. During the drive, I managed to get perhaps 45 minutes of sleep but was otherwise conscious for the journey. By the time morning twilight approached, we were still beyond the trailhead wondering through backroads north of the Hood River and kicking ourselves for getting such a late start. Other climbers would be just waking up now, having camped at the trailhead or - better - at 9,000 ft and would easily summit during mid-morning when the snow is still frozen solid from the previous night's cold. Every second that passed as we blazed over the narrow dirt roads made the summit seem more and more distant.&lt;br /&gt;&lt;br /&gt;By about 6am, we reached the trailhead. Mt. Rainier had left me with false expectations, as Paradise, the trailhead for the skyline trail below the Muir Snowfields, is the location of an enormous resort hotel. Cold Springs on Mount Adams, in contrast, was a sequence of camp sites at the end of a labyrinth of dirt roads. On this day, it was full of vacant tents and quite calm. We recorded our location via a Garmin hand-held GPS and noted our starting elevation of approximately 5,500 ft above sea level. &lt;br /&gt;&lt;br /&gt;We donned our boots, grabbed our packs, and started up a dirt road consisting of four or five switchbacks. Starting time was 6:30am. In approximately 0.75 miles, we reached the first patches of snow. The sun was up, the sky bright blue, and filtering through the evergreen trees. This being the first time I wore my mountaineering boots outside of my bedroom and office, I noted they were remarkably comfortable. They demonstrated good traction on the snow, and nylon gaiters around my ankles prevented snow from entering above the laces.&lt;br /&gt;&lt;br /&gt;Thirty minutes in, we stopped to reconfigure our packs and apply sun screen. In spite of the snow on the ground, temperatures were warm, and our bodies' heat output was high. I wore a Patagonia capalene long-sleeved shirt whose loose weave enabled moisture to escape but kept me at a good temperature. Unfortunately, we knew that this day would be a warm one for southern Washington, and that would mean the snowfields we would be traversing would be soft and weak by the time we reached higher elevations. At best, this would mean more energy spent with each step. Worst case could mean avalanche danger in which entire slabs of snow pull apart and slide down the mountain. Things were calm and serene at this point, so we didn't dwell on that.&lt;br /&gt;&lt;br /&gt;We progressed quickly, and in spite of being the least experienced climber of this group, I kept up a good pace. In no time, our elevation gains became apparent. Mount Hood, directly to our south, loomed above Oregon. Occasionally, we'd obtain glimpses of the snow-covered Mount St. Helens, though her crater was not visible. Looking north, the 11,500 ft false summit of Mount Adams appeared as merely a point off in the distance. Insects buzzed around in spite of the snow, and the density of timber began to thin. What had once been small ridges lying distantly in our path had grown to be towering massifs. At some point, the hike had become a climb.&lt;br /&gt;&lt;br /&gt;Ascending a snow-covered slope is an iterative process in which the toe of one's boot is kicked into the snow with sufficient force to crush down the fluffy snow into a hard, foot-shaped step. The lead climber "breaks a trail" leaving a foot path the others follow. Kicking is hard work, but at this point no one was tired enough to feel a real need to take advantage of existing paths. That kind of bravado probably isn't a good idea, and we should have walked single file over the existing trail from earlier climbers. Below 8,000 ft, we maintained a fast aerobic pace and took breaks only for water, my 96 ounces of which were beginning to weigh upon me.&lt;br /&gt;&lt;br /&gt;The suns rays began making an impact. Snow is an excellent reflector, and we made frequent stops to apply sunscreen to our exposed parts. We got hotter, and there was frequent talk of being "cooked like a lobster." I donned glacier goggles, and hats came out.&lt;br /&gt;&lt;br /&gt;Just after noon, we reached the "Lunch Counter," a comparatively flat area at approximately 9,000 ft with exposed rocks. Sensible climbers attempting to summit Mount Adams in two-day climbs typically set up tents here using natural landforms to reduce exposure to winds. Brooke and Ryan camped here the weekend before my climb, for example. Climbers attempting to summit in a single day eat lunch here, as it is the last reprieve before a steep 2,000 ft ascent up to the false summit. We sat down on some warm volcanic rocks and ate a much-needed lunch. I ate a banana, peanut butter and jelly sandwich, drank some Gatorade, and consumed a Gu packet. The sweets were beginning to make me nauseated, but I didn't bring other options. We looked out past the beautiful river valley to Mount Hood and admired the view. Sparse clouds slowly rolled in from the east but never engulfed the mountain. Other climbers glissaded down from the summit, having sensibly gotten a far earlier start than we did.&lt;br /&gt;&lt;br /&gt;Setting off from the lunch counter, the climb quickly grew more challenging. We were now on an exposed face with a strong wind blowing down the mountain. The slope quickly steepened to the maximum of 30 degrees, and our ever increasing altitude made aerobic respiration difficult. Now afternoon, the overhead sun had warmed the snowfield such that each step sloshed through nearly a foot of snow, and the ice axe in my hand penetrated the entire length of its shaft as I dug in for additional support. Suspecting that at any moment my feet might slip and I would fall, I prepared to dig in with the ice axe for a self arrest with every step. &lt;br /&gt;&lt;br /&gt;I had trouble obtaining a satisfying pace and frequently climbed too fast then ran out of oxygen and had to pause to catch my breath. This quickly wore me out and didn't make this part of the climb too pleasant. A steady stream of climbers glissaded by, as our trail took us up between well-established glissade paths. Skiiers and snowboarders also whizzed by every so often, so we shouted out to them. I can't imagine a better way to give back nearly 7,000 ft of hard-won elevation than by skiing down, and these slopes were pretty ideal for that.&lt;br /&gt;&lt;br /&gt;After ages went by, Tim and I reached the false summit. The altitude was beginning to get to me, and I had to breath hard for nearly ten minutes to finally catch my breath. My throat was parched, but the Gatorade I had on hand left me nauseated. I highly recommend bringing water over Gatorade. We sat just below the peak of the false summit and admired the view from 11,500 ft. Just above our heads, a fast wind whipped over the peak and motivated better insulation. I added long underwear under my cargo pants, donned a $10.00 fleece jacket purchased from a Pier 39 giftshop in San Francisco, and put on a borrowed nylon shell jacket. This kept the wind out, me insulated, and ventilated to avoid perspiration building up inside.&lt;br /&gt;&lt;br /&gt;Peaking our heads over the false summit, an intense and continuous headwind blasted us. We had over 800 ft more to ascend and a daunting slope with plenty of wind exposure.  We moved swiftly along a shallow basin toward the next slope and looked upwards as tiny and distant climbers provided us a sense of scale. Tim, suffering slightly from the altitude and from the intentionally heavy pack he was carrying to train with, suggested I take the lead. &lt;br /&gt;&lt;br /&gt;With no one in front of me, I settled into a good pace that made what might otherwise have been a dreadful climb at the end of a long haul much more pleasant. I employed the "rest step" in which, after each step, a complete breath was inhaled and exhaled. If I put my foot down more than eight or nine inches above the previous step, I took a second breath. It took a deliberate effort to keep things slow, but consequently I could sustain over 200 steps between short rest breaks and I never reached a point in which anaerobic respiration got the better of me. If any part of the slope above looked like it might give way, I would have enough energy to attempt try to outrun it.&lt;br /&gt;&lt;br /&gt;In what felt like no time at all, I had climbed the last major stretch and stopped on a short crest awaiting my two other companions to reach me. I used the time to take panorama photographs with my iPhone whose LCD was completely invisible in the burning sunlight. Three or four individuals came down from the now-visible summit a mere hundred yards or so beyond me. I felt like racing up to it but instead elected to wait for my friends to arrive.&lt;br /&gt;&lt;br /&gt;They did, and we marched up to a small mound of snow covering the remains of an old mining shack. Volcanos are good sources of sulfur, evidently. This was the true summit, 12,280 ft above sea level. Sparse cloud cover at 8,000 ft added to the incredible view. Taking our first glimpses to the north, Mount Rainier loomed over the horizon, its three peaks easily resolvable. Mount Hood had grown less captivating with each exhausting push up the route, but suddenly it was much more charming, particularly since we were looking "down" on its 11,500 ft peak. Mount St. Helens was consumed by its cloud cover and barely visible. Several features on the north side of the mountain came into view. I never could make out the rounded concavity of a volcanic crater, but I'm told one exists and would probably be visible at the time of this writing due to melting. &lt;br /&gt;&lt;br /&gt;After plenty of summit photos, we took shelter behind the true summit. Winds had shifted, and it no longer concealed us from the blast, so we darted off back down the trail as quickly as possible. With five hours of daylight remaining, we weren't technically rushed, but "summit fever" had worn off.&lt;br /&gt;&lt;br /&gt;To enable a productive glissade, I duct-taped a plastic bag around the seat of my pants hoping it would reduce friction and keep me dry. Predictably, it didn't do either of those things and ripped off immediately. Nevertheless, on each of the steep slopes, I made an attempt to glissade down the well-established paths in the snow. And each time, I barely got moving at all. My pants are not slippery, and treking poles attached to my pack dug in. These factors combined with wet snow made the experience somewhat demeaning.&lt;br /&gt;&lt;br /&gt;In approximately three hours from the summit, we made it back to the trail and not long after the car. Energized by completion of an intense and impressive climb, we chattered on in the car for twenty minutes as we drove back to civilization. This lasted for twenty minutes and then I hit a wall. Over 42 hours of being awake hit me hard, and I became irritable and passed in and out of consciousness. The microsleeping lasted the entire way back; I tried to avoid actually going to sleep, as the driver was in the same sleep-exhausted condition as I was and, toward the end, was bouncing between rumble strips like photons in a fiber.&lt;br /&gt;&lt;br /&gt;Survived that, made it home at 3am. Arrived to work at 10:00am. Best climb to date!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6782041624975326823?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6782041624975326823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6782041624975326823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6782041624975326823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6782041624975326823'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/07/climbing-mount-adams.html' title='Climbing Mount Adams'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2488191132367716476</id><published>2010-07-13T14:01:00.010-04:00</published><updated>2010-07-13T15:08:07.159-04:00</updated><title type='text'>Blog Slacking</title><content type='html'>Since May, I've driven across the country, lived in Seattle for a week, visited San Francisco for a week, attended Emma's graduation ceremony, moved to Bellevue, written a whole lot of code, climbed several hills, biked all around, gone sailing, visited Illinois, and climbed Mount Adams. Shockingly, the only thing I've blogged during all of this is a simple quine I wrote in CUDA, and even then it was only to document having done it first.&lt;br /&gt;&lt;br /&gt;I'm a slacker.&lt;br /&gt;&lt;br /&gt;In related news, I've implemented a photo gallery for &lt;a href="http://www.fanbolt.com"&gt;FanBolt&lt;/a&gt; that I also plan on installing on akerr.net. It should satisfy the purposes of this blog quite well. As there is a value cliff coinciding with ComiCon for getting the photo gallery into production, it better be working by the end of this weekend. At that point in time, I'll upload photos from each of the above adventures to get some kind of documentation to you [few, eternally optimistic] readers!&lt;br /&gt;&lt;br /&gt;Blogger &lt;i&gt;iframe&lt;/i&gt; test:&lt;br /&gt;&lt;iframe src ="http://akerr.blogspot.com/2010/06/first-cuda-quine.html" width="100%" height="200" frameborder="0" scrolling="no"&gt;&lt;br /&gt;  &lt;p&gt;Your browser does not support iframes.&lt;/p&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2488191132367716476?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2488191132367716476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2488191132367716476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2488191132367716476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2488191132367716476'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/07/blog-slacking.html' title='Blog Slacking'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7170339808308409437</id><published>2010-06-29T19:29:00.007-04:00</published><updated>2010-06-29T20:02:49.036-04:00</updated><title type='text'>First CUDA Quine</title><content type='html'>As you may know, a &lt;a href=""&gt;quine&lt;/a&gt; is a short program that prints its own source code using common facilities of the language. With CUDA 3.0 and Fermi's support of printf(), this isn't very difficult to do with CUDA. Here is an example, the first I've seen to run on a GPU.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ cat quine.cu &lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;__device__ const char *f="#include &amp;lt;stdio.h&amp;gt;%c__device__ const char *f=%c%s%c; __global__ void k(){ printf(f,10,34,f,34,10); } int main() { k&amp;lt;&amp;lt;&amp;lt; dim3(1,1),dim3(1,1)&amp;gt;&amp;gt;&amp;gt;(); cudaThreadExit(); return 0; }%c"; __global__ void k(){ printf(f,10,34,f,34,10); } int main() { k&amp;lt;&amp;lt;&amp;lt; dim3(1,1),dim3(1,1)&amp;gt;&amp;gt;&amp;gt;(); cudaThreadExit(); return 0; }&lt;br /&gt;&lt;br /&gt;$ nvcc --run quine.cu -arch sm_20 &amp;gt; quine2.cu&lt;br /&gt;$ diff quine.cu quine2.cu&lt;br /&gt;$ nvcc --run quine2.cu -arch sm_20 &amp;gt; quine3.cu&lt;br /&gt;$ diff quine.cu quine3.cu&lt;br /&gt;$ &lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-7170339808308409437?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7170339808308409437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7170339808308409437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7170339808308409437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7170339808308409437'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/06/first-cuda-quine.html' title='First CUDA Quine'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6656693056557135779</id><published>2010-03-30T15:14:00.005-04:00</published><updated>2010-03-30T15:17:19.691-04:00</updated><title type='text'>Ocelot Overview</title><content type='html'>With 2010 being the year of the &lt;a href="http://code.google.com/p/gpuocelot/"&gt;Ocelot&lt;/a&gt;, I've made a slight modification to the Ocelot Overview image that has found its way into so many presentations [not all of which have been mine]. See if you can spot it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/ocelot.png"&gt;&lt;img src="http://akerr.net/images/ocelot.png" alt="Ocelot Overview" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6656693056557135779?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6656693056557135779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6656693056557135779' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6656693056557135779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6656693056557135779'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/03/ocelot-overview.html' title='Ocelot Overview'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-542054090428267258</id><published>2010-03-06T19:03:00.021-05:00</published><updated>2011-02-21T11:09:17.026-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ferroequinology'/><title type='text'>Baker Valve Gear Simulator in Python</title><content type='html'>What started off as a &lt;a href="http://xkcd.com/303/"&gt;compile-time project&lt;/a&gt; has finally yielded some results.&lt;br /&gt;&lt;br /&gt;As some of you are aware, my interests in engineering exceed computing and from time to time take the front seat for brief periods. In this case, I've spent two weekends volunteering at the &lt;a href="http://www.srmduluth.org/default.shtml"&gt;Southeastern Railway Museum&lt;/a&gt; shops with the hope of working on the preservation and restoration of the exquisite &lt;a href="http://www.ironhorse129.com/Friends/DavyCormack/A&amp;WP290.htm"&gt;A&amp;WP 290&lt;/a&gt;. The neat thing about steam locomotives is they're incredibly overt exhibitions of thermodynamics and mechanics. The boiler is a giant heat exchanger that sends steam to cylinders where work is performed. A mechanical linkage outside the frame transmits this power to the wheels and uses the wheel position to configure valves that admit and exhaust the working fluid.&lt;br /&gt;&lt;br /&gt;One of the things I was interested in was a mathematical model of this linkage. This sort of modelling has applications in robotics and kinematics simulations, so it's not too bizarre of a topic for a computer engineer to dabble in. To simulate the valve gear, I constructed a set of polynomial equations modelling each rod as a constant length between two points capable of 2D motion in a plane. The collection of pin joints and rigid rods determines a finite set of possible static equilibria for the system. Enough points can be computed analytically so a numerical non-linear equation solver can compute the others.&lt;br /&gt;&lt;br /&gt;I wrote a &lt;a href="http://akerr.net/images/steam/models/valvegear/valve.py"&gt;Python application&lt;/a&gt; [distributed as source] using SciPy's &lt;a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html"&gt;fsolve()&lt;/a&gt; to simulate the running gear. Plots generated with &lt;a href="http://matplotlib.sourceforge.net/"&gt;matplotlib&lt;/a&gt; provide visual output.&lt;br /&gt;&lt;br /&gt;Here are some of the results. This wikipedia article explains the &lt;a href="http://en.wikipedia.org/wiki/Baker_valve_gear"&gt;Baker valve gear&lt;/a&gt; and this &lt;a href="http://www.steamlocomotive.com/appliances/baker.gif"&gt;animated gif&lt;/a&gt; shows it in operation [generated from an existing valve gear simulator which I've not yet used to validate mine]. Other valve gears are explained on &lt;a href="http://www.steamlocomotive.com/appliances/valvegear.php"&gt;this page&lt;/a&gt; if you're interested.&lt;br /&gt;&lt;br /&gt;The following plot illustrates the state of the running gear for several wheel rotations. Not every part is a two-joint rod; there is a bellcrank and an eccentric crank mounted to the main crank pin. See the Wikipedia article for a better illustration.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/steam/models/valvegear/baker-valve-gear.png"&gt;&lt;br /&gt;&lt;img src="http://akerr.net/images/steam/models/valvegear/baker-valve-gear.png" alt="Baker valve gear simulation" style="width:100%;height:100%" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following plot illustrates the offsets of the crosshead and cylinder valves for two different cutoffs and two different laps. Cutoff is the angle between vertical and the valve gear's yoke. 0 degrees is effectively neutral, and +25 degrees is "well forward." Setting it to a negative angle reverses the locomotive. Lap is, in a manner of speaking, the amount of motion derived from the crosshead; the valves can move this much without actually admitting any steam. It's worth noting that lap is built into the valve gear, while cutoff is a setting that is adjusted during operation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/steam/models/valvegear/cylinder-valves.png"&gt;&lt;br /&gt;&lt;img src="http://akerr.net/images/steam/models/valvegear/cylinder-valves.png" alt="Baker valve gear simulator - cylinder valves" style="width:100%;height:100%" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To achieve smooth operation, it's desirable to admit steam into the cylinder before the piston has reached front or back dead center. This "lead" is effectively a phase offset that depends on the direction of motion. The amount of lap affects the amount of lead by mixing the 90-degree offset motion of the valve gear with the crosshead via the combination lever. The following plot illustrates the displacement of the cylinder valves as zero-mean curves to enable a direct comparison of 0" and 3.5" of lap. In practice, it's easy to add a constant linear offset to the cylinder valve spindle, and this is one of the variables that must be tuned when the locomotive is overhauled.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/steam/models/valvegear/cylinder-valves-constant-lead.png"&gt;&lt;br /&gt;&lt;img src="http://akerr.net/images/steam/models/valvegear/cylinder-valves-constant-lead.png" alt="zero-mean cylinder valve displacement" style="width:100%;height:100%" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The rod sizes and geometry used in this simulation were estimated from photographs of A&amp;WP 290 as well as direct measurements. I didn't get every measurement I wanted, as I was taking them by hand with a tape measure that falls apart, and real locomotives are 3 dimensional and quite large. Nevertheless, this was an interesting project and I'm very gratified by the results. Maybe one day I'll build a 7.5" gauge live steamer and dust off this code for design purposes...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-542054090428267258?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/542054090428267258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=542054090428267258' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/542054090428267258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/542054090428267258'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/03/baker-valve-gear-simulator-in-python.html' title='Baker Valve Gear Simulator in Python'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-538863418941262526</id><published>2010-02-17T13:02:00.003-05:00</published><updated>2010-02-17T14:16:18.653-05:00</updated><title type='text'>NP</title><content type='html'>I thought of this &lt;a href="http://xkcd.com/"&gt;XKCD&lt;/a&gt; comic last night as I was showing problems were in NP. Resurrected for your amusement.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/287/"&gt;&lt;img src="http://imgs.xkcd.com/comics/np_complete.png" alt="NP-Complete" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Read up on &lt;a href="http://en.wikipedia.org/wiki/Karp%27s_21_NP-complete_problems"&gt;Karp's NP-Complete Problems&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-538863418941262526?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/538863418941262526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=538863418941262526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/538863418941262526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/538863418941262526'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/02/np.html' title='NP'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3766584772937326931</id><published>2010-02-15T16:17:00.003-05:00</published><updated>2010-02-15T16:20:41.512-05:00</updated><title type='text'>Upwelling Within</title><content type='html'>I have the urge to build something in ways that do not involve typing. Something mechanical with moving parts.&lt;br /&gt;&lt;br /&gt;In potentially related news, this looked neat: &lt;a href="http://en.wikipedia.org/wiki/Crower_six_stroke"&gt;Crower six-stroke&lt;/a&gt; diesel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3766584772937326931?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3766584772937326931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3766584772937326931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3766584772937326931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3766584772937326931'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/02/upwelling-within.html' title='Upwelling Within'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-598329603840269307</id><published>2010-02-14T19:22:00.011-05:00</published><updated>2010-02-15T16:16:51.763-05:00</updated><title type='text'>Motherboard Death Throws</title><content type='html'>My desktop is back. Evidently, one [of three] PCI-Express x16 lanes is dead as is one of the memory channels. The system refuses to POST with something occupying any of the damaged connectors. This leaves two [though one inaccessible] PCI-Express x16 slots and one memory channel still viable. I can make do with this configuration for the time being.&lt;br /&gt;&lt;br /&gt;The experience has prompted the question of what I want in a home desktop. While there was a time when GPU VSIPL development and benchmarking demanded a high-end system, now I do most work on other resources purchased by the research budget. I don't game, and I do most home development on my laptop which is typically booted into Linux. I wouldn't have a need for Windows at all except to synchronize my iPhone, though it's nice to have that kind of compatibility for special interests and the occasional foray into 3D graphics programming. That said, a low-end multicore CPU and medium-range GPU could satisfy those needs quite well. &lt;br /&gt;&lt;br /&gt;With a medium-performance laptop dual booting Windows and Linux, do I need the desktop at all? &lt;br /&gt;&lt;br /&gt;The strongest reason I can see for wanting one is to have a stable place for an array of harddrives to ensure reliable access to a decade or so of accumulated data. That's a task easily serviced by network-attached storage [1].&lt;br /&gt;&lt;br /&gt;This has disturbing implications for the value of my research interests at the consumer level...&lt;br /&gt;&lt;br /&gt;[1] &lt;b&gt;BUT NOT IF IT'S MADE BY LACIE &lt;/b&gt; - you're better off keeping your data on floppy disks under your mattress than shoveling it into that black hole of a storage medium; it's a place where entropy goes to die; fail fail fail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-598329603840269307?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/598329603840269307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=598329603840269307' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/598329603840269307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/598329603840269307'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/02/motherboard-death-throws.html' title='Motherboard Death Throws'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2195666646682260721</id><published>2010-02-10T16:37:00.003-05:00</published><updated>2010-02-10T17:06:49.319-05:00</updated><title type='text'>GPU Ocelot</title><content type='html'>What follows are a set of ideas I've been babbling to people over the past few days:&lt;br /&gt;&lt;br /&gt;A recent call for papers to contribute to &lt;a href="http://www.nvidia.com/object/io_1265140268552.html"&gt;NVIDIA's GPU Computing Gems&lt;/a&gt; has prompted the brainstorming of potential uses for &lt;a href="http://code.google.com/p/gpuocelot/"&gt;GPU Ocelot&lt;/a&gt;. It occurs to me that I've not done a post that addresses an important segment of the GPU Ocelot user space: CUDA developers.&lt;br /&gt;&lt;br /&gt;While Ocelot makes a good infrastructure for researching GPU architecture, programming models, compiler transformations, and operating systems, it's also incredibly useful for CUDA application development and performance tuning. Ocelot consists of an implementation of the CUDA Runtime API with three backends for executing CUDA kernels on: a full-featured PTX emulator with instrumentation, an efficient translator to multicore CPU, and a CUDA-capable GPU. I'll be focusing on the capabilities enabled by Ocelot's PTX emulator for most of this post.&lt;br /&gt;&lt;br /&gt;PTX is the virtual instruction set that the CUDA compiler targets. Ocelot includes an instruction-by-instruction emulation of PTX kernels in a manner that is faithful to the PTX execution model and very similar to how GPUs might execute the kernel. Since Ocelot explicitly computes the state of a PTX kernel for every instruction and every thread, detailed instrumentation and analysis is possible. Here are some of the features that greatly assist in developing CUDA applications and tuning them for efficient execution on GPUs.&lt;br /&gt;&lt;br /&gt;Ocelot's PTX emulator is capable of checking for out-of-bounds memory accesses. Without Ocelot, your application might simply seg-fault on the GPU and possibly crash your video driver. There aren't really any tools currently available to help you find these problems, and padding added to memory allocations by the CUDA driver may conceal problems on the system you test with only to explode on your users whose systems may be different.&lt;br /&gt;&lt;br /&gt;Beyond global memory accesses, Ocelot's emulator detects race conditions in shared memory that necessitate use of synchronization as well as deadlocks in which not all threads reach a synchronization point. To achieve maximum performance from the memory system, Ocelot includes a way of determining whether the application is taking advantage of spatial locality of data whose accesses can be coalesced in time. At present, we do not detect bank conflicts in which multiple concurrent threads attempt to access the same port of shared memory; on a GPU, these must be serialized greatly impacting performance. I plan to implement that soon.&lt;br /&gt;&lt;br /&gt;Finally, Ocelot supports user-contributed trace generators. You could write, for example, a trace generator that watches a particular location in memory and identifies when that location was updated and by which thread(s). I believe I will write this and then, in a blog post, demonstrate how to extend it.&lt;br /&gt;&lt;br /&gt;NVIDIA's CUDA does include an emulation target, but this is implemented completely differently using one host thread per logical CUDA thread. This MIMD approach to kernel execution is terribly inefficient, as most of the application runtime is spent by the OS switching contexts between threads. Moreover, it constitutes a radical departure from the way kernels are executed by GPUs to the extent that CUDA kernels that are invalid for subtle reasons may execute correctly on their emulator but incorrectly on a GPU. Ocelot's PTX emulator presents a more similar execution environment that captures the subtleties of the GPU execution model.&lt;br /&gt;&lt;br /&gt;GPU Ocelot is fairly stable as of this writing. It has been validated with over a hundred applications from the CUDA SDK, third party benchmark suites, CUDA-based libraries such as GPU VSIPL and Thrust, and custom CUDA applications. Ocelot has been used to capture performance characteristics of these applications as well as find nuanced bugs in existing CUDA programs. It constitutes a great improvement over NVIDIA's emulation mode CUDA runtime in terms of both accuracy, observability of potential bugs, and emulation performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2195666646682260721?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2195666646682260721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2195666646682260721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2195666646682260721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2195666646682260721'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/02/gpu-ocelot.html' title='GPU Ocelot'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4749659235454476985</id><published>2010-02-02T11:08:00.004-05:00</published><updated>2010-02-02T11:13:29.534-05:00</updated><title type='text'>JSON</title><content type='html'>Last October, I wrote a &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt; parser in C++ that constructs a document object structure. A &lt;a href="http://en.wikipedia.org/wiki/Visitor_pattern"&gt;visitor&lt;/a&gt; class provides convenient access to the document object, and a number of tests validate the parser. I've also relaxed the specification to permit strings without quotation marks assuming they meet the same rules as variables in a C-like programming language. Multi-byte encodings aren't as well-tested or covered.&lt;br /&gt;&lt;br /&gt;I'm preparing to make it available under a BSD license. Here's a sample usage scenario from the test suite.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//&lt;br /&gt;// Example JSON usage&lt;br /&gt;//&lt;br /&gt;try {&lt;br /&gt;  std::stringstream ss;&lt;br /&gt;  json::Parser parser;&lt;br /&gt;&lt;br /&gt;  // without quotes, and with weird spacing&lt;br /&gt;  ss &lt;&lt; "{objects:[{id:1, location : [ 0, 0,0]},{id:2,location:[1.25,0.25,4]}]}";&lt;br /&gt;  &lt;br /&gt;  json::Object *object = parser.parse_object(ss);&lt;br /&gt;  json::Visitor visitor(object);&lt;br /&gt;  &lt;br /&gt;  json::Visitor obj0 = visitor["objects"][0];&lt;br /&gt;  json::Visitor obj1 = visitor["objects"][1];&lt;br /&gt;  &lt;br /&gt;  if ((int)(obj0["id"]) != 1 || (double)(obj0["location"][0]) != 0) {&lt;br /&gt;    if (verbose) {&lt;br /&gt;      std::cout &lt;&lt; "visitor test 0 - failed for obj0\n";&lt;br /&gt;    }&lt;br /&gt;    passes = false;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if ((int)(obj1["id"]) != 2 || (double)(obj1["location"][0]) != 1.25 ||&lt;br /&gt;    (double)(obj1["location"][1]) != 0.25 || (double)(obj1["location"][2]) != 4) {&lt;br /&gt;    if (verbose) {&lt;br /&gt;      std::cout &lt;&lt; "visitor test 0 - failed for obj1\n";&lt;br /&gt;    }&lt;br /&gt;    passes = false;     &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  delete object;&lt;br /&gt;}&lt;br /&gt;catch (common::exception &amp;exp) {&lt;br /&gt;  passes = false;&lt;br /&gt;  std::cout &lt;&lt; "parse failed for visitor test 0\n";&lt;br /&gt;  std::cout &lt;&lt; exp.message &lt;&lt; std::endl;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4749659235454476985?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4749659235454476985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4749659235454476985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4749659235454476985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4749659235454476985'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/02/json.html' title='JSON'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4279700674305682462</id><published>2010-01-30T18:51:00.000-05:00</published><updated>2010-01-30T18:52:08.083-05:00</updated><title type='text'>Turkey Albondigas</title><content type='html'>Emma and I are making this tonight: &lt;a href="http://www.eatingwell.com/recipes/turkey_albondigas_soup.html"&gt;Turkey albondigas&lt;/a&gt; soup. It is spectacular.&lt;br /&gt;&lt;br /&gt;Posted here for posterity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4279700674305682462?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4279700674305682462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4279700674305682462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4279700674305682462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4279700674305682462'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/01/turkey-albondigas.html' title='Turkey Albondigas'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4805744474800929415</id><published>2010-01-17T15:08:00.009-05:00</published><updated>2010-01-17T19:04:41.441-05:00</updated><title type='text'>Spring 2010</title><content type='html'>I'm enrolled in two Computer Science courses: &lt;a href="http://www.cc.gatech.edu/classes/AY2010/cs6505_spring/"&gt;CS 6505&lt;/a&gt; for an unneeded grade, and &lt;a href="http://rjlipton.wordpress.com/2010/01/12/a-course-on-complexity-theorem/"&gt;CS 6520&lt;/a&gt; for fun.&lt;br /&gt;&lt;br /&gt;In CS6505 on Friday, I was asked to show the rationals are countable. Having seen this problem before, I quickly mapped the rationals onto discrete points in a 2D plane and, while waving hands, showed how they could be counted by spiralling outward from the origin. "There are different classes of infinity," I struggled to explain. The three gentlemen I was sitting with were not necessarily convinced I had done any math or that my explanation was adequate, so I cast about for a better method.&lt;br /&gt;&lt;br /&gt;Here it is. Recall that &lt;b&gt;N&lt;/b&gt; is the set of natural numbers: {1, 2, 3, ..}, integers are the set &lt;b&gt;Z&lt;/b&gt; = {.., -2, -1, 0, 1, 2, ..}, and the rational numbers are numbers that are the ratio of an integer to a natural number. A set is &lt;i&gt;countable&lt;/i&gt; iff there exists a mapping to the natural numbers. &lt;br /&gt;&lt;br /&gt;Finite sets are of course countable, but showing that infinite sets are countable requires a bit more thought. The integers, for example, may be mapped to natural numbers as follows: let "0" be integer number 1, +1 be integer number 2, -1 be integer number 3, +2 be integer number 4, -2 be integer number 5, and so on. Easy.&lt;br /&gt;&lt;br /&gt;Now for the rationals. Consider an integer &lt;i&gt;a&lt;/i&gt; represented by the bits (a0 a1 a2 .. an), where a0 is 0 if &lt;i&gt;a&lt;/i&gt; is positive and 1 if &lt;i&gt;a&lt;/i&gt; is negative, while bits (a1 a2 .. an) denote the absolute value of &lt;i&gt;a&lt;/i&gt;. Assume &lt;i&gt;b&lt;/i&gt; is an &lt;i&gt;n&lt;/i&gt;-bit natural number formed by bits (b1 b2 .. bn). The pair (&lt;i&gt;a&lt;/i&gt;, &lt;i&gt;b&lt;/i&gt;) represents some rational number. We may now form a string from the bit representation of (&lt;i&gt;a&lt;/i&gt;, &lt;i&gt;b&lt;/i&gt;) as follows:&lt;br /&gt;&lt;br /&gt;(1 a0 a1 b1 a2 b2 a3 b3 .. an bn)&lt;br /&gt;&lt;br /&gt;This binary string maps to a unique natural number. Moreover, we see that the set &lt;b&gt;Z&lt;/b&gt;x&lt;b&gt;N&lt;/b&gt; is a superset of the rationals (-10/5 and -2/1 are the same rational number but distinct in the superset &lt;b&gt;Z&lt;/b&gt;x&lt;b&gt;N&lt;/b&gt;). Because each element of this superset maps to a unique natural number, it is countable, and therefore the rationals are countable. qed.&lt;br /&gt;&lt;br /&gt;My personal take-aways from this experience: (1) writing things down like this rather than drawing visual aids and pointing seems to make people more comfortable, and (2) trying to show something in two slightly different ways is a good exercise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4805744474800929415?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4805744474800929415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4805744474800929415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4805744474800929415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4805744474800929415'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2010/01/spring-2010.html' title='Spring 2010'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2440339888213983905</id><published>2009-12-28T15:13:00.016-05:00</published><updated>2011-02-22T10:41:50.279-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ferroequinology'/><title type='text'>Southeastern Railway Museum</title><content type='html'>The day after Christmas, my parents, Emma, and I  spent the afternoon at the &lt;a href="http://www.srmduluth.org/Exhibits/steam.shtml"&gt;Southeastern Railway Museum&lt;/a&gt;. Their large and growing collection includes a number of cosmetically restored rolling stock from railroads in the Southeast including several large steam locomotives. This post covers some of the photographs from that visit.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://akerr.net/images/2009Dec26/IMG_7336_small.jpg" alt="S&amp;amp;A #750" /&gt;&lt;br /&gt;&lt;i&gt;Savannah and Atlant #750&lt;/i&gt; - This 4-6-2 "Light Pacific" built in 1910 pulled excursions all around the Southeastern U.S. including one in 1989 that I rode on. It was last operated that year and currently sits on static display, having been cosmetically restored.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on photos to expand them to their full version.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7331_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 520px; height: 781px;" src="http://akerr.net/images/2009Dec26/IMG_7331_small.jpg" alt="S&amp;amp;A #750" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7327_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://akerr.net/images/2009Dec26/IMG_7327_small.jpg" alt="S&amp;amp;A #750" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7264_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7264_small.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My darling Emma at the throttle. Her right hand is on the power reverse lever, and her legs are crossed because she is a lady.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7262_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7262_small.jpg" alt="S&amp;amp;A #750" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Me in the cab. The smaller numbers [expand the photo] refer to dimensions of the running gear: 69" driver wheels, 22" diameter cylinders, 26" stroke. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7301_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 781px; height: 520px;" src="http://akerr.net/images/2009Dec26/IMG_7301_small.jpg" alt="S&amp;amp;A 750" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a direct shot of the &lt;a href="http://en.wikipedia.org/wiki/Walschaerts_valve_gear"&gt;Walschaerts valve gear&lt;/a&gt;. A valve gear provides a linear reciprocating motion that is either 90 or 270 degrees out of phase with the main crank pin plus a small amount of lead thereby determining which side of the piston steam is admitted and for how long during the stroke. To reverse the steam locomotive, the &lt;i&gt;radius rod&lt;/i&gt; pivot is moved to the top of the &lt;i&gt;expansion link&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7302_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 781px; height: 520px;" src="http://akerr.net/images/2009Dec26/IMG_7302_small.jpg" alt="S&amp;amp;A 750" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Attention all Boiler Makers!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7266_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7266_small.jpg" alt="S&amp;amp;A 750 firebox" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;S&amp;amp;A #750&lt;/i&gt; - This photograph of #750's firebox illustrates why it is very unlikely she will ever run under steam again. The crownsheet was worn considerably and panels were cut out along the top sides of the firebox. Needless to say, a lot would have to be repaired here for #750's boiler to be certified. &lt;br /&gt;&lt;br /&gt;Also visible in several of the large flues are the ends of superheater steam pipes. To improve the efficiency of the boiler, steam is piped down and back through the large fire tubes before it reaches the throttle valve. This increases the stagnation temperature of the working fluid yielding what is known as "dry steam" and increases the amount of work it can do in the cylinders. In effect, this applies the concept of a water tube boiler to the fire tube design used in nearly all steam locomotives in the U.S..&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7270_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7270_small.jpg" alt="S&amp;amp;A 750 firebox" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7347_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7347_small.jpg" alt="S&amp;amp;A 750" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A&amp;WP 290&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Later in the day and being the trouble maker that I am, I gave myself a self-guided tour of the SERM's machine shop which houses an assortment of locomotives and rolling stop in various stages of disassembly. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7352_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7352_small.jpg" alt="A&amp;amp;WP 290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;A&amp;WP #290&lt;/i&gt; - Here, we see &lt;i&gt;Atlanta and West Point #290&lt;/i&gt;, the [formerly] beautiful 4-6-2 "heavy Pacific" that ran with #750 in the New Georgia Railroad until steam excursions stopped entirely. #290 was featured in the film &lt;i&gt;Fried Green Tomatoes&lt;/i&gt; [killing Buddy and severing Buddy Jr.'s arm] and has been covered in several Pentrex videos: &lt;a href="http://www.youtube.com/watch?v=NsWea3dysuo"&gt;link&lt;/a&gt; [YouTube].&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7353_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7353_small.jpg" alt="A&amp;amp;WP 290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I didn't have my tripod in the shop, and exposure times were typically between 2 and 3 seconds, so the photos are slightly blurry. Last time I was here [May 2005], #290 was in the midst of restoration to operational status. The jacketing that insulates the boiler has been removed, as seen here, and preperations were underway to lift the boiler and firebox off the chassis to have it shipped to Alabama. &lt;br /&gt;&lt;br /&gt;There, it was planned that her boiler be thoroughly inspected and analyzed for repair and recertification, something every steam boiler must undergo every ten years. Unfortunately, funding never crystalized, and Norfolk Southern has since refused to permit steam operations on its mainlines. Lacking cash and a place to operate her, SERM has since stopped hard work on #290 though they hope to have her on static display at some point. Talking with one of the shop foremen, it seems her boiler "should" be viable and her running gear is in excellent shape. "If &lt;a href="http://www.classiclights.org/4501/4501.html"&gt;4501&lt;/a&gt; can cross the country, why not #290?" Why not indeed!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7356_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7356_small.jpg" alt="A&amp;amp;WP 290 firebox" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is what a "good" firebox looks like.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7351_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7351_small.jpg" alt="A&amp;amp;WP 290 firebox" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Built in 1926, &lt;i&gt;A&amp;WP #290's&lt;/i&gt; valve gear is of the more modern &lt;a href="http://en.wikipedia.org/wiki/Baker_valve_gear"&gt;Baker&lt;/a&gt; type which was adopted by all USRA "Heavy Pacifics." I find it exotic and interesting. Apparently this design has joints that are easier to lubricate and less susceptible to wear.&lt;br /&gt;&lt;br /&gt;More photos of #290 in operation may be found &lt;a href="http://www.ironhorse129.com/Friends/DavyCormack/A&amp;WP290.htm"&gt;on the Internets&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Georgia Power #97&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7379_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7379_small.jpg" alt="GP 97 boiler" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SERM is more concerned with restoring their 0-6-0 &lt;i&gt;Georgia Power #97&lt;/i&gt;. This is its boiler, primered and ready to be shipped off for analysis. Its smaller, cheaper to operate, and they can run it within the grounds of the museum to give rides and do work making it much more practical.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://akerr.net/images/2009Dec26/IMG_7377_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 778px; height: 518px;" src="http://akerr.net/images/2009Dec26/IMG_7377_small.jpg" alt="GP 97 boiler" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is its chassis.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The End&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Feel free to visit the disorganized &lt;a href="http://akerr.net/images/2009Dec26/"&gt;dump of photos&lt;/a&gt; taken that day. Most were recorded as RAW that I hastily and automatically converted and downsampled to JPEG.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2440339888213983905?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2440339888213983905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2440339888213983905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2440339888213983905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2440339888213983905'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/12/southeastern-railway-museum.html' title='Southeastern Railway Museum'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6708663039744555994</id><published>2009-12-23T00:21:00.004-05:00</published><updated>2009-12-23T01:08:41.395-05:00</updated><title type='text'>Selection sort, 64-bit</title><content type='html'>Having haphazardly embarked on &lt;a href="http://www.agner.org/optimize/"&gt;Agner Fog&lt;/a&gt;'s informative &lt;a href="http://www.agner.org/optimize/optimizing_cpp.pdf"&gt;C++ optimization guide&lt;/a&gt; [pdf], I decided it was time to write some x86-64 assembly to gain familiarity with the x86-64 instruction set. &lt;br /&gt;&lt;br /&gt;Selection sort is an easy hello-world type application for assembly programming. On a Windows platform, getting Visual Studio and &lt;a href="http://www.nasm.us/"&gt;NASM&lt;/a&gt; to build a project together demanded a moment's tinkering, so I didn't want to be too ambitious.&lt;br /&gt;&lt;br /&gt;The code listing follows. The best part is there is no stack frame to prepare or registers to spill. This doesn't do anything sophisticated like prefetch data, and of course isn't the best algorithm for sorting. It is pretty easy to spot the nested loops.&lt;br /&gt;&lt;br /&gt;Posted for your amusement.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;section .text code align=16&lt;br /&gt;&lt;br /&gt;global selsort&lt;br /&gt;&lt;br /&gt;; void selsort(int *A, int N)&lt;br /&gt;;&lt;br /&gt;; A: rcx&lt;br /&gt;; N: rdx&lt;br /&gt;;&lt;br /&gt;selsort:&lt;br /&gt; xor rax, rax&lt;br /&gt; &lt;br /&gt;L1:&lt;br /&gt; mov r8, rax&lt;br /&gt; inc r8&lt;br /&gt; mov r10, rax&lt;br /&gt; &lt;br /&gt;L2:&lt;br /&gt; cmp r8, rdx&lt;br /&gt; jz L3&lt;br /&gt; &lt;br /&gt; mov r11d, dword[rcx+r8*4]&lt;br /&gt; mov r9d, dword[rcx+r10*4]&lt;br /&gt; &lt;br /&gt; cmp r9d, r11d&lt;br /&gt; cmova r10, r8&lt;br /&gt;&lt;br /&gt; inc r8&lt;br /&gt; jmp L2&lt;br /&gt; &lt;br /&gt;L3:&lt;br /&gt; mov r11d, dword[rcx+rax*4]&lt;br /&gt; mov r9d, dword[rcx+r10*4]&lt;br /&gt; &lt;br /&gt; cmp r9d, r11d&lt;br /&gt; jge L4&lt;br /&gt; &lt;br /&gt; mov dword[rcx+r10*4], r11d&lt;br /&gt; mov dword[rcx+rax*4], r9d&lt;br /&gt; &lt;br /&gt;L4:&lt;br /&gt; inc rax&lt;br /&gt; cmp rax, rdx&lt;br /&gt; jnz L1&lt;br /&gt; &lt;br /&gt; ret&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6708663039744555994?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6708663039744555994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6708663039744555994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6708663039744555994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6708663039744555994'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/12/selection-sort-64-bit.html' title='Selection sort, 64-bit'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3625905046565710782</id><published>2009-12-14T23:07:00.005-05:00</published><updated>2009-12-14T23:25:57.388-05:00</updated><title type='text'>netherp - share your naughty bits!</title><content type='html'>At Josh's request, I threw the source code to netherp v2 up on a public Github repository. Here is the URL:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/kerrmudgeon/kerrutils/blob/master/netherp"&gt;http://github.com/kerrmudgeon/kerrutils/blob/master/netherp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;netherp was originally intended to be a minimal-configuration HTTP server for sharing files among two machines of arbitrary make and model. One day a few weeks ago I became enthusiastic about asynchronous I/O and non-threaded server architectures, so I wrote a second version from scratch. It doesn't support HTTP PUT or POST or any method other than GET. There is no authentication, and I suspect there may be ways of compromising it.&lt;br /&gt;&lt;br /&gt;Nevertheless, there it is. It's single-threaded, platform-independent [within reason], and relatively fast. On my quad-core 64-bit Linux platform in the lab, I ran &lt;a href="http://acme.com/software/http_load/"&gt;http_load&lt;/a&gt; requesting a variety of files from my local &lt;a href="http://code.google.com/p/gpuocelot/"&gt;GPU Ocelot&lt;/a&gt; repository ranging in size from a 1kB to 100s of kBs. It handled http_load's maximum of 1,000 requests per second without trouble; in this case, the network was the bottleneck. It has also served a 400 MB file over a residential cable connection, this time running on a Windows machine. &lt;br /&gt;&lt;br /&gt;So, it's vetted. It works.&lt;br /&gt;&lt;br /&gt;There are several barbaric components that ought to be hastily buried underneath a pile of complexity theory [i.e. the MIME type selector], but this does demonstrate working use of &lt;i&gt;select()&lt;/i&gt; which lends some much-needed pedagogical value to this exercise.&lt;br /&gt;&lt;br /&gt;Additional comments are certainly welcome.&lt;br /&gt;&lt;br /&gt;One other facet of interest is I wanted this to be distributable as source, so I wrote a program to embed binary image files used as logos and icons into the source code of the application. It expresses a binary file as a C++ style array declaration. i.e.:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// 'images/file.png'&lt;br /&gt;const unsigned int image_file[] = {&lt;br /&gt; 0x474e5089, 0xa1a0a0d, 0xd000000, 0x52444849, &lt;br /&gt; 0x30000000, 0x28000000, 0x608, 0x7987b800, &lt;br /&gt; ...&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;May not be the best way, but at least it's out the door.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3625905046565710782?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3625905046565710782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3625905046565710782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3625905046565710782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3625905046565710782'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/12/netherp-share-your-naughty-bits.html' title='netherp - share your naughty bits!'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-991741061164386282</id><published>2009-11-16T10:59:00.008-05:00</published><updated>2009-11-16T15:40:19.008-05:00</updated><title type='text'>Frigid Digit</title><content type='html'>&lt;a href="http://www.gtsailing.org"&gt;Georgia Tech Sailing Club&lt;/a&gt; hosted its intra-club regatta on Saturday. Four &lt;a href="http://www.club420.org/"&gt;420s&lt;/a&gt; sailed out into Lake Lanier and completed a few races. It was very informal, and the light winds made things maddeningly slow at times, although things were never so calm as to prevent deliberate maneuvering. &lt;br /&gt;&lt;br /&gt;I didn't win any of the races, but my crew and I came in second place a few times [which doesn't technically matter - sailing rewards winners only]. There are subtle tactical and strategic differences that distinguish experts that I began to pick up on. A strong start is key to dominating a pack of boats - you receive "puffs" of stronger winds earlier and can speed up to stronger positions. Additionally, good positioning and tacking strategies tend to grant a smart skipper right of way during those moments when two boats come upon each other.&lt;br /&gt;&lt;br /&gt;There were some tactical matters as well. One boat just seemed to "go faster" in identical wind conditions. Since this regatta consisted of boats of the same class and make, presumably the fastest were those trimmed the best. After we stopped racing, I requested the experienced crews to sail a straight course up wind so that I could follow along and trim sails and crew locations to improve my speed relative to them. That helped considerably to identify the optimal sail positions.&lt;br /&gt;&lt;br /&gt;Ralph's Picassa gallery of the day.&lt;br /&gt;&lt;br /&gt;Here I am sailing downwind. This is the boring part of the race.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/ralph.mueller/FrigitDigit?authkey=Gv1sRgCIfKy8TZmNTCyQE&amp;feat=email#5404411099630590482"&gt;Image&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Nacra catameran that capsized after flying one of its hulls:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/ralph.mueller/FrigitDigit?authkey=Gv1sRgCIfKy8TZmNTCyQE&amp;feat=email#5404412548511788194"&gt;Image&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;While getting my haircut today, I thought about what it might take to determine the optimal strategy for a particular boat under a given set of wind conditions in a regatta. Simplifying assumptions would be:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;uniform wind direction and speed across the entire area&lt;/li&gt;&lt;br /&gt;&lt;li&gt;no other boats to create local calm areas with bad air or force suboptimal maneuvering&lt;/li&gt;&lt;br /&gt;&lt;li&gt;uniform sea state&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ideal sail and boat trim&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;This hypothetical systematic approach would attempt to minimize total time around a pair of marks. Specifically, this would determine:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;what course to make that minimizes time to reach the upwind mark&lt;/li&gt;&lt;br /&gt;&lt;li&gt;which tack to start on&lt;/li&gt;&lt;br /&gt;&lt;li&gt;when to tack&lt;/li&gt;&lt;br /&gt;&lt;li&gt;whether to "run" or "broad reach" during the downwind leg&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Since being at the right place at the right time with the wind on the starboard side is advantageous when encountering other boats, the model might favor a starboard tack at certain points in the course. &lt;br /&gt;&lt;br /&gt;It seems like this could be computed given &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;an accurate speed model of the &lt;a href="http://www.club420.org"&gt;Club 420&lt;/a&gt; under typical loading conditions for each &lt;a href="http://en.wikipedia.org/wiki/Point_of_sail"&gt;point of sail&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;performance model of a well-executed &lt;a href="http://en.wikipedia.org/wiki/Tacking_(sailing)"&gt;tack&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;performance model of a well-executed &lt;a href="http://en.wikipedia.org/wiki/Jibe"&gt;gybe&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;This would attack the problem that, I suppose, gets answered through intuition and experience by 'good' skippers. Of course, it completely ignores the influence of other boats whose presence could easily compromise a good single-boat strategy. It also assumes the skipper and crew are good enough to maneuver in ways that satisfy the performance models; this depends on training and skill. Nevertheless, it seems like having a good theory here would be a great way to quickly gain a practical intuition that could be deployed out on the water.&lt;br /&gt;&lt;br /&gt;Someone get me a performance model!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-991741061164386282?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/991741061164386282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=991741061164386282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/991741061164386282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/991741061164386282'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/11/frigid-digit.html' title='Frigid Digit'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-9020372423141529488</id><published>2009-11-12T10:20:00.010-05:00</published><updated>2011-06-06T09:57:34.817-04:00</updated><title type='text'>Git solves your problems</title><content type='html'>So last night, I wanted to install a Subversion server on Emma's darling quad-core behemoth hosting akerr.net among *other things*. Inspecting the installation, it seems mod_dav was not compiled into Apache2.x, and no one after Apache 1.3 seems to suggest loading it as a dynamic shared library. I successfully compiled several test builds of Apache2.2 in user space, but matching Emma's configuration in a maintainable way would have been a nightmare inside of doubtfulness wrapped in the promise of sleepless nights down the road if things go wrong.&lt;br /&gt;&lt;br /&gt;Then I went looking for alternatives. It seems the only administrative prerequisites for hosting a remote &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; repository are that the host runs sshd and you to have an account on said machine. After installing the lovely &lt;a href="http://code.google.com/p/msysgit/"&gt;msysgit&lt;/a&gt; git client for Windows on my home desktop, I performed the following.&lt;br /&gt;&lt;br /&gt;On the remote side:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ ssh akerr@akerr.net:&lt;ssh port&gt;&lt;br /&gt;$ mkdir akerr.git &amp;&amp; cd akerr.git&lt;br /&gt;$ git --bare init&lt;br /&gt;Initialized empty Git repository in /home/akerr/akerr.git/&lt;br /&gt;$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;On the local side:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ cd C:/research/akerr&lt;br /&gt;$ git init&lt;br /&gt;$ git remote add origin "ssh://akerr@akerr.net:&amp;lt;ssh port&amp;gt;/~/akerr.git"&lt;br /&gt;$ git add infrastructure/&lt;br /&gt; ...&lt;br /&gt;$ git commit -a -m "initial revision of libkerr"&lt;br /&gt;$ git push origin master&lt;br /&gt; ...&lt;br /&gt;$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is all that is needed. To pull from the remote host, simply perform the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ git pull origin master&lt;br /&gt; ...&lt;br /&gt;$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The elegant components of this solution are: &lt;br /&gt;- doesn't require superuser access or configuration changes on the host&lt;br /&gt;- security is a function of SSH&lt;br /&gt;- git is fast and functional in an isolated environment&lt;br /&gt;&lt;br /&gt;Thank you, Emma, for the free hosting. This helps you too. : )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-9020372423141529488?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/9020372423141529488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=9020372423141529488' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/9020372423141529488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/9020372423141529488'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/11/git-solves-your-problems.html' title='Git solves your problems'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-546482797043449741</id><published>2009-11-05T17:00:00.002-05:00</published><updated>2009-11-05T17:01:03.801-05:00</updated><title type='text'>Wheel of Reincarnation</title><content type='html'>I read an interesting paper describing the Wheel of Reincarnation - the phenomenon in which certain specialized computations are handled by coprocessors but then these computations are shifted back to the main processor as CPUs gain in performance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;General computing power, whatever its purpose, should come from the central resources of the system. If these resources should prove inadequate, then it is the system, not the display, that needs more computing power.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;[Myer and Sutherland. "On the design of display processors"]&lt;br /&gt;&lt;br /&gt;I guess this phenomenon is satisfied by general-purpose computing on GPUs that brings the graphics processor back into the 'system' instead of being a specialized co-processor for accelerating DirectX.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://code.google.com/p/gpuocelot/"&gt;GPU Ocelot&lt;/a&gt;, the system is getting more power.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-546482797043449741?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/546482797043449741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=546482797043449741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/546482797043449741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/546482797043449741'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/11/wheel-of-reincarnation.html' title='Wheel of Reincarnation'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4717111894973746705</id><published>2009-10-09T17:20:00.003-04:00</published><updated>2009-10-09T17:22:32.127-04:00</updated><title type='text'>Emma's Birthday!</title><content type='html'>Let us also observe that my darling &lt;a href="http://emmaloggins.com/blog/"&gt;Emma&lt;/a&gt; is twenty six years awesome as of yesterday. We celebrated with supper, exquisite company, Maker's Mark, and cookie cake. Presumably, celebratory ice skating is upcoming.&lt;br /&gt;&lt;br /&gt;Happy birthday, Emma!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4717111894973746705?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4717111894973746705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4717111894973746705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4717111894973746705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4717111894973746705'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/10/emmas-birthday.html' title='Emma&apos;s Birthday!'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-1906268867939198739</id><published>2009-10-09T17:15:00.004-04:00</published><updated>2009-10-09T17:18:32.842-04:00</updated><title type='text'>Atlanta Calling</title><content type='html'>By now, you're surely tired of seeing the evidence of my awesome summer. To keep you interested in lieu of a complete blog post chronicling my travels to &lt;a href="http://www.ll.mit.edu/HPEC/2009/index.html"&gt;HPEC'09&lt;/a&gt; and then &lt;a href="http://www.iiswc.org/iiswc2009/index.htm"&gt;IISWC&lt;/a&gt;, here is a &lt;a href="http://images.google.com/images?hl=en&amp;q=backhoe"&gt;Google Image Search&lt;/a&gt; that should elicit a chuckle among some of you.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://central-plant-hire.co.uk/cat-428-backhoe-loader_4.jpg" alt="backhoe" /&gt;&lt;br /&gt;&lt;br /&gt;Real post coming soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-1906268867939198739?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/1906268867939198739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=1906268867939198739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1906268867939198739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1906268867939198739'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/10/atlanta-calling.html' title='Atlanta Calling'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4410348357632921581</id><published>2009-09-08T16:54:00.005-04:00</published><updated>2009-09-08T17:07:32.142-04:00</updated><title type='text'>Post Summer 2009</title><content type='html'>I am back from Seattle. Here is a taste of what I did this summer. Special thanks go to all of the people I met along the way.&lt;br /&gt;&lt;br /&gt;Flying a Cessna 172S:&lt;br /&gt;&lt;img src="http://akerr.net/images/2009July11/DSCN4968.jpg" alt="Flying a Cessna 172" /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/2009July11/?id=4968"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sailing on Lake Union:&lt;br /&gt;&lt;img src="http://akerr.net/images/2009Aug01/DSCN5087.jpg" alt="Sailing on Lake Union" /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/2009Aug01/?id=5087"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bike ride to Lake Washington:&lt;br /&gt;&lt;img src="http://akerr.net/images/2009Aug02/DSCN5117.jpg" alt="Bike ride to Lake Washington" /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/2009Aug02/?id=5117"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Helicopter flight over Seattle:&lt;br /&gt;&lt;img src="http://akerr.net/images/2009Aug03/DSCN5169.jpg" alt="Helicopter flight over Seattle" /&gt;&lt;br /&gt;&lt;a href="http://akerr.net/images/2009Aug03/?id=5169"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10,000 ft climb of Mt. Rainier:&lt;br /&gt;&lt;img src="http://akerr.net/images/respect.jpg" alt="10kft climb of Mt. Rainier" /&gt;&lt;br /&gt;&lt;br /&gt;Things I want to accomplish personally this Fall:&lt;br /&gt;&lt;br /&gt;* nail down research agenda working toward thesis&lt;br /&gt;* paper at PACT&lt;br /&gt;* sail considerably, taking you and others with me&lt;br /&gt;* bicycle over a notable distance&lt;br /&gt;* hike somewhere notable&lt;br /&gt;* undertake a slaying expedition&lt;br /&gt;* gain upper body strength for rock climbing options class next Spring&lt;br /&gt;&lt;br /&gt;Let's see if a more productive Andykerr can accomplish all of this. I'll have to put considerably less whiskey in my coffee the next few mornings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4410348357632921581?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4410348357632921581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4410348357632921581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4410348357632921581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4410348357632921581'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/09/post-summer-2009.html' title='Post Summer 2009'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-697497273636769383</id><published>2009-05-13T18:59:00.002-04:00</published><updated>2009-05-13T19:07:23.391-04:00</updated><title type='text'>VSIPL Design Thoughts</title><content type='html'>As an implementer of the VSIPL API, I've thought of several small criticisms of the library. By posting them here, Google will record them for posterity.&lt;br /&gt;&lt;br /&gt;* VSIPL Core Lite should require implementations to include vsip_complete() - &lt;br /&gt;This could easily be a no-op on any implementation that doesn't perform some sort of lazy evaluation. Applications could call it without fear that things may break if they move to another implementation.&lt;br /&gt;&lt;br /&gt;* VSIPL API should include vsip_usermalloc() -&lt;br /&gt;This would allocate user-accessible data blocks in a manner that could be used efficiently by the library. The alternative is let the user perform its own memory allocation; this has no regard to alignment or pinned paging.&lt;br /&gt;&lt;br /&gt;* VSIPL should include more robust error reporting methods -&lt;br /&gt;Reports might be implementation-dependent, but it would enable much better robust composition.&lt;br /&gt;&lt;br /&gt;I am confident none of these requirements would break existing implementations or negatively impact users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-697497273636769383?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/697497273636769383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=697497273636769383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/697497273636769383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/697497273636769383'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/05/vsipl-design-thoughts.html' title='VSIPL Design Thoughts'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2118799702934161877</id><published>2009-04-13T23:05:00.004-04:00</published><updated>2009-04-13T23:16:33.657-04:00</updated><title type='text'>Inexpensive Performance</title><content type='html'>Taking a break from &lt;i&gt;MemoryTraceGenerator.cpp&lt;/i&gt; to mention:&lt;br /&gt;&lt;br /&gt;I'm replacing the motherboard and CPU in my dad's home desktop with an &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819103300"&gt;Athlon 64 x2 Kuma&lt;/a&gt; at 2.7 GHz and an $80 EVGA motherboard with a GeForce 8200 integrated video chipset. The total here is roughly $200 if you also purchase several GB of DDR2 RAM. This wouldn't be a terrible CUDA development platform, particularly if someone loaned you a higher-end GPU. Even without, its integrated GPU is still capable of accelerating typical applications such as video decoding.&lt;br /&gt;&lt;br /&gt;I only mention this because what one might consider today's low-end desktop is astonishingly powerful.&lt;br /&gt;&lt;br /&gt;It's also my first time touching AMD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2118799702934161877?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2118799702934161877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2118799702934161877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2118799702934161877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2118799702934161877'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/04/inexpensive-performance.html' title='Inexpensive Performance'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3880108532111930909</id><published>2009-04-06T15:59:00.000-04:00</published><updated>2009-04-06T16:02:51.277-04:00</updated><title type='text'>Winds</title><content type='html'>Design fail: high winds bristling down Peachtree St at the 130 ft level tend to pass over and around&lt;br /&gt;the balcony railings of our condo creating quite a bit of commotion. I would estimate the power spectrum has peaks at the 10 kHz frequency as well as the 5 Hz and ~100 Hz frequencies. The noise was so loud and so stationary that, at Emma's suggestion, I slept wearing ear plugs from my shooting kit. That worked for roughly two hours.&lt;br /&gt;&lt;br /&gt;Can't we just remove the railings from the balcony during high winds?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3880108532111930909?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3880108532111930909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3880108532111930909' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3880108532111930909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3880108532111930909'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/04/winds.html' title='Winds'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6585675396722757382</id><published>2009-04-04T15:59:00.003-04:00</published><updated>2009-04-04T16:05:23.593-04:00</updated><title type='text'>Webcam</title><content type='html'>Emma's webcam is now operational. I am using &lt;a href="http://www.webcamxp.com/"&gt;webcamXP 5&lt;/a&gt; [free!] to make HTTP POST calls to upload images. At present, the server will store only the most recent image, so don't expect a log. It is updated once every hour. I may enable serving the most recent 24 hours, but that functionality will not come online today.&lt;br /&gt;&lt;br /&gt;I used a PHP script on the server to receive the files and authenticate the poster. If you guessed the passphrase and spoofed our IP address, I guess you could upload an image of a giant eyeball and it would appear on our webcam page.&lt;br /&gt;&lt;br /&gt;Here it is. Bookmark this:&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;a href="http://www.akerr.net/webcam"&gt;webcam&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;Note the billboard between the Viewpoint and the T-Mobile sales office. The nude male ad has been replaced for an ad for &lt;a href="http://www.adultswim.com"&gt;The Mighty Boosh&lt;/a&gt; on Adult Swim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6585675396722757382?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6585675396722757382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6585675396722757382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6585675396722757382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6585675396722757382'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/04/webcam.html' title='Webcam'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4287424328846526860</id><published>2009-04-02T11:23:00.002-04:00</published><updated>2009-04-02T11:30:08.993-04:00</updated><title type='text'>GPU VSIPL Press</title><content type='html'>&lt;a href="http://gpu-vsipl.gtri.gatech.edu/"&gt;GPU VSIPL&lt;/a&gt; is now featured on NVIDIA's CUDA Zone: &lt;a href="http://www.nvidia.com/object/cuda_home.html#state=detailsOpen;aid=3cdfef70-04a4-11de-8c30-0800200c9a66"&gt;GPU VSIPL&lt;/a&gt;. NVIDIA lists it as an application, although we only wrote the application to demonstrate the library (and achieved a 75x speedup over the world-famous TASP VSIPL distribution).&lt;br /&gt;&lt;br /&gt;In unrelated news, Emma and I have completed our move. I need to set up her webcam.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4287424328846526860?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4287424328846526860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4287424328846526860' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4287424328846526860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4287424328846526860'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/04/gpu-vsipl-press.html' title='GPU VSIPL Press'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5910879572218131284</id><published>2009-03-09T19:04:00.004-04:00</published><updated>2009-03-09T23:13:24.767-04:00</updated><title type='text'>GPGPU'09</title><content type='html'>The presentation at GPGPU'09 went well yesterday. I lasted several minutes over budget [as usual], but I felt good about it. When I get home and find my credentials to the GPU VSIPL website, I'll upload my presentation and cite my paper.&lt;br /&gt;&lt;br /&gt;Today was the first day of ASPLOS. I wound up sleeping in and missed the keynote, but I sat at the keynote speaker's table during lunch. He's a Google guy and regaled the group with clever ideas, charm, and wit.&lt;br /&gt;&lt;br /&gt;The trouble with conferences is they fill you with a billion great ideas and no time to implement them. The wild and crazy idea session included:&lt;br /&gt;&lt;br /&gt;* bubble wrap cores - disposable CPU cores so you can run several hotter and faster and burn them out quickly&lt;br /&gt;* on-chip power - nuclear or piezoelectric&lt;br /&gt;* neuro-implants - CPUs in your brain&lt;br /&gt;* purely speculative cores - run parts of your program long before you ever get to them&lt;br /&gt;&lt;br /&gt;2 of 3 beer vouchers remain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5910879572218131284?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5910879572218131284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5910879572218131284' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5910879572218131284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5910879572218131284'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/03/gpgpu09.html' title='GPGPU&apos;09'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-1481417416882005168</id><published>2009-03-05T01:16:00.004-05:00</published><updated>2009-03-05T01:20:50.434-05:00</updated><title type='text'>$QR$ Presentation</title><content type='html'>I finally finished my GPGPU '09 presentation. I need to script it and make sure I can present all 45 slides in 20 minutes. Some of them are closer to animations than "view graphs" so the actual number of slides I'd spend more than a few sentences on is lower.&lt;br /&gt;&lt;br /&gt;How do you guys prepare for presentations? &lt;br /&gt;&lt;br /&gt;Word-for-word scripting, bullet points you remember to mention in the context of a larger discussion you have with your audience, mix Adderall and a vodka tonic shortly before the presentation and hope for the best? Comment!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-1481417416882005168?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/1481417416882005168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=1481417416882005168' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1481417416882005168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1481417416882005168'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/03/qr-presentation.html' title='$QR$ Presentation'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3810755081653904690</id><published>2009-02-27T12:53:00.001-05:00</published><updated>2009-02-27T12:54:33.135-05:00</updated><title type='text'>GPU VSIPL</title><content type='html'>Released a new &lt;a href="http://gpu-vsipl.gtri.gatech.edu/"&gt;GPU VSIPL&lt;/a&gt;. Our range-doppler map application achieved 75x speedup on my machine at work.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://gpu-vsipl.gtri.gatech.edu/images/rd_map.png" alt="GPU VSIPL range-doppler map application" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3810755081653904690?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3810755081653904690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3810755081653904690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3810755081653904690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3810755081653904690'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/02/gpu-vsipl.html' title='GPU VSIPL'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5507708806520567337</id><published>2009-02-19T10:06:00.001-05:00</published><updated>2009-02-19T10:07:14.415-05:00</updated><title type='text'>Productivity</title><content type='html'>Installing &lt;a href="http://wubi-installer.org/"&gt;Wubi&lt;/a&gt;, Ubuntu for Windows. I rather wish I had a 64-bit operating system installed on this machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5507708806520567337?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5507708806520567337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5507708806520567337' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5507708806520567337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5507708806520567337'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/02/productivity.html' title='Productivity'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5738924192112650231</id><published>2009-02-16T21:39:00.003-05:00</published><updated>2009-02-16T22:12:48.174-05:00</updated><title type='text'>Traveling</title><content type='html'>I've been fairly remiss in keeping up this blog and in keeping up appearances in real life. I'll try to at least provide an overview in this post.&lt;br /&gt;&lt;br /&gt;I'm typing this from a hotel room in Raleigh, NC. I'm attending &lt;a href=""&gt;High-Performance Computer Architecture&lt;/a&gt; conference going on until Wednesday. Three other gentleman of acclaim from my lab are here, though none of us are presenting here. We're here to attend talks, ask questions, converse with presenters in the hallways, and cash in our liquor vouchers at the appropriate times.&lt;br /&gt;&lt;br /&gt;Today's keynote was delivered by a fellow at HP and summarized the elements of HP Labs's research thrusts: intelligent infrastructure, content transformations, information management, analytics, cloud computing, and sustainability.&lt;br /&gt;&lt;br /&gt;The first three "award" paper presentations covered (1) prefetching for linked data structures, (2) recovery and prediction from voltage emergencies, and (3) long-wire topologies for low-latency 3D networks on chip. &lt;br /&gt;&lt;br /&gt;This afternoon, I attended several papers on multicore caching, coherence protocols, a software-managed cache implementation for IBM Cell [looking shockingly similar and not materially superior to either a software-managed cache I implemented for our PTX-&gt;Cell runtime or the SMC that ships with IBM's SDK; I didn't pipe up and notify him about this, as I don't think anyone expected it to be].&lt;br /&gt;&lt;br /&gt;Georgia Tech is well represented here, with several full profs in attendance [not mine] and a number of students. The panel session today featured the legendary William "Bill" Dally, now of NVIDIA. As Mark Richards described, he is a brilliant and charismatic engineer who portrayed GPUs in very positive light, having lead a number of streaming architecture projects at Stanford in the past. They all agreed that multicore is important, computer architecture needs to inform computer science systems projects at various levels of abstraction [i.e. compiler writers, OS designers, and CPU architects need to have lunch at the same table every day], research projects need to be more aggressive and less product-like [i.e. make crazy and wild assumptions about the future target platforms and build from that; if your results show significant gains even though you couldn't actually build it today, maybe that's how future systems will actually be developed]. And apparently the difference between parallel computing and distributed computing is in distributed computing, you don't assume all machines are working.&lt;br /&gt;&lt;br /&gt;Overall, this conference is far more academic than HPEC, which is very much targeted for DoD types. HPCA is very much on the academic side with some very deep and nuanced computer architecture topics occupying many of the papers. The award paper covering prefetching for linked data structures, for instance, discusses a method by which pointers may be identified on cache misses and automatically prefetched with the assumption that they point to nodes in a data structure likely to be fetched shortly anyway. The complete proceedings are presented to attendees in both print form and cleverly stored on a complimentary 1 GB USB drive / laser pointer / ballpoint pen.&lt;br /&gt;&lt;br /&gt;That's all for now. I'll be back at some point before Thursday at 10am. I've just submitted a revised edition of my paper to GPGPU 2009. I'll fly to DC on March 7 and come back Mar 12. For future reference, make sure your ACM submission has the copyright notice on the first page; they get mad if you don't.&lt;br /&gt;&lt;br /&gt;See you soon, dear reader(s).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5738924192112650231?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5738924192112650231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5738924192112650231' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5738924192112650231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5738924192112650231'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/02/traveling.html' title='Traveling'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-736085623194406542</id><published>2009-01-21T14:18:00.002-05:00</published><updated>2009-01-21T14:19:25.410-05:00</updated><title type='text'>New Work</title><content type='html'>Just built the new PC at work.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;andrew@:~$ cat /proc/cpuinfo &lt;br /&gt;processor : 0&lt;br /&gt;vendor_id : GenuineIntel&lt;br /&gt;cpu family : 6&lt;br /&gt;model  : 23&lt;br /&gt;model name : Intel(R) Core(TM)2 Quad CPU    Q9550  @ 2.83GHz&lt;br /&gt;stepping : 10&lt;br /&gt;cpu MHz  : 2833.268&lt;br /&gt;cache size : 6144 KB&lt;br /&gt;physical id : 0&lt;br /&gt;siblings : 4&lt;br /&gt;core id  : 0&lt;br /&gt;cpu cores : 4&lt;br /&gt;apicid  : 0&lt;br /&gt;initial apicid : 0&lt;br /&gt;fpu  : yes&lt;br /&gt;fpu_exception : yes&lt;br /&gt;cpuid level : 13&lt;br /&gt;wp  : yes&lt;br /&gt;flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr sse4_1 lahf_lm&lt;br /&gt;bogomips : 5666.53&lt;br /&gt;clflush size : 64&lt;br /&gt;cache_alignment : 64&lt;br /&gt;address sizes : 36 bits physical, 48 bits virtual&lt;br /&gt;power management:&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;It says the same for the other three cores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-736085623194406542?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/736085623194406542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=736085623194406542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/736085623194406542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/736085623194406542'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2009/01/new-work.html' title='New Work'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-278855090406624246</id><published>2008-12-13T22:56:00.005-05:00</published><updated>2008-12-13T23:20:48.979-05:00</updated><title type='text'>Defeated</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_cRlKDoaLh7I/SUSEGy_8YFI/AAAAAAAAABY/2V12Jlykp80/s1600-h/DSCN4863.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_cRlKDoaLh7I/SUSEGy_8YFI/AAAAAAAAABY/2V12Jlykp80/s320/DSCN4863.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5279489915489116242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is the gas valve from a Yugoslavian SKS I J.B.Welded into the gas block. When I got tired of banging my head against my desk trying to make my code run fast, I went into the living room and banged a hammer against a punch [and against my fingers] to remove this reluctant part so I could replace it.&lt;br /&gt;&lt;br /&gt;Strangely, the difficulty was not that the J.B.Weld refused to give; I achieved small motion early on. Rather, the simple matter of non-zero volume wedging the part against the gas block walls made extracting it difficult.&lt;br /&gt;&lt;br /&gt;Advice: attempting to join parts that were intended to be separate limits your options in the future.&lt;br /&gt;&lt;br /&gt;Advice for those who ignored first bit of advice: buy a good selection of punches now because you'll need them. Drill a small pit in the part you're trying to separate, then use the correctly sized punch so you don't damage the surrounding material. Avoid stressing things like barrels by properly supporting the job with wooden blocks or substitute.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-278855090406624246?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/278855090406624246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=278855090406624246' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/278855090406624246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/278855090406624246'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/12/defeated.html' title='Defeated'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cRlKDoaLh7I/SUSEGy_8YFI/AAAAAAAAABY/2V12Jlykp80/s72-c/DSCN4863.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7150793552126623959</id><published>2008-12-13T22:36:00.004-05:00</published><updated>2008-12-13T23:10:50.906-05:00</updated><title type='text'>Native Client and Alchemy: Software as a Service?</title><content type='html'>Not so long ago, Google announced &lt;a href="http://code.google.com/p/nativeclient/"&gt;Native Client&lt;/a&gt; which describes a way in which a browser may execute native instructions in secure sandbox. The natively executing code would run at full speed, and the sandbox would provide a platform-independent layer of abstraction so applications targeting whatever framework was distributed with Native Client The Product (tm) could run on Mac, Linux, or Windows. The paper linked from the "NaCl" page describes the security measures taken to ensure natively executing code can do nothing harmful. Presumably, just running a NaCl browser on a Linux, Windows, or Mac system as a user with minimal privileges to the file system and other resources is already sufficiently secure, but the sandbox protects the browser process as well.&lt;br /&gt;&lt;br /&gt;Previously, Adobe announced &lt;a href="http://labs.adobe.com/technologies/alchemy/"&gt;Alchemy&lt;/a&gt; leveraging the &lt;a href="http://llvm.org/"&gt;Low-Level Virtual Machine&lt;/a&gt; bundled with the Flash player as a way to run C++ applications at near native speed with the safety of executing in a virtual machine and dynamic compilation framework. LLVM has the added benefit of being a mature project with fairly robust and well-designed development tools and runtime features.&lt;br /&gt;&lt;br /&gt;The commonly cited application for these frameworks is "to run Quake in a browser!" While interesting in its own right, a conversation with &lt;a href="http://uniquelyjoe.blogspot.com/"&gt;Uniquely Joe&lt;/a&gt; sparked the idea that perhaps this offers a new business model for software development. Instead of buying shrink-wrapped software in a box, or downloading a torrent from your favorite pirate search engine, you simply log into your software account provided by Adobe, Google, Microsoft, or other, and use the applications you've purchased a service plan for. This benefits you because you don't have to worry about maintaining all of these software installations on the several computers you may work from, software upgrades are more seamless [perhaps less expensive for each subsequent version but now there are many more versions though only your checking account really notices], and perhaps there is a security benefit too if most of your applications run in some sort of sandbox.&lt;br /&gt;&lt;br /&gt;This benefits software publishers because distribution costs diminish as there are no shrink-wrap boxes to produce, revenues are more constant due to the service-oriented usage model, you can push advertisements to your users and probably achieve better product integration, and you can curtail piracy since presumably you could build in a cryptographic certificate to prevent execution of your application except where authorized by your license server. With everything running in a sandbox with a uniform abstraction layer on all architectures, testing and support costs should also diminish. As we learned in &lt;a href="http://www.cc.gatech.edu/~ntclark/8803f08/"&gt;CS 8803&lt;/a&gt;, dynamic compilation frameworks are able to perform many optimizations at runtime that enable an application to [eventually] achieve high performance tuned to the actual system on which it is executed. 'Application + dynamic optimizer' is clearly parallelizable so additional processor cores should reduce the impact of dynamic translation overheads.&lt;br /&gt;&lt;br /&gt;Will consumers like it? While some won't even notice a difference, many might be attracted for the reasons previously listed. If Adobe can count on users having LLVM installed, or users willing to install it, it may take this route exclusively. How many people would be willing to eschew Adobe's impressive productivity suite in favor of the disjoint FOSS projects out there?&lt;br /&gt;&lt;br /&gt;Comments welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-7150793552126623959?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7150793552126623959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7150793552126623959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7150793552126623959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7150793552126623959'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/12/native-client-and-alchemy-software-as.html' title='Native Client and Alchemy: Software as a Service?'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8972401311732501431</id><published>2008-12-11T16:59:00.002-05:00</published><updated>2008-12-11T17:01:44.059-05:00</updated><title type='text'>GPU QR</title><content type='html'>My GPU QR algorithm achieves a 10.8x speedup over the native MATLAB QR for large matrices. This is faster than I have seen anyone report by far. &lt;br /&gt;&lt;br /&gt;I'm working on an Intel MKL testbed application, as that's probably the fastest QR available for x86 and is the ultimate reference implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8972401311732501431?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8972401311732501431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8972401311732501431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8972401311732501431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8972401311732501431'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/12/gpu-qr.html' title='GPU QR'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-1399299946775609074</id><published>2008-12-04T18:04:00.002-05:00</published><updated>2008-12-04T18:06:55.249-05:00</updated><title type='text'>Organization of Knowledge</title><content type='html'>I clicked through to &lt;a href="http://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science"&gt;this page&lt;/a&gt; on Wikipedia. Clearly, pages like this are useful. I'm pretty sure any good PhD student, by the time they're ready to propose, should be able to sit down at Rocky Mountain, drink several pints, and rattle off something similar for their field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-1399299946775609074?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/1399299946775609074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=1399299946775609074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1399299946775609074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1399299946775609074'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/12/organization-of-knowledge.html' title='Organization of Knowledge'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-6203972758817581048</id><published>2008-11-22T13:22:00.003-05:00</published><updated>2008-11-22T13:27:25.725-05:00</updated><title type='text'>News from the GPU VSIPL Front</title><content type='html'>We're planning to undergo talks for licensing &lt;a href="http://gpu-vsipl.gtri.gatech.edu"&gt;GPU VSIPL&lt;/a&gt;. Presently, we only distribute the binary and insist it not be redistributed. This lets early adopters test it out but minimizes the scope of what we're committed to supporting. When the implementation is stable and complete, we're hoping to make it available in some additional capacity. Ideally, we would partner with someone and include it in a larger VSIPL distribution.&lt;br /&gt;&lt;br /&gt;Additionally, I'm responsible for implementing a sample application to publish at CUDA Zone. I need a team of undergraduates to finish the Test Suite for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-6203972758817581048?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/6203972758817581048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=6203972758817581048' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6203972758817581048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/6203972758817581048'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/news-from-gpu-vsipl-front.html' title='News from the GPU VSIPL Front'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2945290191953628912</id><published>2008-11-21T21:56:00.004-05:00</published><updated>2008-11-22T12:38:08.862-05:00</updated><title type='text'>Wii on PS3</title><content type='html'>Someone should implement a Wii virtual machine for PS3.&lt;br /&gt;&lt;br /&gt;This should include a hardware receiver (and drivers) for the Wii controllers. GameCube compatibility could be accomplished by translating the inputs from the PS3 controllers into what appear to be GameCube controller signals.&lt;br /&gt;&lt;br /&gt;The Cell B.E. processor includes a 64-bit "Power Processing Unit." The Wii's CPU is also a POWER implementation. They both use GPUs developed from the same technology that goes into PC GPUs, so I would expect the PS3 to implement whatever primitive shader model is offered in the Wii. Moreover, I would expect the performance advantage of the PS3 to be sufficient to emulate any hardware-provided functionality in the Wii (use the idle SPUs for dynamic translation!).&lt;br /&gt;&lt;br /&gt;Nintendo could continue to sell Wii games, and they'd penetrate formerly PS3-only households. I'd wager the technical obstacles to this idea aren't insurmountable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2945290191953628912?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2945290191953628912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2945290191953628912' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2945290191953628912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2945290191953628912'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/wii-on-ps3.html' title='Wii on PS3'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7501207327187542457</id><published>2008-11-20T19:29:00.002-05:00</published><updated>2008-11-20T19:32:42.308-05:00</updated><title type='text'>Cells and PS3</title><content type='html'>Guess the PlayStation3 was simply &lt;a href="http://www.pcmag.com/article2/0,2817,2335038,00.asp"&gt;ahead of its time&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We're in the process of building a system that, if talks go well, will have several high-end (9800GX2) GPUs, one Cell processor, and one quad-core x86. I have no plans for tossing in a Blu-Ray player though that would be amusing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-7501207327187542457?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7501207327187542457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7501207327187542457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7501207327187542457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7501207327187542457'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/cells-and-ps3.html' title='Cells and PS3'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2454150401592406406</id><published>2008-11-19T10:26:00.002-05:00</published><updated>2008-11-19T10:29:00.512-05:00</updated><title type='text'>GPU VSIPL</title><content type='html'>GPU VSIPL is getting some press:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.marketwatch.com/news/story/Mercury-Computer-Systems-Unveils-Multi/story.aspx?guid={A3EA2E33-A633-4021-A6C5-CFB83FBAC70B}"&gt;http://www.marketwatch.com/news/story/Mercury-Computer-Systems-Unveils-Multi/story.aspx?guid={A3EA2E33-A633-4021-A6C5-CFB83FBAC70B}&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a link to the main GPU VSIPL page, where we claim speedup of two orders of magnitude for applications well-suited to GPUs without ever writing any GPU code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gpu-vsipl.gtri.gatech.edu"&gt;http://gpu-vsipl.gtri.gatech.edu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We just released a new version on Sunday with a number of enhancements from VSIPL Core, though we do not yet claim VSIPL Core compliance so I will not enumerate them yet. That will come by Christmas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2454150401592406406?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2454150401592406406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2454150401592406406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2454150401592406406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2454150401592406406'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/gpu-vsipl.html' title='GPU VSIPL'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5611020152155903675</id><published>2008-11-17T22:49:00.001-05:00</published><updated>2008-11-17T22:49:53.685-05:00</updated><title type='text'>Super Obama World</title><content type='html'>Watch out for soccer moms.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://superobamaworld.com/"&gt;http://superobamaworld.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5611020152155903675?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5611020152155903675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5611020152155903675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5611020152155903675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5611020152155903675'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/super-obama-world.html' title='Super Obama World'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3731413394329641391</id><published>2008-11-09T23:42:00.008-05:00</published><updated>2008-11-10T15:17:48.597-05:00</updated><title type='text'>SSE3 and Manhattans</title><content type='html'>Now that the semester's coding for the PTX to SPU translator is complete, I spent the weekend researching some areas that I've been thinking about but haven't had much time to investigate. So, it was a weekend spent mostly* hacking.&lt;br /&gt;&lt;br /&gt;1.)&lt;br /&gt;Streaming SIMD Extensions are a set of instructions added to the x86 instruction set beginning with the Pentium II. These instructions apply the same operator, typically floating-point {*,+, -, /}, to corresponding elements of 128-bit 4-element vector registers. Since they are parallel, you can typically perform more operations in a given number of clock cycles than with scalar floating-point code.&lt;br /&gt;&lt;br /&gt;SSE2 and SSE3 are revisions that have added additional instructions as programmers demanded them. If you have a Pentium 4 Prescott or better, you have SSE3. If you have a 2.2 GHz P4 Northwood, you only support SSE2, and you miss out on the faster-better-cheaper possibilities concomitant with SSE3.&lt;br /&gt;&lt;br /&gt;I spent a few hours updating my hand-rolled matrix class with compiler &lt;i&gt;instrinsics&lt;/i&gt; (statements with the semantics of C functions but direct correspondence to CPU instructions; portable too), and I achieved 2.5x speedup for matrix multiply. SSE3 provides support for horizontal operations - operators apply to elements within the same 128-bit register. This permits the implementation of dot products and complex arithmetic without shuffle instructions and makes the code a lot faster. If your CPU doesn't support SSE3, you should probably build a new system (and use the existing system as a dedicated build machine).&lt;br /&gt;&lt;br /&gt;2.)&lt;br /&gt;CUDA is interoperable with OpenGL and Direct3D9. I spent a few hours tonight writing a quick DirectX application that renders a textured quad then performs post processing (separable 2D convolution) with a CUDA kernel. The immediate application of this would be to produce efficient visualizations for GPU-based simulations. Other ideas are to perform 3D rendering with DirectX and post-processing image-space operations with CUDA though Cg/HLSL is still probably the right way to implement that.&lt;br /&gt;&lt;br /&gt;Also, the fragmented nature of OpenGL distributions across versions and driver providers made it more of a debugging hassle to get working than CUDA-DirectX interoperability.&lt;br /&gt;&lt;br /&gt;3.)&lt;br /&gt;Identified the need for a new power supply. Apparently, a GeForce GTX 280 has been purchased for me. I'd like to use it along with the GeForce 9800 GX2 giving me a grand total of 3 GPUs and 2 GB of GDDR3 memory. I'm working on ways to leverage all three at once, so this isn't a fool's errand. Unfortunately, my power supply cannot source enough current on enough lines to power both cards. During Christmas break, I'll make the transition.&lt;br /&gt;&lt;br /&gt;*&lt;br /&gt;During a trip to Harry and Sons, I decided to modify my usual order of Chicken Larb (Thai salad). I still ordered it, but I augmented it with a Manhattan. For those of you who don't know, a Manhattan is a cocktail of whiskey and sweet vermouth. Typically, I avoid cocktails because (1) I'd only really had bad examples and (2) cola + {rum, whiskey} is difficult to beat. The stigma of cocktails being girly drinks may have originated during my freshman year's first experiences with alcohol; vodka, grenadine, and orange juice are simply not something I'll ever combine again. &lt;br /&gt;&lt;br /&gt;A well-made Manhattan, on the other hand, is quite strong yet simple enough to order from a busy bartender. In terms of flavor, it is quite divine. The vermouth dulls all of the whiskey's edge leaving only the wonderful caramel flavoring. Typically, it's made with 3-4 shots of the principle, so one drink takes you a long way toward inebriation while looking classy the entire time. It's my new official drink.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CUDA, DirectX9, SSE3, and the Manhattan cocktail: all for the win!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3731413394329641391?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3731413394329641391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3731413394329641391' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3731413394329641391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3731413394329641391'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/sse3-and-manhattans.html' title='SSE3 and Manhattans'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-7723842032788901827</id><published>2008-11-08T12:04:00.004-05:00</published><updated>2008-11-08T12:09:16.193-05:00</updated><title type='text'>PTX to SPU Translator</title><content type='html'>Our semester project for &lt;a href="http://www.cc.gatech.edu/~ntclark/8803f08/sched.html"&gt;Dynamic Compilation and Managed Runtimes&lt;/a&gt; is a code translator from NVIDIA's PTX virtual assembly language to IBM Cell SPU. Last night, we just demonstrated it by translating a kernel that computes the complex Givens rotation of a pair of values. The resulting Cell SPU assembly source was linked with a runtime platform we developed, and I executed it on the Cell processor of a PlayStation3 in PaSTEC, my favorite cluster.&lt;br /&gt;&lt;br /&gt;We'll be writing a paper due in December that I'll post. Additionally, we'll continue it through next spring. Exciting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-7723842032788901827?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/7723842032788901827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=7723842032788901827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7723842032788901827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/7723842032788901827'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/ptx-to-spu-translator.html' title='PTX to SPU Translator'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-996767355950228378</id><published>2008-11-03T02:10:00.005-05:00</published><updated>2008-11-03T02:13:49.979-05:00</updated><title type='text'>Congratulations, Joe and Sara!</title><content type='html'>&lt;a href="http://uniquelyjoe.blogspot.com"&gt;Joe&lt;/a&gt; and &lt;a href="http://queserasara.wordpress.com/"&gt;Sara&lt;/a&gt; are now married in an exceedingly elegant wedding ceremony and reception.&lt;br /&gt;&lt;br /&gt;First post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-996767355950228378?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/996767355950228378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=996767355950228378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/996767355950228378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/996767355950228378'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/11/congratulations-joe-and-sara.html' title='Congratulations, Joe and Sara!'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3246628941612970831</id><published>2008-09-25T18:05:00.002-04:00</published><updated>2008-09-25T18:05:59.406-04:00</updated><title type='text'>HPEC 2008</title><content type='html'>The conference is over, and my talk completed. It went well.&lt;br /&gt;&lt;br /&gt;Still no &lt;a href="http://en.wikipedia.org/wiki/Erdos_number"&gt;Erdos Number&lt;/a&gt;. Need to think more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3246628941612970831?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3246628941612970831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3246628941612970831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3246628941612970831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3246628941612970831'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/09/hpec-2008.html' title='HPEC 2008'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2259222026315141331</id><published>2008-09-20T18:33:00.003-04:00</published><updated>2008-09-20T18:35:06.420-04:00</updated><title type='text'>GPU VSIPL</title><content type='html'>I've released GPU VSIPL: &lt;a href="http://gpu-vsipl.gtri.gatech.edu"&gt;http://gpu-vsipl.gtri.gatech.edu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After HPEC 2008, I'll upload slides and the extended abstract we will present at the conference. Additionally, we plan to include our own test suite, extended coverage of VISPL Core Profile [matrices, linear algebra, and signal processing functions in 1- and 2-D], and a document on writing high-performance VSIPL applications with GPU VSIPL.&lt;br /&gt;&lt;br /&gt;Exciting times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2259222026315141331?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2259222026315141331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2259222026315141331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2259222026315141331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2259222026315141331'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/09/gpu-vsipl.html' title='GPU VSIPL'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-9092015177236884576</id><published>2008-09-12T11:46:00.003-04:00</published><updated>2008-09-12T12:23:13.674-04:00</updated><title type='text'>Cluster Names</title><content type='html'>In a meeting today, we got onto the topic of project names and then computer naming schemes. Any new cluster needs unique and memorable identifiers for each machine. Numbers are too sterile, so clever administrators strive to select a theme capable of generating thirty or more unique names that still convey membership of the group.&lt;br /&gt;&lt;br /&gt;Ada suggested the "vogue" cluster with nodes named after designers. We then sat around tossing out ideas for the GPU cluster being proposed. Here were several of the more amusing ideas&lt;br /&gt;&lt;br /&gt;* dead comedians (already in use by CoC)&lt;br /&gt;* high-end automobiles&lt;br /&gt;* Disney characters&lt;br /&gt;* 3rd world dictators&lt;br /&gt;&lt;br /&gt;Here are a few more to have on hand in case I ever need them:&lt;br /&gt;&lt;br /&gt;* coffee terms (already in use by emma+andy)&lt;br /&gt;* classic video games&lt;br /&gt;* characters in &lt;i&gt;Les Miserables&lt;/i&gt; (spelling might be prohibitive, and eponine can be expected to crash before your simulation ends...)&lt;br /&gt;* characters in practically any classic novel (&lt;i&gt;Catch22&lt;/i&gt;, &lt;i&gt;Whuthering Heights&lt;/i&gt;..)&lt;br /&gt;&lt;br /&gt;Audience participation: add to the list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-9092015177236884576?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/9092015177236884576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=9092015177236884576' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/9092015177236884576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/9092015177236884576'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/09/cluster-names.html' title='Cluster Names'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5330492498324991148</id><published>2008-09-06T02:01:00.003-04:00</published><updated>2008-09-06T02:03:37.199-04:00</updated><title type='text'>Wireframe</title><content type='html'>I spent some time tinkering with the HTML &lt;a href="http://en.wikipedia.org/wiki/Canvas_(HTML_element)"&gt;canvas&lt;/a&gt; tag and got this working in not too much time: &lt;a href="http://www.prism.gatech.edu/~gtg977g/cube.html"&gt;wireframe cube&lt;/a&gt;. Reminds me of high school.&lt;br /&gt;&lt;br /&gt;That said, it's odd it took the web this long to include a 2D rendering target that's less sophisticated than GDI+.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5330492498324991148?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5330492498324991148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5330492498324991148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5330492498324991148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5330492498324991148'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/09/wireframe.html' title='Wireframe'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2774194598441295799</id><published>2008-09-05T19:36:00.004-04:00</published><updated>2008-09-05T19:45:35.504-04:00</updated><title type='text'>Backx0r</title><content type='html'>As many of you know, I bike from this apartment to school. It's a fun ride that has just enough hills to make each commute a workout. Consequence: I get roughly two 15-minute periods of vigorous exercise every weekday whether I want it or not. With showers in the CRC and a change of clothes on hand, it's fairly convenient.&lt;br /&gt;&lt;br /&gt;Several things that aren't, though, are the gates at this apartment complex. They are triggered by induction loops, coils of wire embedded in the pavement that detect vehicles by measuring the change in inductance of the loop when an electrical conductor passes near by. The rear gate is especially challenging since repaving has hidden the coils, and I believe it is not particularly sensitive.&lt;br /&gt;&lt;br /&gt;However, a bit of &lt;a href="http://www.humantransport.org/bicycledriving/library/signals/detection.htm"&gt;online research&lt;/a&gt; and a brief experiment have changed all that. I can open it with impunity now. No need for bizarre aluminum blocks taped to my feet.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;School and research are going well. I'm involved with a new lab doing research into heterogeneous multicore systems. Additionally, I'm taking &lt;a href="http://gpu-vsipl.gtri.gatech.edu"&gt;GPU VSIPL&lt;/a&gt; to dizzying new heights with support for matrices and various linear algebra solvers all getting more than 20x speedups from your trusty GPU. Additionally, in 20 short days, I'll be presenting an awards paper at HPEC 2008. This makes me nervous.&lt;br /&gt;&lt;br /&gt;Coolest class ever: &lt;a href="http://www.cc.gatech.edu/~ntclark/8803f08/sched.html"&gt;Dynamic Compilation&lt;/a&gt;. Our semester project will be CUDA=&gt;IBM Cell/BE translator. Stop laughing.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;I'm taking some time to organize all the code I've written in the past that may be effectively reused. Stand by for libkerr and kerrutils.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2774194598441295799?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2774194598441295799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2774194598441295799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2774194598441295799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2774194598441295799'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/09/backx0r.html' title='Backx0r'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4718723570919333100</id><published>2008-08-05T17:24:00.001-04:00</published><updated>2008-08-05T17:24:39.874-04:00</updated><title type='text'>Hotlink</title><content type='html'>Hotlink&lt;br /&gt;&lt;br /&gt;&lt;img src="http://emmaloggins.com/blog//wp-content/uploads/2007/12/emma_andy.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4718723570919333100?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4718723570919333100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4718723570919333100' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4718723570919333100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4718723570919333100'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/08/hotlink.html' title='Hotlink'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8793183442495277539</id><published>2008-07-22T19:13:00.003-04:00</published><updated>2008-07-22T19:23:43.334-04:00</updated><title type='text'>Property Allocation</title><content type='html'>So, the rigors of four independent people sharing one refrigerator and kitchen have finally caught up with this house. All &lt;i&gt;de facto&lt;/i&gt; boundaries of personal "spaces" within our fridge have disappeared in the previous weeks. Finding my cream pushed behind someone's leftovers and spilled has empowered me to speak out.&lt;br /&gt;&lt;br /&gt;I'm working on a solution for this and the other common spaces problem. People have laid claims to their storage areas, some of which are unreasonable. People leave dishes in the sink, also unreasonable. Messes get ignored and grow as a result, unreasonable. &lt;br /&gt;&lt;br /&gt;What have the readers of this blog implemented when sharing living spaces with people you weren't sleeping with? Any pitfalls? How did you keep dishes out of the sink?&lt;br /&gt;&lt;br /&gt;Oh, and the first person to cite Garret Hardin's specious "Tragedy of the Commons" gets a cock punching. We're not talking about sterilizing human beings to keep the Earth from being overpopulated. We're not even talking about consuming commonly held goods.  I'm just designing a workable attitude toward property rights with respect to space and time to avoid inefficiency and to prevent people from resenting and hating the others. Perhaps it's a little late, but it's a good experiment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8793183442495277539?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8793183442495277539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8793183442495277539' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8793183442495277539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8793183442495277539'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/property-allocation.html' title='Property Allocation'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4207381935793772571</id><published>2008-07-21T11:57:00.002-04:00</published><updated>2008-07-21T12:03:35.822-04:00</updated><title type='text'>Golub and Van Loan wear the clock so you can know the time</title><content type='html'>Just thought I'd share the magic.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;U = &lt;br /&gt;[&lt;br /&gt;0.3594  -0.5577  0.5229  -0.4077  0.3128  0.1494 ;&lt;br /&gt;0.4158  -0.4082  0.0545  0.4089  -0.5689  -0.4082 ;&lt;br /&gt;0.4449  -0.1494  -0.4741  0.4072  0.2794  0.5577 ;&lt;br /&gt;0.4449  0.1494  -0.4729  -0.4093  0.2786  -0.5577 ;&lt;br /&gt;0.4158  0.4083  0.0558  -0.4076  -0.5697  0.4082 ;&lt;br /&gt;0.3594  0.5577  0.5216  0.4088  0.3135  -0.1494 ;&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;B = &lt;br /&gt;[&lt;br /&gt;-30.5509  -0.0006  -0.0000  -0.0000  -0.0000  0.0000 ;&lt;br /&gt;-0.0000  -7.4641  0.0001  -0.0000  -0.0000  0.0000 ;&lt;br /&gt;-0.0000  -0.0000  1.7912  0.0035  -0.0000  0.0000 ;&lt;br /&gt;0.0000  -0.0000  0.0000  1.0000  0.0008  0.0000 ;&lt;br /&gt;-0.0000  0.0000  0.0000  -0.0000  0.6579  0.0000 ;&lt;br /&gt;-0.0000  0.0000  0.0000  -0.0000  0.0000  -0.5359 ;&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;V' = &lt;br /&gt;[&lt;br /&gt;-0.3594  -0.4158  -0.4449  -0.4449  -0.4158  -0.3594 ;&lt;br /&gt;0.5577  0.4082  0.1494  -0.1494  -0.4083  -0.5577 ;&lt;br /&gt;0.5234  0.0540  -0.4746  -0.4724  0.0563  0.5211 ;&lt;br /&gt;-0.4072  0.4092  0.4065  -0.4100  -0.4073  0.4093 ;&lt;br /&gt;0.3126  -0.5687  0.2796  0.2784  -0.5699  0.3137 ;&lt;br /&gt;-0.1494  0.4082  -0.5577  0.5577  -0.4082  0.1494 ;&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;U B V' = &lt;br /&gt;[&lt;br /&gt;7.0000  6.0000  5.0000  4.0000  3.0000  2.0000 ;&lt;br /&gt;6.0000  7.0000  6.0000  5.0000  4.0000  3.0000 ;&lt;br /&gt;5.0000  6.0000  7.0000  6.0000  5.0000  4.0000 ;&lt;br /&gt;4.0000  5.0000  6.0000  7.0000  6.0000  5.0000 ;&lt;br /&gt;3.0000  4.0000  5.0000  6.0000  7.0000  6.0000 ;&lt;br /&gt;2.0000  3.0000  4.0000  5.0000  6.0000  7.0000 ;&lt;br /&gt;];&lt;br /&gt;U and V' are unitary.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Working on making SVD converge as fast as possible and to minimize storage requirements. Right now, it holds a whole copy of the tridiagonal matrix B. Storing a lot of elements known to be zero is a bit wasteful, if you believe that information theory voodoo.&lt;br /&gt;&lt;br /&gt;Yes, I realize the output B is not *quite* diagonal, but that's with four iterations of the diagonalization process (two Givens rotations per row) and no explicit zeroing of elements.&lt;br /&gt;&lt;br /&gt;Problems to solve: &lt;br /&gt;* minimize storage requirements for B. &lt;br /&gt;* figure out whether it is possible to store U and V in factored Householder forms and accumulate the Givens rotations some other way (as opposed to forming U and V explicitly then rotating them to diagonalize as I do now).&lt;br /&gt;* complex Householder reflections&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4207381935793772571?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4207381935793772571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4207381935793772571' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4207381935793772571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4207381935793772571'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/golub-and-van-loan-wear-clock-so-you.html' title='Golub and Van Loan wear the clock so you can know the time'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2397633908930832216</id><published>2008-07-17T17:14:00.003-04:00</published><updated>2008-07-17T17:16:49.211-04:00</updated><title type='text'>Singular Venereal Disease</title><content type='html'>Implemented singular value decomposition in a sense. It's not integrated into VSIPL but rather written as a VSIPL application. That'll change in the next few days. &lt;br /&gt;&lt;br /&gt;As the reference implementation of VSIPL lacks this functionality, I'm told I can submit mine to VSIPL forum for distribution perhaps. That'd be a feather in my cap.&lt;br /&gt;&lt;br /&gt;My HPEC presentation is taking shape. I have to cover a slide a minute as it is. Probably should condense it.&lt;br /&gt;&lt;br /&gt;Emma's here. No more time for interwebs!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2397633908930832216?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2397633908930832216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2397633908930832216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2397633908930832216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2397633908930832216'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/singular-venereal-disease.html' title='Singular Venereal Disease'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2753082328736801530</id><published>2008-07-14T12:09:00.005-04:00</published><updated>2008-07-14T12:46:27.325-04:00</updated><title type='text'>Weather Models</title><content type='html'>Frequently, news articles covering global warming cite weather models that predict the Earth's climate will warm in the coming decades. The articles never mention whether said models have accurately predicted past meteorological trends given historical data. Sometimes articles explicitly claim the models &lt;i&gt;have not&lt;/i&gt;. In all cases, the expectation for a model to explain the past is categorically ignored.&lt;br /&gt;&lt;br /&gt;I'd like to propose what appears to be an equally valid weather model:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;printf("Earth's climate will be hotter 100 years from now.\n");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This clearly achieves the modern standard of rigor for getting the model published. It was cheap to develop, and as a bonus, it accurately confirms what we already know about the future of our planet!&lt;br /&gt;&lt;br /&gt;Surely you don't disagree with overwhelming popular opinion on the subject...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2753082328736801530?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2753082328736801530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2753082328736801530' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2753082328736801530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2753082328736801530'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/weather-models.html' title='Weather Models'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-4264857359405804381</id><published>2008-07-14T11:50:00.003-04:00</published><updated>2008-07-14T12:09:51.021-04:00</updated><title type='text'>DC Exploration</title><content type='html'>On Thursday, I attempted to visit the Whitehouse to conduct a self-guided tour. On the Metro, I began to sweat profusely and feel light-headed. By the time I approached McPhereson Square, bloodflow to my brain apparently decreased so much that my vision became impaired. I willed myself to remain upright, and when the doors opened I walked forward and groped around for a railing on the platform. I was completely blind by then. Bad news. I'm okay now though.&lt;br /&gt;&lt;br /&gt;I need to transmit my medical care facility doctor's note to the person who arranged my tour so they don't think I'm a slacker who failed to show up because I don't value free things.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;&lt;br /&gt;My parents and sister arrived later that evening. We ate Chinese down the street and planned our weekend. I had to work Friday, so they visited Smithsonian museums of their choice. We went to eat at Nathans in Georgetown again which ruled. Saturday, my dad and I drove out to Dulles to see the Steven Udvar-Hazy Center. This is perhaps the greatest single aviation exhibit I've ever seen, and I will gladly take any readers who visit and be just as thrilled to go a second time.&lt;br /&gt;&lt;br /&gt;I have photos, but they require post-processing and downsampling. I'll try to get them up soon. I'm creating a flickr account. A separate post will chronicle what was seen with perhaps a way to prevent the strong-willed reader from avoiding spoilers.&lt;br /&gt;&lt;br /&gt;Saturday night we ate at The Front Page in Ballston then drove down to the Iwo Jima Memorial after supper. This proved a wise choice as it was low key, parking was free, and the view was splendid. The Netherlands presented the US with a carillon tower in 1960 as a way of demonstrating gratitude for liberating them from the Nazis during 1944-45. A player comes Saturdays from 6pm-8pm and plays. With the gates unlocked, my sister ran up the stairs to obtain a 100ft higher view of Arlington National Cemetery, the Potomac, and the Mall across the river. Next week, I plan to drag Emma along closer to 6pm such that there is more light and take photographs.&lt;br /&gt;&lt;br /&gt;Sunday, we returned to the National Gallery and I saw the only Da Vinci work in the United States: &lt;a href="http://en.wikipedia.org/wiki/Ginevra_de%27_Benci"&gt;Ginevra de Benci&lt;/a&gt;. It is painted on both faces of a wooden panel and is mounted in a free-standing exhibit so you can see the reverse as well as the obverse. &lt;i&gt;Ginepro&lt;/i&gt; is apparently the Latin term for juniper tree and was used to symbolize chastity. Now we see it as a precursor to gin.&lt;br /&gt;&lt;br /&gt;With that, they left Sunday afternoon to split the trip in half. We ate well, and everyone seemed to have a splendid time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-4264857359405804381?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/4264857359405804381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=4264857359405804381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4264857359405804381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/4264857359405804381'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/dc-exploration.html' title='DC Exploration'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2424345427575884658</id><published>2008-07-09T09:29:00.003-04:00</published><updated>2008-07-09T09:38:48.349-04:00</updated><title type='text'>Hype v Economics</title><content type='html'>&lt;a href="http://thecrossedpond.com/?p=3542#comment-12325"&gt;Scary&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The element gallium is in very short supply and the world may well run out of it in just a few years. Indium is threatened too, says Armin Reller, a materials chemist at Germany’s University of Augsburg. He estimates that our planet’s stock of indium will last no more than another decade.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://arstechnica.com/news.ars/post/20080709-analysis-recent-panics-over-rare-metal-scarcity-overblown.html"&gt;&lt;br /&gt;Not so scary&lt;/a&gt; [ArsTechnica]&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;One of the arguments trotted out in most posts focuses on the fact that the price of Indium has risen from around $95 in 2002 to over $1000 in 2006. What these posts fail to point out is that it was around $180 in 2000, so $95 appears to have been carefully chosen as a starting point. The end point is pretty suspicious as well, given that Indium's price was around $665 in May. Meanwhile, everyone fails to point out that the price of Gallium has remained flat in recent years. &lt;br /&gt;&lt;br /&gt;To understand why the supply side has not increased production substantially with this increase in price, you have to look at how Indium is produced. Indium is extracted from raw materials mainly as a by-product of Zinc production. Because the price of Zinc has not increased recently, and may decrease in the near future, producers have little incentive to increase output.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Let's try to keep our heads, Internet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2424345427575884658?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2424345427575884658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2424345427575884658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2424345427575884658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2424345427575884658'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/hype-v-economics.html' title='Hype v Economics'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-245142643823693929</id><published>2008-07-09T09:14:00.003-04:00</published><updated>2008-07-09T09:25:57.265-04:00</updated><title type='text'>July 4th Celebrations</title><content type='html'>Part 1 of my July 4th plans included grilling. The day was sunny, clear, and cool. My roommate Carter and I proceeded to skewer a number of chunks of beef and chicken. We included slices of onion, peppers, and zucchini. With kabobs constructed, I attempted to get a fire roaring on our kettle grill. Rather than rest the fuel on a grate above air vents at the lowest point and rely on convection to produce a flow of oxygen, our grill is simply a large pan. Given the dimensions of the fire I attempted, the result was an anemic heat that demanded approximately 45-60 minutes to grill each kabob.&lt;br /&gt;&lt;br /&gt;The result may have been worth it. Each cut was tender and juicy. All those involved concluded the grilling was a success.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.prism.gatech.edu/~gtg977g/arlington/2008july04/down_DSCN4540.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://www.prism.gatech.edu/~gtg977g/arlington/2008july04/down_DSCN4540.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Still, air holes will be nice.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;I spent the rest of the day at home. Some of that time was spent coding. When it was time for fireworks, I remained indoors due to rain.&lt;br /&gt;&lt;br /&gt;I spent Saturday indoors as well, though I went out for a midafternoon pedal down the bike paths of Arlington. A rather interesting rail follows I66 all the way to the Key bridge from George Mason Dr (my stoop, practically). Atlanta is missing out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-245142643823693929?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/245142643823693929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=245142643823693929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/245142643823693929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/245142643823693929'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/july-4th-celebrations.html' title='July 4th Celebrations'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5483499622327333116</id><published>2008-07-03T14:44:00.004-04:00</published><updated>2008-07-03T14:50:55.296-04:00</updated><title type='text'>July 4</title><content type='html'>[from &lt;a href="http://en.wikipedia.org/wiki/United_States_Declaration_of_Independence"&gt;Declaration of Independence&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;We, therefore, the Representatives of the united States of America, in General Congress, Assembled, appealing to the Supreme Judge of the world for the rectitude of our intentions, do, in the Name, and by Authority of the good People of these Colonies, solemnly publish and declare, That these United Colonies are, and of Right ought to be Free and Independent States; that they are Absolved from all Allegiance to the British Crown, and that all political connection between them and the State of Great Britain, is and ought to be totally dissolved; and that as Free and Independent States, they have full Power to levy War, conclude Peace, contract Alliances, establish Commerce, and to do all other Acts and Things which Independent States may of right do. And for the support of this Declaration, with a firm reliance on the protection of divine Providence, we mutually pledge to each other our Lives, our Fortunes and our sacred Honor.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.prism.gatech.edu/~gtg977g/arlington/dcimages/0526080155-00.JPG" alt="Respect the gangsta" /&gt;&lt;br /&gt;&lt;br /&gt;I shall observe this glorious occasion with kebobs and dry ice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5483499622327333116?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5483499622327333116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5483499622327333116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5483499622327333116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5483499622327333116'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/07/july-4.html' title='July 4'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-1172617785746193097</id><published>2008-06-30T11:33:00.006-04:00</published><updated>2008-06-30T14:56:19.365-04:00</updated><title type='text'>Nightlife</title><content type='html'>Saturday night, my friend Nick Merryman graciously invited me to hang out with him, his fiancee, and their friends. This resulted in eating Mediterranean food, drinking tequila from several establishments, dancing in a nearly vacant underground disco, and smoking a hookah. I sneakily managed to hold a pull for the duration of a hookah cycle and exhaled just as the last person exhaled; this made for some surprises. Nick managed to handwhistle with smoke which was pretty amusing.&lt;br /&gt;&lt;br /&gt;I need to figure out how to smuggle a portable whiteboard into bars. It would make discussions easier, and we wouldn't have to busily scribble illustrative plots onto napkins.&lt;br /&gt;&lt;br /&gt;Nick reported he just sent a PCB out for fabrication which is pretty impressive. I've never done any *real* RF circuit design and consider that to be fairly hardcore. His board, among other things, has pinouts for a 320-pin FPGA.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;I also need to arrange a rotisserie over a woodgrill in our backyard. My roommate seems to have cooking inclinations, so one weekend we should roast a large pile of meat.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;On the GPU front, I got TRAC installed and am using it now. Someone at GTRI is using GPU VSIPL which is interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-1172617785746193097?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/1172617785746193097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=1172617785746193097' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1172617785746193097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/1172617785746193097'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/nightlife.html' title='Nightlife'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8417815056015376713</id><published>2008-06-26T11:04:00.007-04:00</published><updated>2008-07-01T00:12:27.763-04:00</updated><title type='text'>DC v Heller</title><content type='html'>&lt;a href="http://www.supremecourtus.gov/opinions/07pdf/07-290.pdf"&gt;DC v Heller&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Held:&lt;br /&gt;&lt;br /&gt;1. The Second Amendment protects an individual right to possess a firearm unconnected with service in a militia, and to use that arm for traditionally lawful purposes, such as self-defense within the home.&lt;br /&gt;Pp. 2–53.&lt;br /&gt;&lt;br /&gt;(a) The Amendment’s prefatory clause announces a purpose, but does not limit or expand the scope of the second part, the operative clause. The operative clause’s text and history demonstrate that it connotes an individual right to keep and bear arms. Pp. 2–22.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Well done.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt; (June 30)&lt;br /&gt;&lt;br /&gt;I was going to put this in the comments but I figure it's better if more public.&lt;br /&gt;&lt;br /&gt;What firearms can you register in DC now?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mpdc.dc.gov/mpdc/frames.asp?doc=/mpdc/lib/mpdc/info/pdf/firearms_registraton_req.pdf"&gt;Semiautomatic handguns are not registered&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mpdc.dc.gov/mpdc/frames.asp?doc=/mpdc/lib/mpdc/info/pdf/registering_firearm_dc.pdf"&gt;&lt;i&gt;No weapon can shoot more&lt;br /&gt;than one shot by a single function of the trigger,&lt;br /&gt;or semi-automatically shoot more than 12 shots&lt;br /&gt;without manual reloading or be readily converted&lt;br /&gt;or restored to do so.&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I mention this just so people realize that &lt;i&gt;Heller&lt;/i&gt; only labels broad and general bans as unconstitutional. Neither the courts nor legislatures have received much guidance by this decision to determine what other types of restrictions might also be unconstitutional. Clearly, it helps to establish the individual right to keep and bear arms and to clarify the self-defense purpose inherent in the 2nd Amendment. It is also helpful to state that "handguns" cannot be prohibited. &lt;br /&gt;&lt;br /&gt;It has been observed that the ruling was close. This matters to an extent, but I don't think the narrow outcome is going to be the most significant source of legal activity to follow, at least in the next few years. &lt;i&gt;District v Heller&lt;/i&gt; acknowledges the validity of some restrictions and does not go into detail about what those might be limited to. The laws are in a flux now, and both sides see plenty of opportunity to go forward.&lt;br /&gt;&lt;br /&gt;With regard to "no semiautomatics," the 'readily converted or restored to' clause covers any weapon for which a &gt;12 round magazine exists by my interpretation. You can buy a 45 round drum for 1911s on GunBroker for $60 or so. Everyone but Nic recognizes the world of difference between semiautomatics and manually fed weapons. This new kind of ban is going to be the new language and style of the debate.&lt;br /&gt;&lt;br /&gt;Amusingly, it is not contradictory to support the &lt;i&gt;Heller&lt;/i&gt; decision and yet defend the semiautomatic ban. Watch for that from both presidential candidates as they can easily appear to appease both sides. Terms like "common sense" will fly out of mouths as effortlessly as hot air.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8417815056015376713?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8417815056015376713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8417815056015376713' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8417815056015376713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8417815056015376713'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/dc-v-heller.html' title='DC v Heller'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-8673045721342039855</id><published>2008-06-24T10:28:00.004-04:00</published><updated>2008-06-24T10:33:53.340-04:00</updated><title type='text'>Condition 1</title><content type='html'>While simulating, I read a &lt;a href="http://www.smartcarry.com/cocklock.htm"&gt;short piece&lt;/a&gt; on 'condition one' carrying of a 1911. I didn't exactly learn anything I didn't already agree with. In fact, at the end, the author suggested an experiment I've already performed to relieve my own anguish.&lt;br /&gt;&lt;br /&gt;To get over whatever fears you may have of carrying a 1911 in condition one, cock and lock it with an empty chamber and carry as you normally do. When undressing and disarming, take note for yourself the position of the hammer and see that the weapon does not in fact fire itself. Repeat until you're finally brave enough to rack one in as it were before holstering.&lt;br /&gt;&lt;br /&gt;You &lt;i&gt;have&lt;/i&gt; been carrying, right?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-8673045721342039855?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/8673045721342039855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=8673045721342039855' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8673045721342039855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/8673045721342039855'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/while-simulating-read-short-piece-on.html' title='Condition 1'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5066912808468203616</id><published>2008-06-24T10:06:00.002-04:00</published><updated>2008-06-24T10:09:02.590-04:00</updated><title type='text'>Survival Instinct</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;If [the levee outside St. Charles, MO] breaches, the river will swamp 100 homes in east Winfield, as well as 3,000 acres of farm fields, several businesses and a city ballpark. A muskrat that burrowed a hole in the soft ground released a geyser of water, and officials said it took nearly six hours Monday to choke off the leak.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Bastard muskrats. With the nearby water table literally above your head, you shouldn't make holes in the ground no matter your species.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5066912808468203616?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5066912808468203616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5066912808468203616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5066912808468203616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5066912808468203616'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/survival-instinct.html' title='Survival Instinct'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-3572369965316947944</id><published>2008-06-23T17:29:00.007-04:00</published><updated>2008-06-23T18:02:30.133-04:00</updated><title type='text'>Talking to the Police</title><content type='html'>The reader(s) of this blog tend to tread the same grounds, but I thought I'd point out that I finally watched &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.regent.edu/admin/media/schlaw/LawPreview/"&gt;Talking with the Police&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's pretty amusing and paints an idyllic portrait of law school. Prof. James Duane cites eight good reasons why talking to the police has no upside and plenty of downside. &lt;br /&gt;&lt;br /&gt;8.) No matter how careful you are, even if you're completely innocent and do not implicate yourself in any way, the mere act of making a statement opens yourself up to problems if someone else bears false witness against you (perhaps by mistake and police later convince them their vague feeling is in fact a solid recollection). That's bad.&lt;br /&gt;&lt;br /&gt;That said, in November 2006 I was more or less suspected of fraud. Someone (not me) used my name and whatever information that is available about me in the Real White Pages to make an online purchase with a stolen credit card. I agreed to help the police and by the end of the interview was permitted to use the investigating officer's computer for research to save everyone time. &lt;br /&gt;&lt;br /&gt;I haven't heard about it since, but I wonder what direction he would have taken the investigation had I refused to say anything... as I understand it, search warrants aren't all that challenging to get if you ask the right court. That alone would have been a major pain in the ass to have my computer seized shortly before Deadweek.&lt;br /&gt;&lt;br /&gt;Did performing the opposite of Prof. Duane's advice save me some trouble? His lecture suggests that the only reason things went as well for me as they did is because the officer didn't think I was responsible to begin with. "Have you ever had your mind changed by talking to a suspect, Officer Invited Guest? No?"&lt;br /&gt;&lt;br /&gt;Comments or analysis?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-3572369965316947944?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/3572369965316947944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=3572369965316947944' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3572369965316947944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/3572369965316947944'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/talking-to-police.html' title='Talking to the Police'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-5443937847492631213</id><published>2008-06-23T12:24:00.002-04:00</published><updated>2008-06-23T12:26:53.600-04:00</updated><title type='text'>South Carolina, Georgia Reciprocity</title><content type='html'>The South Carolina House &lt;a href="http://www.schousegop.com/issues/issue8.html"&gt;recently approved&lt;/a&gt; a bill establishing reciprocity for CCW permits issued by other states.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-5443937847492631213?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/5443937847492631213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=5443937847492631213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5443937847492631213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/5443937847492631213'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/south-carolina-georgia-reciprocity.html' title='South Carolina, Georgia Reciprocity'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2043135047960620857.post-2517095611306973293</id><published>2008-06-23T11:23:00.003-04:00</published><updated>2008-06-23T18:10:08.070-04:00</updated><title type='text'>Alive</title><content type='html'>I'm alive. My phone has been in quiet-and-ignored mode since Emma got here, and my laptop has been off. This was meant to be no slight to anyone. I simply wanted to prioritize my focus, and it was refreshing. I'll start returning calls and texts during my lunchbreak today.&lt;br /&gt;&lt;br /&gt;We ate at El Ranchero, an Italian restaurant, Nathans (in Georgetown), P.F. Changs, and Andy's Bed and Breakfast. These are places in which dining alone would be somewhat awkward, but with Emma they couldn't have been better.&lt;br /&gt;&lt;br /&gt;Emma seemed to get a kick out of Georgetown. It's a scenic area with plenty of interesting shops and well-dressed and exciting passers by. We stopped in at a few and thoroughly soaked up the atmosphere. Since we drove, we took an evening motor tour of the District passing by the Whitehouse, the Supreme Court, the Capitol, a brief and not necessarily planned excursion by the FDR Memorial, the Pentagon, the Air Force Memorial, and an inventive detour through west Arlington. &lt;br /&gt;&lt;br /&gt;Then we drank whiskey that we finally managed to procure from the state-run Alcohol Beverage Control stores. It is located half a block from my workplace and closes early, so I prognosticate some lunchbreak liquor runs when I run low in the coming months; I can only hope I run into my colleagues while I'm there.&lt;br /&gt;&lt;br /&gt;During our visit to the National Mall, we managed to cover the Hirshhorn Museum of Modern Art and then the National Gallery. We saw a variety of cool pieces at the Hirshhorn though were occasionally faced with the typical dilemma of modern art appreciation: are you looking at a work of art or a fire code regulation? We made sort of a whirlwind tour of the National Gallery seeing several rather old busts of important people (Washing-ton, for example) and a few positively grand paintings (&lt;i&gt;Lake Lucerne&lt;/i&gt; being my favorite).&lt;br /&gt;&lt;br /&gt;The Spy Museum and the Newseum are planned for the next trip.&lt;br /&gt;&lt;br /&gt;Emma has photos, and she left me her pink point-and-shoot camera (the one that has incriminated so many of us on Facebook). I'll take higher resolution photos from now on.&lt;br /&gt;&lt;br /&gt;It was a fun visit and I can't wait to fly her back here sometime soon. Now that she's back in ATL, your lives can go back to being interesting again. &lt;br /&gt;&lt;br /&gt;Heh. You know you like abuse, gentle reader.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2043135047960620857-2517095611306973293?l=akerr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akerr.blogspot.com/feeds/2517095611306973293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2043135047960620857&amp;postID=2517095611306973293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2517095611306973293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2043135047960620857/posts/default/2517095611306973293'/><link rel='alternate' type='text/html' href='http://akerr.blogspot.com/2008/06/andykerr-alive.html' title='Alive'/><author><name>Spatchcock</name><uri>http://www.blogger.com/profile/08496611577948467298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
