<?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-8826059633697057288</id><updated>2011-08-02T14:05:56.852-07:00</updated><title type='text'>Craig Nevill-Manning</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-5819969599742025706</id><published>2011-02-03T13:45:00.000-08:00</published><updated>2011-02-04T08:42:32.395-08:00</updated><title type='text'>2004 Google New York portrait from the Empire State Building</title><content type='html'>Nearly seven years ago, Google New York was based in Times Square (we're now in a &lt;a href="https://picasaweb.google.com/photos.jobs/NewYorkOfficePhotos#5174030652506834018"&gt;much cooler location in Chelsea&lt;/a&gt;). We had a nice view of the Empire State Building, which meant that we should also have been able to see our office from the ESB. The question that came up over our communal lunch table was: “what focal length lens would we need to take a portrait of all 20 engineers from the top of the ESB?” After some initial confusion about the mathematics of optics, we came up with the answer: about 4000mm. That's a big lens! Fortunately, Michael Riley had a 2000mm astronomical telescope, and I had a digital SLR (&lt;a href="http://en.wikipedia.org/wiki/Nikon_D1#D1H_and_D1X"&gt;Nikon D1x&lt;/a&gt;) with a DX-size sensor, which meant that once I bought a physical adaptor, we had a 3000mm focal length camera. Maureen Marquess called the ESB and found out that we could bring the bulky telescope up to the observation deck as long as we were finished by the time it was opened to tourists. The only remaining challenge was getting Michael Riley up that early – he's most productive in the wee hours of the morning – along with the other engineers. But on October 23, 2004, the stars aligned, and Michael and I went up to the (very windy) observation deck with 25mm, 105mm, 450mm and 3000mm lenses:&lt;div&gt;&lt;br /&gt;25mm:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiO1--MVI/AAAAAAAAuJ8/VBFsBhzko9U/s1600/25mm.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiO1--MVI/AAAAAAAAuJ8/VBFsBhzko9U/s1600/25mm.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiO1--MVI/AAAAAAAAuJ8/VBFsBhzko9U/s400/25mm.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5569583002578465106" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;105mm:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiO1--MVI/AAAAAAAAuJ8/VBFsBhzko9U/s1600/25mm.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiOwpG0rI/AAAAAAAAuKE/Kp_Fs95HxJ0/s1600/105mm.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiOwpG0rI/AAAAAAAAuKE/Kp_Fs95HxJ0/s400/105mm.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5569583001144578738" style="cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;450mm:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiPQzMt0I/AAAAAAAAuKM/S-9EsD94lng/s1600/450mm.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiPQzMt0I/AAAAAAAAuKM/S-9EsD94lng/s400/450mm.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5569583009776842562" style="cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3000mm:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiPcV8v3I/AAAAAAAAuKU/4VexJKhYLZs/s1600/3000mm.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiPcV8v3I/AAAAAAAAuKU/4VexJKhYLZs/s400/3000mm.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5569583012875386738" style="cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.claybavor.com/"&gt;Clay Bavor&lt;/a&gt; stitched these photos together to create this zooming movie:&lt;/div&gt;&lt;br /&gt;&lt;iframe title="YouTube video player" width="640" height="510" src="http://www.youtube.com/embed/us181ew7WKc" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-5819969599742025706?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/5819969599742025706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=5819969599742025706' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/5819969599742025706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/5819969599742025706'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2011/02/2004-google-new-york-portrait-from.html' title='2004 Google New York portrait from the Empire State Building'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://3.bp.blogspot.com/_GRmUXL1jrgM/TUsiO1--MVI/AAAAAAAAuJ8/VBFsBhzko9U/s72-c/25mm.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-1329625896872874250</id><published>2010-03-14T14:42:00.000-07:00</published><updated>2010-03-14T17:33:10.004-07:00</updated><title type='text'>Pixels by the square foot</title><content type='html'>We're renovating an apartment, and &lt;a href="http://www.gvinteriors.com/"&gt;Ghislaine Viñas&lt;/a&gt;, a friend and interior designer, suggested a mosaic for the wall of a powder room. We looked at mosaics, but they're (a) expensive, and (b) a big commitment – what if you don't like it when it's done? So I thought: wouldn't it be great to have a mutable mosaic – some kind of wall of tile-sized pixels that you could put in any pattern you wanted?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;LEDs&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;White and RGB LEDs are becoming pervasive – the Oscars had many LED panels on stage showing images and patterns. But they're expensive and power-hungry: e.g. &lt;a href="http://www.barco.com/en/product/1839/specs"&gt;100-300W for a 2 s.f. panel&lt;/a&gt;.  &lt;a href="http://www.toddholoubek.com/"&gt;Todd Holoubek&lt;/a&gt; tracked down &lt;a href="http://www.g-lec.com/en/chimera2.html"&gt;Chimera&lt;/a&gt;, which consists of LEDs (white or RGB) at a 10mm pitch, individually addressable, on boards that can be cut to any shape. The &lt;a href="http://www.g-lec.com/download.php?article=234&amp;amp;str_file=PRS14-0810-US_BMW_Museum_web.pdf"&gt;BMW Museum&lt;/a&gt; uses them to great effect. But they turn out to be $650/s.f. all-up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Plasma and LCD TVs&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a spreadsheet of &lt;a href="http://spreadsheets.google.com/ccc?key=tn4G0SMm1YDX70VSA1wVrVw#"&gt;various cheap TVs and their cost per square foot&lt;/a&gt;. Bottom-line: a 50" 720p plasma is $170/s.f. This includes $500 for a computer to drive the screen. If you drive it with a cheap device like a DVD player, the cost is $100/s.f.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This seems plausible (and cheaper than mosaic), but there are two problems: power and borders. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Power. &lt;span class="Apple-style-span" style="font-weight: normal; "&gt;50" plasma screens consume about 300W. If you had a wall of ten screens, you'd generate 3kW of heat. I wondered whether the nominal power usage was real, and whether turning down the brightness would help. so I plugged one into a &lt;a href="http://www.amazon.com/gp/product/B000RGF29Q/"&gt;Kill-A-Watt electricity usage monitor&lt;/a&gt;. Sure enough, about 270W. I turned down the brightness, and this dropped to 130W. Unfortunately, the image looked gray and washed out: I couldn't figure out how to drop the brightness without killing contrast. And in any case, 130W is still a lot.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Borders.&lt;/b&gt; How closely can you put plasma screens together? If you remove the bezels, could you make it look like a seamless wall (for example, if you put translucent glass in front)? For this, I needed to dismantle the screen. It weighs 75 lb, most of which is a big hunk of glass. I have to say, I'm not a fan of heavy, fragile things... The metal back panel comes off easily (after removing about 30 screws), but it's a cheaply-cut pressed sheet with sharp edges, and I sliced my finger open on it. Having staunched the bleeding, I removed some wires to speakers, IR receiver, etc and undid some more screws:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/_GRmUXL1jrgM/S51k5CJJXuI/AAAAAAAAtIU/GxzlPCR8_sE/s400/2010-03-13-17-08-14.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5448622055178723042" style="cursor: pointer; width: 400px; height: 252px; " /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;You can see the driver boards around the periphery, with ribbon cables going to the screen.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I lifted the (heavy, fragile) screen out, I could see the edge:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_GRmUXL1jrgM/S51m-s8-k0I/AAAAAAAAtIk/D7mZBe3XKx0/s1600-h/2010-03-13-17-12-38.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_GRmUXL1jrgM/S51m-s8-k0I/AAAAAAAAtIk/D7mZBe3XKx0/s400/2010-03-13-17-12-38.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5448624351593009986" style="cursor: pointer; width: 400px; height: 339px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_GRmUXL1jrgM/S51lnoAMwmI/AAAAAAAAtIc/ugdD2aU6e54/s1600-h/2010-03-13-17-22-55.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_GRmUXL1jrgM/S51lnoAMwmI/AAAAAAAAtIc/ugdD2aU6e54/s400/2010-03-13-17-22-55.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5448622855615726178" style="cursor: pointer; width: 400px; height: 396px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(the ruler, in addition to measuring, demonstrates the &lt;a href="http://www.tepapastore.co.nz/shop_info.asp?page=1&amp;amp;currency=NZD&amp;amp;language=english&amp;amp;category=Wood&amp;amp;productid=14878&amp;amp;productname=New%20Zealand%20Native%20Timber%20Ruler"&gt;beauty of New Zealand native wood&lt;/a&gt;...) From the edge of the image to the edge of the glass is about 30mm. So even if you had the bare panels butted up against each other, you'd have 60mm between the images. Not seamless.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Physical pixels&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So now I'm driven to desperation. I started thinking about physical mosaic-substitutes. Imagine an x-y plotter that could place lego pieces to create a piece over a few hours. With an automatic color-sorter, it could then take the old pieces out and build a new one. One problem is that there &lt;a href="http://cityroom.blogs.nytimes.com/2008/05/19/something-google-doesnt-want-you-to-see/#more-2883"&gt;aren't many lego colors&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or you could build a wall of clear vertical tubes and fill each tube with beads, varying the color to build up the image. Or if you could figure out how to thread the beads on a wire, you could do it even more finely and accurately, with less space between the columns. Then you'd just need an x plotter: the order you drop them in gives you y.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You build a paint plotter, but that would get messy, and not easy to reuse;  you'd have to have an easy way to paint over (or maybe you'd get big sheets of white paper, or a huge dry erase board).&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;I have seen the future, and it is running late&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Maybe the time for the huge, low-power image wall has not yet arrived. Let me know if you have ideas that I haven't thought of!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-1329625896872874250?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/1329625896872874250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=1329625896872874250' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/1329625896872874250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/1329625896872874250'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2010/03/pixels-by-square-foot.html' title='Pixels by the square foot'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://1.bp.blogspot.com/_GRmUXL1jrgM/S51k5CJJXuI/AAAAAAAAtIU/GxzlPCR8_sE/s72-c/2010-03-13-17-08-14.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-4962583921822711035</id><published>2009-10-10T07:38:00.001-07:00</published><updated>2009-10-18T16:49:24.600-07:00</updated><title type='text'>Boston Butt Telemetry</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Another slow-cooked pork weekend...&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;We were given a &lt;a href="http://www.biggreenegg.com/"&gt;Big Green Egg&lt;/a&gt; by Martin &amp;amp; Andrew Farach-Colton. The Egg is great at high-temperature grilling like steaks, but comes into its own for slow cooking, like pulled pork. Last time I did this and posted progress on Facebook, &lt;a href="http://www.mediratta.net/"&gt;Bharat Mediratta&lt;/a&gt; wanted more data: specifically, a chart of temperature versus time. Last time, I bought a &lt;a href="http://www.maverickhousewares.com/et72.htm"&gt;Redi-Chek&lt;/a&gt; (see how appealing a product name is when you misspell it in several ways?) remote thermometer: the transmitter has a probe that goes in the pork, and you can keep track of the internal temperature within a hundred or so feet with the remote. This time, I used &lt;a href="http://gawker.sourceforge.net/"&gt;Gawker&lt;/a&gt;, time-lapse software for the Mac, to track the temperature overnight, then replayed the movie (yeah, low-tech) to fill in a Google spreadsheet.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Here's the temperature chart:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GRmUXL1jrgM/StunB_RQ7UI/AAAAAAAAWhs/Eaxwb2LoI5M/s1600-h/pork_chart.png"&gt; &lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); -webkit-text-decorations-in-effect: none; "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GRmUXL1jrgM/StunQ43wywI/AAAAAAAAWh0/RzHwUVpbIyg/s1600-h/pork_chart.png"&gt;&lt;img src="http://1.bp.blogspot.com/_GRmUXL1jrgM/StunQ43wywI/AAAAAAAAWh0/RzHwUVpbIyg/s400/pork_chart.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5394088887292316418" style="cursor: pointer; width: 400px; height: 338px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;a href="http://spreadsheets.google.com/ccc?key=0AlsGJOVtxDL_dHpULUROX18xbmhUbnhXU2dyeGFyOFE&amp;amp;hl=en"&gt;Link to the original data and chart&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;You can see the plateau at about 170˚F from 4:30am to 8:00am. According to &lt;a href="http://www.google.com/search?q=pulled+pork+plateau"&gt;collected wisdom on the internet&lt;/a&gt;, this is when the fat and connective tissue break down. I prefer to think of it as a phase change of the Pork molecule, analogous to heated water pausing at 100˚C while all the energy goes into creating water vapor. I don't know the chemical formula for pork, but it sure must involve some tasty elements!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This time around, I had the Egg configured just right, so it maintained a constant 215-ish˚F all night, and I didn't have to wake up multiple times to adjust the vents. It was done in less than 12 hours, so must have been a bit smaller than the one I cooked last time.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Oh, and it tasted great...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;P.S. &lt;a href="http://en.wikipedia.org/wiki/Boston_butt"&gt;Why a pork shoulder is called a Boston Butt&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-4962583921822711035?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/4962583921822711035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=4962583921822711035' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/4962583921822711035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/4962583921822711035'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2009/10/pork-butt-telemetry.html' title='Boston Butt Telemetry'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://1.bp.blogspot.com/_GRmUXL1jrgM/StunQ43wywI/AAAAAAAAWh0/RzHwUVpbIyg/s72-c/pork_chart.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-8116747839278614349</id><published>2009-03-01T10:55:00.000-08:00</published><updated>2009-03-01T11:02:42.170-08:00</updated><title type='text'>Beautiful Coffee</title><content type='html'>Inspired by the new "bottomless" ("naked", "crotchless") portafilters at Google New York, I bought one for home. Seeing the espresso emerge from the filter in its syrupy, chocolate-flecked-caramel essence is a thing to behold. I highly recommend clicking on the images for the full effect:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/SarbclUEuDI/AAAAAAAAIfc/Y6gcjA8sG5A/s1600-h/20090301141079_2.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 367px;" src="http://3.bp.blogspot.com/_GRmUXL1jrgM/SarbclUEuDI/AAAAAAAAIfc/Y6gcjA8sG5A/s400/20090301141079_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5308296394908678194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GRmUXL1jrgM/SarazIjfLSI/AAAAAAAAIe8/P4npuVyRfhg/s1600-h/20090301141043.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://4.bp.blogspot.com/_GRmUXL1jrgM/SarazIjfLSI/AAAAAAAAIe8/P4npuVyRfhg/s400/20090301141043.jpg" alt="" id="BLOGGER_PHOTO_ID_5308295682814061858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/SarazMsOY8I/AAAAAAAAIfE/7PCv7FDMSs4/s1600-h/20090301141056.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://3.bp.blogspot.com/_GRmUXL1jrgM/SarazMsOY8I/AAAAAAAAIfE/7PCv7FDMSs4/s400/20090301141056.jpg" alt="" id="BLOGGER_PHOTO_ID_5308295683924452290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/SarazkFkjKI/AAAAAAAAIfM/5Aa0rTWk3P0/s1600-h/20090301141079.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://3.bp.blogspot.com/_GRmUXL1jrgM/SarazkFkjKI/AAAAAAAAIfM/5Aa0rTWk3P0/s400/20090301141079.jpg" alt="" id="BLOGGER_PHOTO_ID_5308295690204777634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GRmUXL1jrgM/Sarazg_JF6I/AAAAAAAAIfU/LZ-P0KTP3l4/s1600-h/20090301141094.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://4.bp.blogspot.com/_GRmUXL1jrgM/Sarazg_JF6I/AAAAAAAAIfU/LZ-P0KTP3l4/s400/20090301141094.jpg" alt="" id="BLOGGER_PHOTO_ID_5308295689372506018" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-8116747839278614349?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/8116747839278614349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=8116747839278614349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/8116747839278614349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/8116747839278614349'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2009/03/beautiful-coffee.html' title='Beautiful Coffee'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://3.bp.blogspot.com/_GRmUXL1jrgM/SarbclUEuDI/AAAAAAAAIfc/Y6gcjA8sG5A/s72-c/20090301141079_2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-5269196958391842129</id><published>2009-02-28T13:24:00.000-08:00</published><updated>2009-03-01T09:20:32.071-08:00</updated><title type='text'>Digital Music Stand: electronic paper edition</title><content type='html'>(followup to &lt;a href="http://craignevillmanning.blogspot.com/2008/05/digital-music-stand.html"&gt;Digital Music Stand&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;The Kindle 2 has an 800x600 4-bit electronic paper screen, good enough (just) for reading music from a couple of feet away. After a few tweaks, my pipeline produces appropriately-sized 4-bit PNGs. Amazon provides a free email service to convert them to the Kindle proprietary format  format, provided that you transfer them from a computer via USB.&lt;br /&gt;&lt;br /&gt;Click on the images for higher resolution:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GRmUXL1jrgM/Samr3kdvnfI/AAAAAAAAIeQ/9O1HNbXpi54/s1600-h/kindle_music_stand_2.jpg.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://1.bp.blogspot.com/_GRmUXL1jrgM/Samr3kdvnfI/AAAAAAAAIeQ/9O1HNbXpi54/s400/kindle_music_stand_2.jpg.jpg" alt="" id="BLOGGER_PHOTO_ID_5307962607002426866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GRmUXL1jrgM/Samr3ZA1DxI/AAAAAAAAIeI/lyuOfdSiWRg/s1600-h/kindle_music_stand_1.jpg"&gt;&lt;img style="cursor: pointer; width: 282px; height: 400px;" src="http://2.bp.blogspot.com/_GRmUXL1jrgM/Samr3ZA1DxI/AAAAAAAAIeI/lyuOfdSiWRg/s400/kindle_music_stand_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5307962603928358674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The difference in lighting isn't this extreme—the Kindle relies on ambient light, and this photo was taken late on a dim day. But the size comparison indicates that it's perhaps not the perfect gig solution.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GRmUXL1jrgM/SamwLvXhiGI/AAAAAAAAIeg/t74u0XsLo0g/s1600-h/kindle_music_stand_3.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 277px;" src="http://3.bp.blogspot.com/_GRmUXL1jrgM/SamwLvXhiGI/AAAAAAAAIeg/t74u0XsLo0g/s400/kindle_music_stand_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5307967351573022818" border="0" /&gt;&lt;/a&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div style="border: 1px solid gray; padding: 3px; background: white none repeat scroll 0% 0%; display: none; z-index: 1000; font-size: 8pt; font-family: sans-serif; position: fixed; top: 0px; right: 0px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-5269196958391842129?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/5269196958391842129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=5269196958391842129' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/5269196958391842129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/5269196958391842129'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2009/02/digital-music-stand-electronic-paper.html' title='Digital Music Stand: electronic paper edition'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://1.bp.blogspot.com/_GRmUXL1jrgM/Samr3kdvnfI/AAAAAAAAIeQ/9O1HNbXpi54/s72-c/kindle_music_stand_2.jpg.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-9081834748263863905</id><published>2008-08-25T07:09:00.000-07:00</published><updated>2008-08-25T07:12:56.400-07:00</updated><title type='text'>Olympic Medals per Capita</title><content type='html'>As you scan the Olympic medal tally, one thing stands out: larger countries tend to win more medals. An obvious exception, especially in 2008, is Australia, who won the sixth largest number of medals with a population of 21 million, 39th largest of Olympic countries. The obvious next question, which has been taken up by a variety of commentators, including &lt;a href="http://latimesblogs.latimes.com/olympics_blog/2008/08/tasman-sea-chan.html"&gt;Chuck Culpepper&lt;/a&gt;&lt;a href="http://latimesblogs.latimes.com/olympics_blog/2008/08/tasman-sea-chan.html"&gt; of the Los Angeles Times&lt;/a&gt;, is: who leads the world in medals per capita? I became frustrated with the lack of up-to-date statistics, so I built &lt;a href="http://www.medalspercapita.com/"&gt;http://www.medalspercapita.com/&lt;/a&gt;, which is updated daily during the Olympics, to answer this question. In addition, it calculates the leaders in gold medals per capita, as well as a weighted medal count where gold is worth three points, silver two and bronze one. Finally, it's a little unfair to ignore the relative wealth of countries, so the site counts medals relative to GDP. My bias? I'm originally from New Zealand, which has consistently been in the top half-dozen or so countries for total medals and gold medals per capita, trading positions back and forth with geographic neighbor Australia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-9081834748263863905?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/9081834748263863905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=9081834748263863905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/9081834748263863905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/9081834748263863905'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2008/08/olympic-medals-per-capita.html' title='Olympic Medals per Capita'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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-8826059633697057288.post-4227289974309138743</id><published>2008-06-12T11:06:00.000-07:00</published><updated>2008-06-12T11:34:08.739-07:00</updated><title type='text'>Frames inside TabPanels in Google Web Toolkit (GWT)</title><content type='html'>I'm building a little app in GWT, and put an iframe into one of the tabs. I wanted the browser to fill the whole panel:&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GRmUXL1jrgM/SFFnmWI_GtI/AAAAAAAAEok/F7JkBzt9RyU/s1600-h/fill.png"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_GRmUXL1jrgM/SFFnmWI_GtI/AAAAAAAAEok/F7JkBzt9RyU/s320/fill.png" alt="" id="BLOGGER_PHOTO_ID_5211060152320334546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, this doesn't work:&lt;br /&gt;&lt;br /&gt;&lt;div class="mycode"&gt;tp = new TabPanel();&lt;br /&gt;tp.add(mainTable, "Table");&lt;br /&gt;page = new Frame("http://www.google.com/");&lt;br /&gt;page.setHeight("100%");&lt;br /&gt;tp.add(page, "Web")&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It results in:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GRmUXL1jrgM/SFFqavlwkBI/AAAAAAAAEo8/DZbe_1-_uy8/s1600-h/nofill.png"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_GRmUXL1jrgM/SFFqavlwkBI/AAAAAAAAEo8/DZbe_1-_uy8/s320/nofill.png" alt="" id="BLOGGER_PHOTO_ID_5211063251528355858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After a tedious investigation, it appears that the problem lies in the underlying iframe: setting  the iframe style to "height: 100%" doesn't work in HTML in general. You can set the height in pixels, but it's up to you to figure out how many pixels high it should be to fit properly. There's a related but different problem for the TabPanel: 100% seems not to respect other widgets that it's packed with, so it ends up too large, resulting in a vertical scroll bar where you don't want it. Incidentally, "width=100%" works fine in both cases.&lt;br /&gt;&lt;br /&gt;Here's a (slightly hacky) solution:&lt;br /&gt;&lt;br /&gt;&lt;div class="mycode"&gt;class ResizeListener implements WindowResizeListener {&lt;br /&gt;  public void onWindowResized(int width,int height) {&lt;br /&gt;    tp.setHeight((Window.getClientHeight() - tp.getAbsoluteTop() - 50) + "px");&lt;br /&gt;    page.setHeight((Window.getClientHeight() - page.getAbsoluteTop() - 10) + "px");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;Window.addWindowResizeListener(new ResizeListener());&lt;br /&gt;...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You also need to call both these functions initially as part of the setup code. This seems to be an unfortunate case where you need to know more than GWT's surface: you need to understand the underlying HTML implementation to solve the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-4227289974309138743?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/4227289974309138743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=4227289974309138743' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/4227289974309138743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/4227289974309138743'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2008/06/frames-inside-tabpanels-in-google-web.html' title='Frames inside TabPanels in Google Web Toolkit (GWT)'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://bp3.blogger.com/_GRmUXL1jrgM/SFFnmWI_GtI/AAAAAAAAEok/F7JkBzt9RyU/s72-c/fill.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8826059633697057288.post-6540705293258123666</id><published>2008-05-03T10:53:00.000-07:00</published><updated>2008-10-05T14:23:49.371-07:00</updated><title type='text'>Digital Music Stand</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GRmUXL1jrgM/SGwXx-Na0kI/AAAAAAAAEvQ/XIdgVDxY0dc/s1600-h/20080703120412.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_GRmUXL1jrgM/SGwXx-Na0kI/AAAAAAAAEvQ/XIdgVDxY0dc/s400/20080703120412.jpg" alt="" id="BLOGGER_PHOTO_ID_5218572215495873090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;&lt;br /&gt;I wanted to get rid of the big stack of music books by my piano. Also, the binding on most of the books was driving me mad—the glue binding that is common with Hal Leonard books doesn't sit flat, and makes it hard to turn pages. I decided to scan all my books and replace them with digital music stand.&lt;br /&gt;&lt;br /&gt;Scanning&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;cut the spines off all my music books&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;a few minutes per book&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;only had a guillotine/paper cutter that could reliably handle 25 pages at a time, so it was pretty tedious&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;scanned them using a Canon Imagerunner 5570&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;about 5 seconds per double-sided page&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;sheet feeder was good up to 150 pages at a time, so most books took two runs&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;about 5-10 minutes per book&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;scanned at 600 dpi black and white to PDF&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;set the paper size to Legal—most music books are about 9"x12". The 8.5" width captures the music OK, and we trim the extra 2" later in software.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:georgia;"&gt;Image Processing&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.foolabs.com/xpdf/"&gt;pdfimages&lt;/a&gt; from http://www.foolabs.com/xpdf/ to extract the pbm files, one per page, from the PDF&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://sourceforge.net/projects/pagetools"&gt;pbm_findskew&lt;/a&gt; from http://sourceforge.net/projects/pagetools to detect the skew of the pages, usually less than 1˚&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;installed &lt;a href="http://netpbm.sourceforge.net/"&gt;netpbm&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;pamflip to rotate the images clockwise (the scanner output them landscape)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;pnmrotate to remove the skew:&lt;br /&gt;$angle = 0 + `/Users/craignmnew/bin/pbm_findskew $finputpbm`;&lt;br /&gt;`pamflip -cw $inputpbm | pnmrotate $angle &gt; $deskewed`;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Installed &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;convert -trim to remove the extra 2" of white&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.nevill-manning.com/music_stand.pl"&gt;here's my perl script&lt;/a&gt; to run all of these from beginning to end&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:georgia;"&gt;Hardware&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;I wanted a good-looking, high-quality display for the stand, with minimal cables, so bought an &lt;a href="http://www.apple.com/displays/"&gt;Apple 23" Cinema Display&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The 12" vertical size of the viewable area matches the size of a music book&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The 19" horizontal size matches two pages side by side&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The display has a single cable out the back, carrying power, video, USB and FireWire, which minimizes the cable mess&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The screen is VESA mountable, which means you can easily remove the stand. I did this, and built tiny black feet out of &lt;a href="http://www.sculpey.com/Products/products_poly_premosculp.htm"&gt;Premo&lt;/a&gt;, a polymer clay that bakes hard. The feet have a small lip around the front of the bottom of the screen, and are molded to the ripples in the piano music holder. There is one more Premo “peg” at the back of the screen, holding it at the right distance from the back of the music holder.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GRmUXL1jrgM/SGwXxLgNSBI/AAAAAAAAEu4/vMvOQRr0v-c/s1600-h/20080703120155.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_GRmUXL1jrgM/SGwXxLgNSBI/AAAAAAAAEu4/vMvOQRr0v-c/s400/20080703120155.jpg" alt="" id="BLOGGER_PHOTO_ID_5218572201884469266" border="0" /&gt;&lt;/a&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;I hooked the display to a 1.5GHz 512MB Mac Mini I had&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Put the Mac on the wireless network, and enabled screen sharing and file sharing (Leopard), so I could control it and transfer files without a keyboard or mouse connected.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;I looked for a very fast image viewing program—the Mac Mini graphics are pretty wimpy. Came across &lt;a href="http://wakaba.c3.cx/s/apps/xee.html"&gt;Xee&lt;/a&gt;, which has the full-screen mode and speed I was looking for.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;For control (remember, no keyboard or mouse,) I bought a &lt;a href="http://www.griffintechnology.com/products/powermate"&gt;Griffin Powermate&lt;/a&gt;, which is the most beautiful peripheral ever made. It's a programmable knob, beautifully machined. I took the knob off, and removed the fabric that provides friction for control. This made the knob easy to spin. Thanks to Dan Egnor for this insight. I set the driver to emit command-arrow keystrokes, which causes Xee to move forward and backwards through the page images when the knob is turned clockwise and counter-clockwise respectively. I also mapped "push" to forward, so that I can go to the next page just by tapping the knob.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GRmUXL1jrgM/SGwXxuiIAdI/AAAAAAAAEvI/vt0o1LxFF8k/s1600-h/20080703120345.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_GRmUXL1jrgM/SGwXxuiIAdI/AAAAAAAAEvI/vt0o1LxFF8k/s400/20080703120345.jpg" alt="" id="BLOGGER_PHOTO_ID_5218572211287753170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;Once I had this all working, I realized that I needed foot control, so that I could turn pages without taking my hands off the keyboard. Most foot switches I found were for dictation machines, were expensive, and individual. After a lot of searching, I found the &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.cme-pro.com/products-list/product-gpp.html"&gt;CME GPP-3&lt;/a&gt;&lt;span style="font-family:georgia;"&gt;, which simulates grand piano pedals, and has USB output. It talks MIDI, though, so I had to find some way of making the MIDI events drive Xee, the display program. I eventually found &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.charlie-roberts.com/midiStroke/"&gt;midiStroke&lt;/a&gt;&lt;span style="font-family:georgia;"&gt;, which is free, and translates MIDI events to keystrokes. This setup works like a breeze!&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GRmUXL1jrgM/SGwXxcsafgI/AAAAAAAAEvA/ezuuL0xdZ5o/s1600-h/20080703120257.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_GRmUXL1jrgM/SGwXxcsafgI/AAAAAAAAEvA/ezuuL0xdZ5o/s400/20080703120257.jpg" alt="" id="BLOGGER_PHOTO_ID_5218572206499069442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:georgia;"&gt;Some more image processing&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;To obviate the need for Xee to do any scaling, and to reduce the filesizes:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;pnmscale -linear to scale each page to 1200 vertical pixels, the resolution of the screen. Without -linear, pnmscale tries to be clever with gamma, and the scaled version ends up too light. Gamma in a bitmap. Hmmm...&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;convert +combine to combine pairs of pages into one image, side by side&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;I'm torn about whether I want to be able to "turn" one page at a time -- move the right page to the left, and bring a new page on the right. This doubles the number of images, and takes longer to flip through them, but does enable page turns to be done before they're absolutely necessary—this insight due to &lt;a href="http://www.cosc.canterbury.ac.nz/tim.bell/"&gt;Tim Bell&lt;/a&gt;, who has his own, much more sophisticated, &lt;a href="http://www.cosc.canterbury.ac.nz/research/reports/HonsReps/2007/hons_0701.pdf"&gt;Music Stand project&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;finally, pnmtopng to produce the final image file.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The filesizes are surprisingly large—1.5MB—and after some investigation, it appears that something is causing the PNG to have a depth of 16 bits. There's really not that much information there, and the video card can only support 8-bit grayscale, so pamdepth should fix this. 8-bit PNG files are around 350K.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8826059633697057288-6540705293258123666?l=craignevillmanning.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://craignevillmanning.blogspot.com/feeds/6540705293258123666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8826059633697057288&amp;postID=6540705293258123666' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/6540705293258123666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8826059633697057288/posts/default/6540705293258123666'/><link rel='alternate' type='text/html' href='http://craignevillmanning.blogspot.com/2008/05/digital-music-stand.html' title='Digital Music Stand'/><author><name>Craig Nevill-Manning</name><uri>http://www.blogger.com/profile/05177752241391591108</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://bp3.blogger.com/_GRmUXL1jrgM/SGwXx-Na0kI/AAAAAAAAEvQ/XIdgVDxY0dc/s72-c/20080703120412.jpg' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
