<?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-9667563</id><updated>2012-01-22T22:14:06.126-08:00</updated><category term='China'/><category term='karma'/><category term='tablet'/><category term='LPC1768'/><category term='web apps'/><category term='jena'/><category term='ARM architecture'/><category term='fabber'/><category term='conference'/><category term='resolution'/><category term='aging'/><category term='clean energy'/><category term='bayesian'/><category term='compensation models'/><category term='presentation'/><category term='multiple materials'/><category term='polylactic acid'/><category term='automation of science'/><category term='travel'/><category term='Verilog'/><category term='technology roadmap'/><category term='remastering'/><category term='CUDA'/><category term='molecular modeling'/><category term='interval training'/><category term='productive nanosystems'/><category term='FPGA'/><category term='work'/><category term='social goals'/><category term='telomerase'/><category term='laser cutting'/><category term='longevity'/><category term='foresight institute'/><category term='process'/><category term='semantic web'/><category term='Rails'/><category term='music'/><category term='Mediawiki'/><category term='GPUs'/><category term='CNC'/><category term='residential solar'/><category term='getting started'/><category term='Sprint 8'/><category term='electronics'/><category term='sintering'/><category term='SAM7'/><category term='fabber revolution'/><category term='economics'/><category term='Ruby'/><category term='software'/><category term='Django'/><category term='Linux'/><category term='netbook'/><category term='TA-65'/><category term='steampunk'/><category term='Bluetooth'/><category term='embedded circuitry'/><category term='sugar'/><category term='Ubuntu'/><category term='specifications'/><category term='replication'/><category term='Android apps'/><category term='server stuff'/><title type='text'>Will Ware's blog</title><subtitle type='html'>Tinkering with USB hardware, Ubuntu, Django/Python, and other fun stuff.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://willware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default?start-index=101&amp;max-results=100'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>170</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9667563.post-4048355828024877418</id><published>2011-09-19T09:47:00.000-07:00</published><updated>2011-09-19T10:26:47.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='steampunk'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='fabber'/><title type='text'>MakerFaire NYC 2011</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I went to &lt;a href="http://makerfaire.com/newyork/2011/"&gt;MakerFaire&lt;/a&gt; at the NY Hall of Science, Queens, NY on September 17th and 18th, and took plenty of &lt;a href="https://picasaweb.google.com/117500577383561624782/MakerFaireNYC2011#"&gt;photos&lt;/a&gt;. Like last year, the location was the site of the &lt;a href="http://en.wikipedia.org/wiki/1964_New_York_World's_Fair"&gt;1964 World's Fair&lt;/a&gt;. Even though I grew up pretty close to New York, I didn't get to see the World's Fair as a child, so I'm glad to have these opportunities to see what's left of it.&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/-vILBonF7YpU/Tna1VFMZX1I/AAAAAAAABJg/NJgoMY37Oeg/s1600/IMG_0065.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-vILBonF7YpU/Tna1VFMZX1I/AAAAAAAABJg/NJgoMY37Oeg/s320/IMG_0065.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;As was true last year, there were lots of 3D printers and CNC milling machines. My impression this year was that a much larger percentage of them were hobbyist efforts rather than high-end commercial projects. I think that's a good thing. There seems to me to be a maturing of the 3D printer hobbyist effort in general, and the gradual emergence of more small businesses like &lt;a href="http://en.wikipedia.org/wiki/Bre_Pettis"&gt;Bre Pettis&lt;/a&gt;'s &lt;a href="http://en.wikipedia.org/wiki/Makerbot"&gt;Makerbot&lt;/a&gt;. The hard technical challenges (the big one being getting the extruder nozzle to work just right) have pretty much been identified now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I looked at some of the products, which have been improving in resolution, it occurred to me that an interesting approach would be, instead of going with increasingly fine nozzles, to use a coarse nozzle to place a slightly oversized drop of plastic, let that drop cool and harden, and then bring in a milling tool to shape it. This would mean moving back and forth frequently between the extruder nozzle and the milling tool, so it would need some tinkering and might not end up being an improvement.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/pVFcSfUBWSk/0.jpg" height="266" style="clear: right; float: right;" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pVFcSfUBWSk&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/pVFcSfUBWSk&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;There were lots of other tools, things on display, and cool stuff to see. I was really impressed with an elegant (if low-res) volumetric display called &lt;a href="http://madparker.com/lumarca/"&gt;Lumarca&lt;/a&gt;. Essentially the guy uses a projector to project colors onto lengths of monofilament fishing line in the viewing volume, and by carefully controlling the projected image, he individually controls what colors appear along each length of monofilament.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There were a few interesting vehicles, like motorized skateboards and&amp;nbsp;&lt;a href="http://makerfaire.com/pub/e/6992"&gt;a Segway clone&lt;/a&gt;. Those were fun.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;One thing I found interesting was that in addition to the expected Arduino stuff (which has the &lt;a href="http://oreilly.com/catalog/0636920021414"&gt;full&lt;/a&gt; &lt;a href="http://oreilly.com/catalog/0636920022244"&gt;weight&lt;/a&gt; of &lt;a href="http://oreilly.com/catalog/0636920021179"&gt;O'Reilly&lt;/a&gt; &lt;a href="http://oreilly.com/catalog/0636920020882"&gt;Publishing&lt;/a&gt; behind it), there were a good number of boards with more advanced microcontrollers, particularly ARM &lt;a href="http://www.arm.com/products/processors/cortex-m/cortex-m3.php"&gt;Cortex-M3&lt;/a&gt; controllers. This interests me because with their larger address spaces and fuller feature sets, ARM processors can run Linux OSes or Python interpreters or other big pieces of code &amp;nbsp;beyond the itty-bitty programs that will fit on an Arduino. &lt;a href="http://teholabs.com/"&gt;Teho Labs&lt;/a&gt; had a &lt;a href="http://teholabs.com/category/boards/"&gt;nice line&lt;/a&gt; of Cortex M3 boards. They shared space with &lt;a href="http://dangerousprototypes.com/"&gt;Dangerous Prototypes&lt;/a&gt; who were showing off their &lt;a href="http://www.seeedstudio.com/depot/web-platform-kit-p-582.html?cPath=61_68"&gt;Web Platform&lt;/a&gt; board.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did get pretty tired and sore walking around so much, and needed some Advil. But it was definitely worthwhile. Maybe I'll have some project next year so that I can have a booth of my own.&lt;a href="http://www.arm.com/products/processors/cortex-m/cortex-m3.php"&gt;http://www.arm.com/products/processors/cortex-m/cortex-m3.php&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4048355828024877418?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4048355828024877418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4048355828024877418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4048355828024877418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4048355828024877418'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/09/makerfaire-nyc-2011.html' title='MakerFaire NYC 2011'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-vILBonF7YpU/Tna1VFMZX1I/AAAAAAAABJg/NJgoMY37Oeg/s72-c/IMG_0065.JPG' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Avenue of Science, Corona, NY 11368, USA</georss:featurename><georss:point>40.74712691266428 -73.85112762451172</georss:point><georss:box>40.74111191266428 -73.86099812451172 40.753141912664276 -73.84125712451171</georss:box></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-9120461890251304023</id><published>2011-09-11T19:56:00.000-07:00</published><updated>2011-09-19T09:51:04.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><category scheme='http://www.blogger.com/atom/ns#' term='ARM architecture'/><title type='text'>We need to build more educational computers</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/9/9e/Digicomp_I.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="154" src="http://upload.wikimedia.org/wikipedia/commons/9/9e/Digicomp_I.JPG" width="320" /&gt;&lt;/a&gt;When I was a kid, I had this absolutely wonderful educational computer called &lt;a href="http://en.wikipedia.org/wiki/Digi-Comp_I"&gt;Digi-Comp&lt;/a&gt;. It was very simple, with only three bits of state, and that was fine for learning an awful lot of basic stuff about computers. And it was sturdy as anything. I must have disassembled and reassembled it hundreds of times and it never broke and never stopped working. Somebody needs to design a 21st century mechanical computer using an inexpensive service like &lt;a href="http://www.ponoko.com/"&gt;Ponoko&lt;/a&gt;&amp;nbsp;or &lt;a href="http://www.shapeways.com/"&gt;Shapeways&lt;/a&gt; or &lt;a href="http://www.100kgarages.com/"&gt;100kGarages&lt;/a&gt; or &lt;a href="http://www.bigbluesaw.com/"&gt;Big Blue Saw&lt;/a&gt; to do laser cutting or 3D printing.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://oldcomputers.net/pics/kim1-a.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://oldcomputers.net/pics/kim1-a.jpg" width="246" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When I was in college, I saved up money to buy a &lt;a href="http://en.wikipedia.org/wiki/KIM-1"&gt;KIM-1&lt;/a&gt; single-board computer with a 6502 microprocessor, a hexadecimal keypad, and six seven-segment digit displays. I learned a lot of what became my career playing with that thing, writing little assembly language programs, soldering TTL chips to it, and generally having a great time. When I left school, I bought an old &lt;a href="http://en.wikipedia.org/wiki/ASR-33_Teletype"&gt;ASR-33 teletype&lt;/a&gt; from the school's department for retiring obsolete junk, and used it to give the KIM-1 a 300 baud line printer. Back in those days we had extraordinarily low thresholds of entertainment. Still, it was educational.&lt;br /&gt;&lt;br /&gt;We need to be building more of this kind of stuff today. The things we build need to be easily hackable and easy to form user communities around. I guess you could say we already have something like the KIM-1 with today's &lt;a href="http://arduino.cc/"&gt;Arduino&lt;/a&gt;, but it never fills me with intrigue like the KIM-1 did, where you were literally typing in machine opcodes onto that hex keypad, and they're showing up in the LED digits. It gives you a real sense of intimacy with the entire process of computation. Compiling C code never gets you quite that close to the action.&lt;br /&gt;&lt;br /&gt;If you regard the Digi-Comp and the KIM-1 as two points along a spectrum of sophistication, we probably ought to plan on a third more advanced point, given that the KIM-1 is about 30 years old now. I've been doing some puttering with ARM-7 and ARM-9 boards of various kinds, some so capable as to run Linux, and I think that's a good third point because that's the kind of hardware that appears in modern consumer devices.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-9120461890251304023?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/9120461890251304023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=9120461890251304023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9120461890251304023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9120461890251304023'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/09/we-need-to-build-more-educational.html' title='We need to build more educational computers'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7678719480444859008</id><published>2011-08-26T12:23:00.000-07:00</published><updated>2011-08-26T12:23:08.042-07:00</updated><title type='text'>Random notes for 26 August 2011</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-e96hR5EVfvo/TlfwW2iaD5I/AAAAAAAABCc/Of5AoLU_c0I/s1600/proteinviews.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-e96hR5EVfvo/TlfwW2iaD5I/AAAAAAAABCc/Of5AoLU_c0I/s320/proteinviews.png" width="128" /&gt;&lt;/a&gt;&lt;/div&gt;I don't have anything individually notable happening lately but I thought I'd talk about a few different things. Yesterday lunchtime I talked to some folks at Harvard Medical School who are cooking up a great little open source project, and I'm hoping to contribute to it. Their idea is to use &lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt; to make it simple and easy and quick for medical researchers to put together animations involving multiple &lt;a href="http://en.wikipedia.org/wiki/Protein"&gt;proteins&lt;/a&gt; interacting. How things have been so far is that making an animation is a colossal hassle (I know this from &lt;a href="http://www.youtube.com/watch?v=RosHyQUw5jI"&gt;experience&lt;/a&gt;) and usually the researcher is way too busy doing science, so any animation would be done by public relations folks as a means to communicate the research to the non-scientific public.&lt;br /&gt;&lt;br /&gt;If animation were so quick and easy and painless that the researcher could do it himself or herself, then researchers could share animations with one another, modify another researcher's animation, append commentary or publication references or other metadata (I am envisioning something like a &lt;a href="http://en.wikipedia.org/wiki/Git_(software)"&gt;git&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Component_repository_management"&gt;repository&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/Fork_(software_development)"&gt;forks&lt;/a&gt;), and animations would become more than just a PR tool. They would become a part of the active scientific literature, and they would make it possible for researchers to dig deeper into problems, to have more detailed and nuanced communications with one another, and ultimately for better science to be done.&lt;br /&gt;&lt;br /&gt;They've decided to attack the problem of simulating and animating several proteins (or other similar sized structures like &lt;a href="http://en.wikipedia.org/wiki/Cell_membrane"&gt;cell membranes&lt;/a&gt;) interacting simultaneously. Most software tools in this area are designed to deal with only one large molecule at a time. But disease processes often involve interactions. Think about &lt;a href="http://en.wikipedia.org/wiki/Virus#Replication_cycle"&gt;viral self-assembly&lt;/a&gt; where a bunch of pieces come together to form a protein shell around some RNA. Think about &lt;a href="http://en.wikipedia.org/wiki/Ligand_(biochemistry)"&gt;ligands&lt;/a&gt; binding with &lt;a href="http://en.wikipedia.org/wiki/Binding_site"&gt;receptors&lt;/a&gt;. These involve two or more large molecules, and you need to keep track of their position, their orientation, their mechanical properties, their electrostatic properties, their relative linear and angular momenta. It's a yummy area of inquiry, and done correctly, this could be a significant advance to science, in an area that might easily be dismissed as "pretty pictures".&lt;br /&gt;&lt;br /&gt;So yeah, I'm pretty psyched about their project. But there is other news. I'm saddened to learn that Steve Jobs is stepping down as Apple's CEO, presumably for health reasons. It's a sad sad thing that we don't have a better handle on cancer, AIDS and other big diseases. As an engineer in a society that considers itself advanced, I find it a little embarrassing that we've done so poorly. I'm also embarrassed that our economy distorts the motivations for dealing with these -- pharmaceutical companies make bigger profits "treating" diseases than curing them. And don't get me started with medical insurance, or the FDA approval process.&lt;br /&gt;&lt;br /&gt;On to happier topics. At my job we are starting to use &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt; for some things, which is a sort of simplified &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;. Neat stuff. And we're tinkering with &lt;a href="http://en.wikipedia.org/wiki/MongoDB"&gt;Mongo&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Redis_(data_store)"&gt;Redis&lt;/a&gt;, both of them fascinating &lt;a href="http://en.wikipedia.org/wiki/NoSQL"&gt;NoSQL&lt;/a&gt; databases. Very very cool. I need to think of some interesting home projects for these.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7678719480444859008?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7678719480444859008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7678719480444859008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7678719480444859008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7678719480444859008'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/08/random-notes-for-26-august-2011.html' title='Random notes for 26 August 2011'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-e96hR5EVfvo/TlfwW2iaD5I/AAAAAAAABCc/Of5AoLU_c0I/s72-c/proteinviews.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2351801242539632190</id><published>2011-07-31T09:05:00.000-07:00</published><updated>2011-07-31T09:05:13.929-07:00</updated><title type='text'>Molecule construction and visualization website</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Sm-CQwQd2R0/TjV3gh5wkFI/AAAAAAAAA_A/JTYT-ze9FfY/s1600/screenshot.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-Sm-CQwQd2R0/TjV3gh5wkFI/AAAAAAAAA_A/JTYT-ze9FfY/s200/screenshot.png" width="187" /&gt;&lt;/a&gt;&lt;/div&gt;For a couple of months now, I've been at work on a &lt;a href="http://wware-molecules.appspot.com/"&gt;website&lt;/a&gt; for constructing and visualizing molecules. In-browser molecular dynamics are done with a molecular mechanics modeler based on &lt;a href="http://books.google.com/books?id=U0TeILEDTr0C&amp;amp;pg=PA34&amp;amp;lpg=PA34&amp;amp;dq=allinger+mm2&amp;amp;source=bl&amp;amp;ots=SPAG-jcRSj&amp;amp;sig=wMvV0Xpuzape9r5kE6Xb6IpYW9s&amp;amp;hl=en&amp;amp;ei=M3Y1Trr4DIHAgQf4ua2ADQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=6&amp;amp;ved=0CDMQ6AEwBQ#v=onepage&amp;amp;q=allinger%20mm2&amp;amp;f=false"&gt;Norman Allinger's MM2&lt;/a&gt; as described in &lt;a href="http://e-drexler.com/d/06/00/Nanosystems/toc.html"&gt;Eric Drexler's Nanosystems&lt;/a&gt;. This is the same set of mathematics I used in an earlier effort in the same vein called &lt;a href="http://willware.net/ncad.html"&gt;NanoCAD&lt;/a&gt; in 1997. Unfortunately my knowledge of chemistry and molecular modeling hasn't grown very quickly in that time. I know a bit more from my time with &lt;a href="http://www.nanoengineer-1.com/content/"&gt;Nanorex&lt;/a&gt;, where molecular modeling was mixed with gadgets to supply external forces ("jigs" in the parlance of our program), an idea that I believe is crucial to nanotechnology design software and also to scaling molecular simulations to much larger scales. I hope to use the code from this website as a starting point for working in that area.&lt;br /&gt;&lt;br /&gt;I have expenses like everybody else, and I'm trying to think of ways to use this website to make a little money without tarnishing its educational potential or scientific credibility. I want the website to be readily available for use in schools and universities. If I end up putting ads on the website, I hope to make them tastefully small and out-of-the-way.&amp;nbsp;I've noticed that the HTML5 canvas I'm relying upon for graphics doesn't work on iPhones, iPads, or Android phones, so there's an opportunity to sell mobile apps for those platforms, using their native graphics canvases. I'm very open to ideas to bring in a little revenue without being tacky. I've put a lot of work into this, and plan a lot more.&lt;br /&gt;&lt;br /&gt;Longer term plans include adding jigs as discussed above, maybe an interface for a force-feedback joystick so that you can find out what Brownian motion feels like, using the website to get access to much better and faster simulators, and storing your own private library of molecules. This stuff started out as Java code with the website's JavaScript being co-developed, but at some point the JavaScript development took off and I didn't make time to keep the Java up to date. So I need to do that, and then the JAR file can become a useful computational chemistry tool.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2351801242539632190?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2351801242539632190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2351801242539632190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2351801242539632190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2351801242539632190'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/07/molecule-construction-and-visualization.html' title='Molecule construction and visualization website'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Sm-CQwQd2R0/TjV3gh5wkFI/AAAAAAAAA_A/JTYT-ze9FfY/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5311336196454706126</id><published>2011-07-26T06:08:00.000-07:00</published><updated>2011-07-26T16:32:28.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='molecular modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Molecular dynamics and force fields</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In the web's early days, I wrote a &lt;a href="http://willware.net/ncad.html"&gt;Java applet&lt;/a&gt; to do a little bit of molecular modeling in your web browser. I had picked up a copy of &lt;a href="http://metamodern.com/"&gt;Eric Drexler&lt;/a&gt;'s book &lt;a href="http://books.google.com/books/about/Nanosystems.html?id=BhHEgnISSRYC"&gt;Nanosystems&lt;/a&gt;, read the section on &lt;a href="http://pubs.acs.org/doi/abs/10.1021/ja00467a001"&gt;MM2&lt;/a&gt;, and understood it well enough to implement it in code. That was a lot of fun to work on, and as I've watched web technology progress, I've occasionally thought about taking another stab at it. I am now in the process of doing that, as some parts have gotten easier, others have gotten faster, and some have gotten just plain interesting. &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt;, despite a few warts, is charming, and widespread deployment of &lt;a href="http://en.wikipedia.org/wiki/HTML5"&gt;HTML5&lt;/a&gt; is a big help too.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Molecular_mechanics"&gt;Molecular modeling approaches like MM2&lt;/a&gt; generally work by computing potential energy as a function of the relative positions of atoms within a molecule. This is done by decomposing the potential energy into &lt;a href="http://books.google.com/books?id=51mEb9dfg8YC&amp;amp;pg=PA76&amp;amp;lpg=PA76&amp;amp;dq=mm2+angle+term&amp;amp;source=bl&amp;amp;ots=teI5KI_pFW&amp;amp;sig=tkhsEbuTf8YBabAEnSmU3XMoYMo&amp;amp;hl=en&amp;amp;ei=ybAuTovXLJTqgQf1y7iwAQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=8&amp;amp;ved=0CEkQ6AEwBw#v=onepage&amp;amp;f=false"&gt;a series of terms&lt;/a&gt;, relating to the lengths of chemical bonds, the angles between bonds that share a single atom, or the &lt;a href="http://en.wikipedia.org/wiki/Dihedral_angle#Dihedral_angles_of_four_atoms"&gt;dihedral angle&lt;/a&gt; between two bonds linked by a third bond. These terms are parameterized based on the elements and hybridizations of the atoms involved. Force contributions of these terms can be computed independently and summed together to find the forces acting on each of the atoms. This is necessarily a simplification, and more accurate &lt;a href="http://en.wikipedia.org/wiki/Density_functional_theory"&gt;approaches&lt;/a&gt; exist involving solutions to the Schrodinger wave equation describing probabilistic locations of electrons and nuclei. But the simple mechanical approach is adequate for getting a sense of the molecule's general shape and how it perturbs over familiar temperature ranges.&lt;br /&gt;&lt;br /&gt;For a potential energy function &lt;i&gt;E(p)&lt;/i&gt; relating to some geometric parameter &lt;i&gt;p&lt;/i&gt;, we can use the &lt;a href="http://en.wikipedia.org/wiki/Chain_rule"&gt;chain rule&lt;/a&gt; to get the &lt;a href="http://en.wikipedia.org/wiki/Force#Potential_energy"&gt;force&lt;/a&gt; on an atom at position &lt;i&gt;(x,y,z)&lt;/i&gt;:&lt;br /&gt;&lt;blockquote&gt;(fx, fy, fz) = -E'(p) (∂p/∂x, ∂p/∂y, ∂p/∂z)&lt;/blockquote&gt;where&amp;nbsp;&lt;i&gt;∂p/∂x&lt;/i&gt;&amp;nbsp;is the notation for the &lt;a href="http://en.wikipedia.org/wiki/Partial_derivative"&gt;partial derivative&lt;/a&gt; of &lt;i&gt;p&lt;/i&gt; in the &lt;i&gt;x&lt;/i&gt; direction.&amp;nbsp;The forms of the potential energy functions are pretty straightforward (&lt;a href="http://en.wikipedia.org/wiki/Morse_potential"&gt;1&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Lennard-Jones_potential"&gt;2&lt;/a&gt;), and taking their derivatives is not difficult. The remaining trick is to determine the partial derivatives of parameters with respect to &lt;i&gt;x&lt;/i&gt;, &lt;i&gt;y&lt;/i&gt;, and &lt;i&gt;z&lt;/i&gt;. Let's consider a simple case where the parameter is the distance between two atoms at positions (&lt;i&gt;ux&lt;/i&gt;, &lt;i&gt;uy&lt;/i&gt;, &lt;i&gt;uz&lt;/i&gt;) and (&lt;i&gt;vx&lt;/i&gt;, &lt;i&gt;vy&lt;/i&gt;, &lt;i&gt;vz&lt;/i&gt;). Then the distance is &lt;i&gt;r&lt;/i&gt; where&lt;br /&gt;&lt;blockquote&gt;r&lt;sup&gt;2&lt;/sup&gt; = (ux - vx)&lt;sup&gt;2&lt;/sup&gt; + (uy - vy)&lt;sup&gt;2&lt;/sup&gt; + (uz - vz)&lt;sup&gt;2&lt;/sup&gt;&lt;/blockquote&gt;and taking partial differentials with respect to &lt;i&gt;ux&lt;/i&gt; yields&lt;br /&gt;&lt;blockquote&gt;2r ∂r = 2 (ux - vx) ∂ux&lt;br /&gt;&lt;br /&gt;∂r/∂ux = (ux - vx) / r&lt;/blockquote&gt;The same operations with &lt;i&gt;uy&lt;/i&gt; and &lt;i&gt;uz&lt;/i&gt; tell us that the force vector acting on the first atom is &lt;b&gt;&lt;i&gt;f&lt;/i&gt;&lt;/b&gt; = -&lt;i&gt;E'(r) &lt;b&gt;r&lt;/b&gt; / r&lt;/i&gt; where the direction of&amp;nbsp;&lt;b&gt;&lt;i&gt;r&lt;/i&gt;&lt;/b&gt;&amp;nbsp;is from the &lt;i&gt;&lt;b&gt;v&lt;/b&gt;&lt;/i&gt; atom to the &lt;i&gt;&lt;b&gt;u&lt;/b&gt;&lt;/i&gt; atom, and the inverse for the second atom. Here, boldface denotes a vector quantity.&lt;br /&gt;&lt;br /&gt;It's usually easy to apply some geometric intuition and determine a unit vector in the direction of greatest change&amp;nbsp;for a parameter&amp;nbsp;&lt;i&gt;p&lt;/i&gt;&amp;nbsp;(the &lt;a href="http://en.wikipedia.org/wiki/Gradient"&gt;gradient&lt;/a&gt;&amp;nbsp;of &lt;i&gt;p&lt;/i&gt; with respect to a particular atom's position). For an angle &lt;i&gt;θ&lt;/i&gt; involving three atoms at positions &lt;b&gt;&lt;i&gt;u&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;v&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;w&lt;/i&gt;&lt;/b&gt;, with &lt;b&gt;&lt;i&gt;v&lt;/i&gt;&lt;/b&gt; being the vertex, the gradient for &lt;b&gt;&lt;i&gt;u&lt;/i&gt;&lt;/b&gt; lies in the plane and is perpendicular to (&lt;i&gt;&lt;b&gt;u&lt;/b&gt; - &lt;b&gt;v&lt;/b&gt;&lt;/i&gt;), pointing away from the third atom. Then the vector&amp;nbsp;&lt;i&gt;(∂θ/∂x, ∂θ/∂y, ∂θ/∂z)&lt;/i&gt; is in the same direction as the gradient unit vector, and it's necessary only to determine a scaling factor. That can be obtained by doing a little trigonometry to determine that a teeny move of distance &lt;i&gt;δ&lt;/i&gt; in that direction will produce a parameter change &lt;i&gt;dθ&lt;/i&gt;, and then the magnitude of the force is &lt;i&gt;-E'(θ) dθ/δ&lt;/i&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5311336196454706126?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5311336196454706126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5311336196454706126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5311336196454706126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5311336196454706126'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/07/molecular-dynamics-and-force-fields.html' title='Molecular dynamics and force fields'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4494550540448102151</id><published>2011-06-19T12:15:00.000-07:00</published><updated>2011-06-19T13:30:28.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='economics'/><category scheme='http://www.blogger.com/atom/ns#' term='clean energy'/><category scheme='http://www.blogger.com/atom/ns#' term='social goals'/><category scheme='http://www.blogger.com/atom/ns#' term='residential solar'/><title type='text'>Thinking about going solar</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I answered an ad by an outfit called &lt;a href="http://1bog.org/"&gt;One Block Off the Grid&lt;/a&gt;&amp;nbsp;(1BOG) which organizes the installation of solar panels on people's roofs. When I say "organize", I mean not only that they take care of various complex logistical issues including lining up a &lt;a href="http://www.nabcep.org/"&gt;NABCEP&lt;/a&gt;-certified installer, but also that they try to &lt;a href="http://www.youtube.com/watch?v=R3ybvRm9HY8"&gt;consolidate system purchases&lt;/a&gt; to bring costs down. Over the past couple of years this has become big business in the U.S. because of state and federal government incentives encouraging installation.&lt;br /&gt;&lt;br /&gt;The 1BOG folks sent me a proposal with numbers in it, and I have 30 days to make a decision during which the proposed price is guaranteed. I also spoke briefly with &lt;a href="http://www.solarflair.com/"&gt;SolarFlair&lt;/a&gt;, a similar outfit here in my town, that does the same sort of purchase consolidation and does the installation themselves. Since my 30 days is nearly expired, I'm hoping to drop into the SolarFlair&amp;nbsp;office some time this week and talk numbers with them.&lt;br /&gt;&lt;br /&gt;In my own state of Massachusetts, &lt;a href="http://www.dsireusa.org/incentives/incentive.cfm?Incentive_Code=MA98F&amp;amp;re=1&amp;amp;ee=1"&gt;the situation&lt;/a&gt; is that people with solar panels produce SRECs (&lt;a href="http://en.wikipedia.org/wiki/Solar_Renewable_Energy_Certificates"&gt;wikipedia&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=UcFytW1q1I8"&gt;explanatory video&lt;/a&gt;) worth around $500 each time the solar panels produce a megawatt-hour.&lt;br /&gt;&lt;blockquote&gt;Massachusetts' renewables portfolio standard (RPS) requires each regulated electricity supplier/provider serving retail customers in the state to include in the electricity it sells 15% qualifying renewables by December 31, 2020...&amp;nbsp;Solar Renewable Energy Certificates (SRECs) represent the renewable attributes of solar generation, bundled in minimum denominations of one megawatt-hour (MWh) of production. Massachusetts' Solar Carve-Out provides a means for SRECs to be created and verified, and allows electric suppliers to buy these certificates in order to meet their solar RPS requirements. All electric suppliers must use SRECs to demonstrate compliance with the RPS. The price of SRECs is determined primarily by market availability, although the DOER has created a certain amount of market stability by establishing a state Solar Credit Clearinghouse Auction (where prices are fixed at $300/MWh), as well as the Solar Alternative Compliance Payment (SACP) for the state RPS (set at $550/MWh for 2011). The Solar Credit Clearinghouse will only be utilized if or when SREC generators cannot sell their SRECs on the open market; the fixed price of $300/MWh effectively acts as price floor. The SACP, on the other hand acts, acts as a ceiling on the value of SRECs because it is the per-MWh payment that electricity suppliers must make if they fail to obtain enough SRECs to cover their RPS obligation.&lt;/blockquote&gt;There is a &lt;a href="http://www.dsireusa.org/incentives/incentive.cfm?Incentive_Code=US37F"&gt;federal tax credit&lt;/a&gt; of 30% on the cost of installation. I don't know if that's factored into the prices I've been quoted, and maybe I'd need to pay that myself upfront until I get the following year's federal tax rebate.&lt;br /&gt;&lt;br /&gt;The 1BOG proposal offers options either to lease the system from 1BOG, or to pay for it outright at a cost of about $25K. I went to the credit union and applied for a 5-year fixed rate $25K home equity loan, with monthly payments of about $450. 1BOG proposes a system to create about 5.5 kW peak, and they are guessing that averages out to about 700 watts continuous, which is about 6 megawatts per year, for a yearly SREC income of $3200. The systems saves me about $100 per month on the electric bill, and when all the dust settles, my monthly expense is about the same as it is currently.&lt;br /&gt;&lt;br /&gt;Five years later, the loan is paid off, the solar panels are my property free and clear, SREC income is reduced but not zero, and my electric bill is still substantially reduced or absent. And I will have set a good example for friends and neighbors that one can reduce one's carbon footprint without unreasonable financial hardship.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4494550540448102151?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4494550540448102151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4494550540448102151' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4494550540448102151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4494550540448102151'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/06/thinking-about-going-solar.html' title='Thinking about going solar'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5366729180947350064</id><published>2011-06-13T19:39:00.000-07:00</published><updated>2011-06-13T19:39:19.241-07:00</updated><title type='text'>A somewhat half-baked embedded OS idea</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I mentioned in &lt;a href="http://willware.blogspot.com/2011/06/of-microcontrollers-and-operating.html"&gt;my previous post&lt;/a&gt; that I had spent some time porting &lt;a href="http://www.freertos.org/"&gt;FreeRTOS&lt;/a&gt; to the &lt;a href="http://www.atmel.com/dyn/products/devices.asp?category_id=163&amp;amp;family_id=605&amp;amp;subfamily_id=1586"&gt;SAM7&lt;/a&gt; architecture before realizing my purpose was better served by looking for &lt;a href="http://freertos.svn.sourceforge.net/viewvc/freertos/trunk/Demo/CORTEX_LPC1768_GCC_RedSuite/src/"&gt;an existing port&lt;/a&gt;. But in the process I gave some thought to what kind of alternative to FreeRTOS I might cook up, if somehow the porting exercise didn't go well. I haven't thought through every detail completely, and I wouldn't trust myself to anticipate every issue until I'd actually coded the thing, which I haven't yet. My sketchy design is based on two ideas.&lt;br /&gt;&lt;br /&gt;An aspect of &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; that fascinates me is that everything runs in a single thread (an idea nicely described &lt;a href="http://ejohn.org/blog/how-javascript-timers-work/"&gt;here&lt;/a&gt;). Each function is the sole owner of the processor (at least as concerns the JavaScript world) until it completes, and there will be no unexpected modification of variables or data structures. No&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Lock_(computer_science)"&gt;locks&lt;/a&gt; or&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Mutual_exclusion"&gt;mutexes&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Semaphore_(programming)"&gt;semaphores&lt;/a&gt; or "synchronized" keywords, no &lt;a href="http://en.wikipedia.org/wiki/Concurrent_computing"&gt;threading headaches&lt;/a&gt;. The price of this simplicity is that functions often are &lt;a href="http://en.wikipedia.org/wiki/Event_(computing)"&gt;event handlers&lt;/a&gt; and must be written to do their work quickly and get out of the way so other events can be handled.&lt;br /&gt;&lt;br /&gt;The second idea is something I've seen when coding applications for both &lt;a href="http://en.wikipedia.org/wiki/Android_(operating_system)"&gt;Android&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/IOS_(Apple)"&gt;iOS&lt;/a&gt;. Communication between threads is carefully controlled. Slow operations are &lt;a href="http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#WorkerThreads"&gt;begun by event handlers&lt;/a&gt; in a UI thread, and when the work is done, another handler runs in the UI thread, supplied with any relevant results from the slow operation. Within the handler thread, JavaScript's protocol of running only one handler at a time to completion is observed. Where in Android one would invoke a &lt;a href="http://developer.android.com/reference/java/lang/Runnable.html"&gt;Runnable&lt;/a&gt; object using a &lt;a href="http://developer.android.com/reference/android/view/View.html#post(java.lang.Runnable)"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;View.post()&lt;/span&gt;&lt;/a&gt; call, I would be inclined to create a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;postEvent(event,arg)&lt;/span&gt; function since I'd plan on doing things in C, and where presumably "arg" is pointing to a &lt;a href="http://en.wikipedia.org/wiki/Struct_(C_programming_language)"&gt;struct&lt;/a&gt; containing whatever information needs to be retrieved from the slow operation. That way, there is never a point in time where the slow operation and the completion handler are running concurrently, and again there is no need for arbitration of data access.&lt;br /&gt;&lt;br /&gt;Flinging structs around requires&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Malloc"&gt;malloc&lt;/a&gt; and free. That worries me a little because &lt;a href="http://en.wikipedia.org/wiki/Fragmentation_(computer)"&gt;fragmentation&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Memory_leak"&gt;memory leaks&lt;/a&gt;, and low memory are all likely to be more troublesome on an embedded microcontroller than a desktop computer, and I'm not a memory allocation guru. Maybe there's some way to avoid memory allocation altogether, or maybe it will be less of a problem than I fear.&lt;br /&gt;&lt;br /&gt;The general idea would be to implement a single handler thread and a fixed pool of worker threads. Worker threads idle until assigned a task; a handler can post a task to the worker thread pool where it will be picked up as soon as a worker thread is available. There might be an event fired when the number of available worker threads went from zero to non-zero; I haven't decided yet whether that's useful.&lt;br /&gt;&lt;br /&gt;There would be events for various hardware stimuli: pushbuttons pressed, UART character received, Ethernet byte received, timer gone off, things like that. There would also be user-definable events which would include task completions. There would be some simple way to associate handler functions with events.&lt;br /&gt;&lt;br /&gt;That's basically as far as I've gotten with it. Obviously there's a good deal left to do, and I won't really feel good about it until I see it doing something interesting and useful on a real microcontroller.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5366729180947350064?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5366729180947350064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5366729180947350064' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5366729180947350064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5366729180947350064'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/06/somewhat-half-baked-embedded-os-idea.html' title='A somewhat half-baked embedded OS idea'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3330242200004337647</id><published>2011-06-13T15:37:00.000-07:00</published><updated>2011-08-14T18:44:24.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='LPC1768'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='ARM architecture'/><title type='text'>Of microcontrollers and operating systems</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In recent weeks I've put some effort into &lt;a href="http://en.wikipedia.org/wiki/User:WillWare/Angstrom_and_Beagleboard"&gt;working with a Beagleboard running Angstom Linux&lt;/a&gt;. The Beagleboard has an &lt;a href="http://en.wikipedia.org/wiki/Texas_Instruments_OMAP"&gt;OMAP3530 processor&lt;/a&gt;, a ridiculously over-powered thing. It's cool to be running Linux on something you can attack with a soldering iron. But as I looked at my intended application and the price of the Beagleboard, and the &lt;a href="http://jkridner.s3.amazonaws.com/esc/BEAGLE_ESC_4.ppt"&gt;hoops they jump through&lt;/a&gt; to manufacture the Beagleboard, I started to wonder if more conventional weapons might be sufficient to win the day.&lt;br /&gt;&lt;br /&gt;I'd &lt;a href="http://willware.blogspot.com/search/label/SAM7"&gt;blogged in the past&lt;/a&gt; about the AT91SAM7, another family of ARM-based chips that are a little less over-powered, so I wondered, would they work for this? My first thought was to use Angstrom Linux on the SAM7. I found that nobody had done it, and digging deeper to find out why they hadn't, I was reminded that Linux requires a &lt;a href="http://en.wikipedia.org/wiki/Memory_management_unit"&gt;MMU&lt;/a&gt; and the SAM7 doesn't have one. Neither of these was a surprising piece of information, and I was probably dimly aware of both, but had never consciously connected them.&lt;br /&gt;&lt;br /&gt;The reason Linux needs an MMU is because it runs multiple processes in separate memory spaces, so that one process can't crash another by overwriting its memory. This requires remapping from virtual memory addresses to physical addresses. That's most of what an MMU does.&lt;br /&gt;&lt;br /&gt;It's shameful to admit, but I had unthinkingly assumed that 32-bit processors would necessarily run something like Linux, merely by virtue of being 32-bit processors. This was the result of having grown up with 8-bit processors and thinking of 32-bit processors as "big" and "complicated" and a little "scary". They are in fact all those things, but we still need to keep our wits in their presence.&lt;br /&gt;&lt;br /&gt;Casting about for an operating system that might be more SAM7-friendly, I came across &lt;a href="http://www.freertos.org/"&gt;FreeRTOS&lt;/a&gt;. I started puttering around with a FreeRTOS port for the SAM7, and after banging on that a while it crossed my mind to think that there might be some other ARM7 chip for which a FreeRTOS port already existed so I wouldn't have to do the port myself. A little investigation in this direction led me to the &lt;a href="http://ics.nxp.com/products/lpc1000/lpc17xx/"&gt;LPC1768&lt;/a&gt;&amp;nbsp;(&lt;a href="http://www.nxp.com/#/pip/pip=[pip=LPC1768FBD100]%7Cpp=%5Bt=pip,i=LPC1768FBD100%5D"&gt;overview&lt;/a&gt;, &lt;a href="http://ics.nxp.com/products/lpc1000/datasheet/lpc1763.lpc1764.lpc1765.lpc1766.lpc1767.lpc1768.lpc1769.pdf"&gt;datasheet&lt;/a&gt;, &lt;a href="http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc17xx.pdf"&gt;user's manual&lt;/a&gt;, &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=568-4796-ND"&gt;Digikey listing&lt;/a&gt;) an inexpensive ARM7 chip with lots of flash and RAM, an Ethernet controller, USB controllers for both host mode and device mode, buckets and buckets of GPIO pins, and a comfortably higher number of MIPS than the SAM7 family.&amp;nbsp;The LPC1768 has an ARM Cortex M3 core (&lt;a href="http://www.arm.com/products/processors/cortex-m/cortex-m3.php"&gt;overview&lt;/a&gt;, &lt;a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/index.html"&gt;user's guide&lt;/a&gt;).&lt;br /&gt;&lt;a href="http://dlnmh9ip6v2uc.cloudfront.net/images/products/09931-01_i_ma.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://dlnmh9ip6v2uc.cloudfront.net/images/products/09931-01_i_ma.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;So what are our hardware development options here? &lt;a href="http://www.sparkfun.com/"&gt;Sparkfun&lt;/a&gt; provides a &lt;a href="http://www.sparkfun.com/products/9931"&gt;nice little board&lt;/a&gt; for only $50. It has tons of pins, sanely spaced at 0.1", and a JTAG connector on one end and a mini-USB on the other. It does require a power supply but that's not unreasonable. It has two pushbuttons (one a reset) and an LED. While I heartily encourage anybody to buy this board, I ended up buying &lt;a href="http://www.aliexpress.com/fm-store/312788/210878264-443687298/Free-Shipping-ARM-Cortex-M3-LPC1700-LPC1768-core-board-mini-board-.html"&gt;a different board&lt;/a&gt; (which, time will tell, I may regret) because it was available on eBay.&lt;br /&gt;&lt;br /&gt;I'm hoping to see the board in about a week, and I'll try to &lt;a href="http://freertos.svn.sourceforge.net/viewvc/freertos/trunk/Demo/CORTEX_LPC1768_GCC_RedSuite/src/"&gt;get FreeRTOS running on it&lt;/a&gt; with reasonable haste. Hopefully it will all work out nicely and I'll get to do a lot of blogging about it. The LPC1768 is really an interesting chip with a lot of on-chip peripherals, and I'd expect that would be a good amount of fun.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3330242200004337647?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3330242200004337647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3330242200004337647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3330242200004337647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3330242200004337647'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/06/of-microcontrollers-and-operating.html' title='Of microcontrollers and operating systems'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2873998611320144540</id><published>2011-05-06T14:47:00.000-07:00</published><updated>2011-12-17T19:54:35.587-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SAM7'/><title type='text'>Beagleboard, OMAP, and Angstrom</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://beagleboard.org/static/images/2708776217_9f660db58d_o_d.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="208" src="http://beagleboard.org/static/images/2708776217_9f660db58d_o_d.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I've been &lt;a href="http://en.wikipedia.org/wiki/User:WillWare/Angstrom_and_Beagleboard"&gt;doing a lot lately&lt;/a&gt; at work with the BeagleBoard, shown at right. It uses an &lt;a href="http://en.wikipedia.org/wiki/Texas_Instruments_OMAP"&gt;OMAP processor&lt;/a&gt; from Texas Instruments. The OMAP family is &lt;a href="http://en.wikipedia.org/wiki/ARM_architecture"&gt;ARM-based&lt;/a&gt; and includes a &lt;a href="http://en.wikipedia.org/wiki/Digital_signal_processor"&gt;DSP&lt;/a&gt; core, along with an intimidatingly rich set of &lt;a href="http://focus.ti.com/docs/prod/folders/print/omap3530.html"&gt;on-chip peripherals&lt;/a&gt;. The OMAP is built with a &lt;a href="http://en.wikipedia.org/wiki/Package_on_package"&gt;package-on-package&lt;/a&gt; arrangement so that the RAM &lt;a href="http://en.wikipedia.org/wiki/Die_(integrated_circuit)"&gt;die&lt;/a&gt; sits right on top of the processor die.&lt;br /&gt;&lt;br /&gt;The board typically costs about $150 in the United States. You'll need a few things to work with it: an SD card, a USB adapter to write the SD card, a USB-to-serial adapter to communicate with the board, a 5-volt power supply, and later (maybe sooner) you'll want a &lt;a href="http://www.amazon.com/USB-2-0-3-PORT-Hub-Ethernet/dp/B002LITGWC"&gt;USB hub with a RJ-45 ethernet jack&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/8/88/BeagleboardWorking20110429.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="188" src="http://upload.wikimedia.org/wikipedia/commons/8/88/BeagleboardWorking20110429.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;A minimal setup is shown at right. This is just enough to connect to the board over a serial port (115.2 kbaud, 8N1, no flow control) and verify that you get a working Linux shell. The Angstrom Linux distribution has a bit of a learning curve but it seems well thought out.&lt;br /&gt;&lt;br /&gt;I'm thinking of trying Angstrom on one of the &lt;a href="http://www.sparkfun.com/search/results?term=at91sam7s&amp;amp;what=products"&gt;AT91SAM7S boards from Sparkfun&lt;/a&gt; when I get a little spare time. I think that would work, and it would really rock to see full-blown Linux running on a $36 board. I don't know how I'd handle networking in that kind of situation, though.&lt;br /&gt;&lt;br /&gt;Update: I am reminded that the SAM7S lacks an MMU so it can't run Angstrom. There is a different Linux distribution called &lt;a href="http://en.wikipedia.org/wiki/%CE%9CClinux"&gt;uCLinux&lt;/a&gt;&amp;nbsp;(see &lt;a href="http://uclinux.org/"&gt;uclinux.org&lt;/a&gt;) that would work, maybe I'll try that some day.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2873998611320144540?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2873998611320144540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2873998611320144540' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2873998611320144540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2873998611320144540'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/05/beagleboard-omap-and-angstrom.html' title='Beagleboard, OMAP, and Angstrom'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total><georss:featurename>Back Bay East, Boston, MA, USA</georss:featurename><georss:point>42.349756955270045 -71.07981466575927</georss:point><georss:box>42.34513445527004 -71.08702866575928 42.35437945527005 -71.07260066575927</georss:box></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5172253728276649049</id><published>2011-04-22T10:19:00.000-07:00</published><updated>2011-05-14T19:34:14.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='China'/><title type='text'>Chinese government hackers may be attacking Amazon's cloud service?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ucEOsFjfoec/TbG4_obw1mI/AAAAAAAAA44/cD-UvNedubM/s1600/ai-weiwei.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="152" src="http://1.bp.blogspot.com/-ucEOsFjfoec/TbG4_obw1mI/AAAAAAAAA44/cD-UvNedubM/s200/ai-weiwei.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;A friend recently received the following email from the website &lt;a href="http://www.change.org/petitions/call-for-the-release-of-ai-weiwei"&gt;Change.org&lt;/a&gt;&amp;nbsp;which is posting a petition for the release of artist Ai Weiwei, a critic of some of the policies of the Chinese government. In about the last 24 hours there have been a lot of attacks on Amazon's EC2 cloud service, bringing down Change.org and a lot of other unrelated websites. There is conjecture that these attacks are from hackers working for the Chinese government. Here's the email my friend received:&lt;br /&gt;&lt;blockquote&gt;Dear [friend of Will],&lt;br /&gt;&lt;br /&gt;The petition demanding the release of Chinese artist Ai Weiwei has nearly 100,000 signatures.&lt;br /&gt;&lt;br /&gt;Here's how we know it's really gotten Beijing’s attention: For the past three days, the Change.org website has been repeatedly targeted by cyber attacks coming from China that aim to bring our site down, which would keep people from signing this petition.&lt;br /&gt;&lt;br /&gt;Our engineers are working around the clock to fend off the attacks and, for now, the petition is still up.&lt;br /&gt;&lt;br /&gt;We need to let the Chinese government know that illegal tactics from within its borders won't stop the mounting pressure on it to release Weiwei. If you haven't already, please join nearly 100,000 Change.org members and add your name to the petition now:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.change.org/petitions/call-for-the-release-of-ai-weiwei?alert_id=dpdNHjKNRO_RlLWixieHN&amp;amp;utm_source=action_alert&amp;amp;utm_medium=email"&gt;http://www.change.org/petitions/call-for-the-release-of-ai-weiwei?alert_id=dpdNHjKNRO_RlLWixieHN&amp;amp;utm_source=action_alert&amp;amp;utm_medium=email&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To recap: Acclaimed dissident artist Ai Weiwei -- who helped design the famed “Bird’s Nest” stadium for China’s Olympics -- was arrested on April 3rd by Chinese security forces at the Beijing airport. His office and studio have been ransacked, and no one has heard from him since.&lt;br /&gt;&lt;br /&gt;The international art community banded together, demanding his release -- and the directors of more than twenty leading museums (including the Tate Modern, Museum of Modern Art, and the Guggenheim) started a petition on Change.org that has garnered worldwide attention, including in the New York Times, LA Times, and Guardian. &lt;br /&gt;&lt;br /&gt;The campaign has helped to give rise to an international outcry. Political leaders around the world are calling for Weiwei's release and activists have organized peaceful protests at Chinese embassies and consulates.&lt;br /&gt;&lt;br /&gt;Though China is desperate to silence its critics, the pressure to free Weiwei continues to grow. You can help by signing the petition now:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.change.org/petitions/call-for-the-release-of-ai-weiwei?alert_id=dpdNHjKNRO_RlLWixieHN&amp;amp;utm_source=action_alert&amp;amp;utm_medium=email"&gt;http://www.change.org/petitions/call-for-the-release-of-ai-weiwei?alert_id=dpdNHjKNRO_RlLWixieHN&amp;amp;utm_source=action_alert&amp;amp;utm_medium=email&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Autocratic governments know that the internet is a democratizing force, and they'll do everything they can to suppress online activism. Know that we stand with you for change, and that we will continue to fight to make sure your voice can be heard.&lt;br /&gt;&lt;br /&gt;- Patrick and the Change.org team&lt;br /&gt;&lt;br /&gt;P.S. Due to these repeated attacks, our site may be slower than usual or unavailable at times over the next few days. Thanks for your patience.&lt;/blockquote&gt;If it's true that the EC2 outage is the work of Chinese government hackers, it's a little scary. It means they are capable (like Al Qaeda) of attacking assets on American soil.&lt;br /&gt;&lt;br /&gt;It might have been a stupid move, becuase they inconvenienced some of the better-funded Internet companies in America, which have access to some of the best online forensics experts in the world, so there's a good chance the hackers will be identified. Maybe future attacks of this sort can be prevented.&lt;br /&gt;&lt;br /&gt;Interesting times. We can only hope that Ai Weiwei is free soon and able to speak freely.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5172253728276649049?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5172253728276649049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5172253728276649049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5172253728276649049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5172253728276649049'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/04/chinese-government-hackers-may-be.html' title='Chinese government hackers may be attacking Amazon&apos;s cloud service?'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ucEOsFjfoec/TbG4_obw1mI/AAAAAAAAA44/cD-UvNedubM/s72-c/ai-weiwei.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3488075987266603858</id><published>2011-03-21T10:02:00.000-07:00</published><updated>2011-03-21T11:10:02.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='economics'/><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='China'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>March 2011 trip to Shanghai, Suzhou</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm6.static.flickr.com/5178/5541994166_7a93fbd1b3_b.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="191" src="http://farm6.static.flickr.com/5178/5541994166_7a93fbd1b3_b.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Last week I was in Suzhou, a city a little west of Shanghai, and took some &lt;a href="http://www.flickr.com/photos/28098191@N00/sets/72157626179586839/"&gt;photos&lt;/a&gt;. Very interesting place with a lot of rather ancient history. I liked very much the Humble Administrator's Garden. It's quite large, with several small buildings and waterways and paths, and very pretty as you can see here.&lt;br /&gt;&lt;br /&gt;Suzhou is a very pleasant place. I felt quite safe walking around after dark. There are lots of little outdoor markets. I stopped at one to get some squid on a stick, which was spicy and tasty. My photo of the squid-on-a-stick guy is unfortunately a little blurry.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm6.static.flickr.com/5140/5541413629_ef675726a6_b.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://farm6.static.flickr.com/5140/5541413629_ef675726a6_b.jpg" width="191" /&gt;&lt;/a&gt;&lt;/div&gt;I'm still kind of tired with jet lag. When my energy level is a little higher I will add more stuff to this. Generally it left me with a very positive impression of mainland China, which was a surprise as I'd been told to expect it to be a bit backward culturally. We were there for electronics manufacturing and there was certainly plenty of that, and plenty of heavy industry in the Shanghai area. Lots of construction, lots of big cranes all over the place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3488075987266603858?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3488075987266603858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3488075987266603858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3488075987266603858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3488075987266603858'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/03/march-2011-trip-to-shanghai-suzhou.html' title='March 2011 trip to Shanghai, Suzhou'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5178/5541994166_7a93fbd1b3_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-9061600319121410286</id><published>2011-03-09T21:20:00.000-08:00</published><updated>2011-03-09T21:33:25.109-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Android apps'/><category scheme='http://www.blogger.com/atom/ns#' term='tablet'/><category scheme='http://www.blogger.com/atom/ns#' term='SAM7'/><category scheme='http://www.blogger.com/atom/ns#' term='Bluetooth'/><title type='text'>AT91SAM7S and Android help you bang bits</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.aptecelectronics.com/images/tek2430A.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://www.aptecelectronics.com/images/tek2430A.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;There are plenty of test instruments (&lt;a href="http://www.amazon.com/Hantek-Based-Digital-Storage-Oscilloscope/dp/B0036FZRU4"&gt;oscilloscopes&lt;/a&gt;, &lt;a href="http://www.sparkfun.com/products/8938"&gt;logic analyzers&lt;/a&gt;, &lt;a href="http://www.amazon.com/Ubiquiti-Spectrum-Analyzer-External-Connector/dp/B002YKU2RA"&gt;spectrum analyzers&lt;/a&gt;, etc) where you plug some hardware into your laptop's USB port, and the laptop screen shows a display that would have appeared on a cathode-ray tube in decades past. It's very cool that we can do this, and these USB instruments are much more affordable (and much much easier to carry) than the old-school stuff that I grew up with.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-MpSNux3EWbw/TXhbzIZIXvI/AAAAAAAAA0A/atuqTz2sR1w/s1600/bbbhardware.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="https://lh5.googleusercontent.com/-MpSNux3EWbw/TXhbzIZIXvI/AAAAAAAAA0A/atuqTz2sR1w/s200/bbbhardware.png" width="120" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The BluetoothBitBang is a gadget that comprises two boards from Sparkfun Electronics. One is a &lt;a href="http://www.sparkfun.com/products/614"&gt;AT91SAM7S-64 header board&lt;/a&gt;, the other is a &lt;a href="http://www.sparkfun.com/products/9977"&gt;Bluetooth serial interface&lt;/a&gt;. You can see there are also some AA batteries in there to power the thing. This connects over Bluetooth to your phone, running a &lt;a href="https://market.android.com/details?id=net.willware.bluetoothbitbang"&gt;free app&lt;/a&gt; available on the Android Market. You can use buttons on your phone's screen to set or clear six output bits, and you can read six input bits. The two boards cost $71, and if you're willing to do some fine soldering and use the &lt;a href="http://www.sparkfun.com/products/9913"&gt;bare version&lt;/a&gt; of the Bluetooth module, you can knock off twenty bucks. If I'm energetic, maybe I'll see about putting together some kind of significantly cost-reduced version. That might depend on the level of interest I see in the thing. I've posted a &lt;a href="http://en.wikipedia.org/wiki/User:WillWare/BluetoothBitBang"&gt;Wikipedia page&lt;/a&gt; with a lot more information, including the &lt;a href="http://en.wikipedia.org/wiki/File:WillWareBluetoothBitBangSchematic.png"&gt;schematic&lt;/a&gt; of how the boards are wired up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-Ck9Of7yXRGU/TXhfK4e7AuI/AAAAAAAAA0E/Oo52pTugdxQ/s1600/bbbscreen.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="https://lh3.googleusercontent.com/-Ck9Of7yXRGU/TXhfK4e7AuI/AAAAAAAAA0E/Oo52pTugdxQ/s200/bbbscreen.png" width="120" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The &lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_239735576"&gt;&lt;/span&gt;SAM7 firmware&lt;span id="goog_239735577"&gt;&lt;/span&gt;&lt;/a&gt; and the Android app &lt;a href="https://github.com/wware/stuff/tree/master/android_apps/BluetoothBitBang"&gt;source code&lt;/a&gt; are both publicly available on Github.&amp;nbsp;I'm an Android fan, but the Bluetooth protocol for talking to the board is quite simple and if anybody is interested in writing an iPhone or BlackBerry app for the thing, I'll be happy to provide some support to make that relatively easy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think this whole thing gets a lot more interesting when (1) you move from a phone to an Android tablet, which will be cost-effective as tablets flood the market over the next year or two, and (2) start building much more sophisticated data acquisition front-ends. This is just about the simplest acquisition hardware I could imagine that would still be worth the effort of building and debugging it, but no reason one couldn't do a Bluetooth-connected oscilloscope or logic analyzer.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-9061600319121410286?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/9061600319121410286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=9061600319121410286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9061600319121410286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9061600319121410286'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/03/at91sam7s-and-android-help-you-bang.html' title='AT91SAM7S and Android help you bang bits'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-MpSNux3EWbw/TXhbzIZIXvI/AAAAAAAAA0A/atuqTz2sR1w/s72-c/bbbhardware.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3952799284047329267</id><published>2011-03-01T10:05:00.000-08:00</published><updated>2011-03-14T09:14:24.552-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='SAM7'/><category scheme='http://www.blogger.com/atom/ns#' term='Bluetooth'/><title type='text'>Sparkfun's Bluetooth serial-port board</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://bit.ly/gejVLX" imageanchor="1" style="clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="119" src="http://farm6.static.flickr.com/5018/5526074091_083cbfc363.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;This was preparation for the project in the&amp;nbsp;&lt;a href="http://willware.blogspot.com/2011/03/at91sam7s-and-android-help-you-bang.html"&gt;next post&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;I've been tinkering with the BTM-182 Bluetooth serial port module, available&amp;nbsp;from &lt;a href="http://www.sparkfun.com/"&gt;Sparkfun&lt;/a&gt;&amp;nbsp;as either a &lt;a href="http://www.sparkfun.com/products/9913"&gt;raw module&lt;/a&gt; or a convenient&amp;nbsp;&lt;a href="http://www.sparkfun.com/products/9977"&gt;breakout board&lt;/a&gt;. I've set the baud rate to 115.2 kbaud and connected it&amp;nbsp;to a USB serial port (appearing as /dev/ttyUSB0 on my Linux netbook) and&amp;nbsp;getting power from a &lt;a href="http://www.hobbyengineering.com/H1517.html"&gt;USBMOD4 board&lt;/a&gt; from &lt;a href="http://www.hobbyengineering.com/"&gt;Hobby Engineering&lt;/a&gt;, whose only&amp;nbsp;purpose here is to provide 3.3 volts. The serial port uses a RS-232 level&amp;nbsp;shifter from Sparkfun.&lt;br /&gt;&lt;br /&gt;I wrote some &lt;a href="https://github.com/wware/stuff/blob/master/bluetooth-fun/btcalc.py"&gt;Python code&lt;/a&gt; that runs on the Linux netbook. It opens the serial port&amp;nbsp;and provides a teeny calculator-like command interpreter to anybody connecting over the&amp;nbsp;Bluetooth serial connection offered by the BTM-182. Currently I'm using CoolTerm running on&amp;nbsp;a Macbook for that, pairing with the "Serial Adaptor" device using&amp;nbsp;PIN "1234".&lt;br /&gt;&lt;br /&gt;Using the calculator-over-Bluetooth looks like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Good morning&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;multiply 3 4 5&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;60.000000&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;add 6 8 12&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;26.000000&lt;/span&gt;&lt;/blockquote&gt;Later I'll replace the netbook with a &lt;a href="http://www.sparkfun.com/products/614"&gt;AT91SAM7 microcontroller board&lt;/a&gt;, also running a little command interpreter, and use the Bluetooth connection to talk to my &lt;a href="http://www.htc.com/us/products/droid-incredible-verizon"&gt;Android phone&lt;/a&gt;. The next step is to hang some analog data acquisition hardware off the SAM7 and make a low-speed oscilloscope, displaying waveforms on the phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3952799284047329267?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3952799284047329267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3952799284047329267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3952799284047329267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3952799284047329267'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/03/sparkfuns-bluetooth-serial-port-board.html' title='Sparkfun&apos;s Bluetooth serial-port board'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5018/5526074091_083cbfc363_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6148865892116997082</id><published>2011-02-25T08:24:00.000-08:00</published><updated>2011-02-25T08:24:13.500-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sprint 8'/><category scheme='http://www.blogger.com/atom/ns#' term='interval training'/><title type='text'>Will tries interval training</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/uc?id=0B656IJ3nlMSMZGU0NDQ5YzAtNzlhNC00NjU2LWE4ZmItMzQ3NjBkZjA3NTYz" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="146" src="https://docs.google.com/uc?id=0B656IJ3nlMSMZGU0NDQ5YzAtNzlhNC00NjU2LWE4ZmItMzQ3NjBkZjA3NTYz" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Lately I've been doing some high-intensity interval training, where "high" takes into account that I'm a baby boomer with a desk job. If you have my sort of Homer-Simpson-esque physique, then start with things you can do without injury, not what the 18-year-old neighbor can do without injury. ObDisclaimer: Talk to your doctor before beginning any exercise regimen.&lt;br /&gt;&lt;br /&gt;Studies (&lt;a href="http://jp.physoc.org/content/575/3/901.abstract?maxtoshow=&amp;amp;HITS=10&amp;amp;hits=10&amp;amp;RESULTFORMAT=&amp;amp;author1=Gibala&amp;amp;andorexacttitle=and&amp;amp;andorexacttitleabs=and&amp;amp;andorexactfulltext=and&amp;amp;searchid=1&amp;amp;FIRSTINDEX=0&amp;amp;sortspec=relevance&amp;amp;resourcetype=HWCIT"&gt;1&lt;/a&gt;, &lt;a href="http://jap.physiology.org/content/102/4/1439.abstract"&gt;2&lt;/a&gt;) conclude that brief interval training periods two or three times per week, totaling just a few minutes of high-intensity exercise per session, can produce benefits similar to those from tedious 90- to 120-minute aerobic Jane Fonda workouts. The clearly measurable part appears to be that you can bump up the oxygen usage of your muscles, which means that your muscle mass has increased as has the number of mitochondria. Interval training also causes your muscles to continue burning extra calories for several hours following your workout (&lt;a href="http://www.intervaltraining.net/Epoc.html"&gt;1&lt;/a&gt;, &lt;a href="http://www.intervaltraining.net/maximising-warp-speed-fat-loss.html"&gt;2&lt;/a&gt;, &lt;a href="http://www.intervaltraining.net/hiit1.html"&gt;3&lt;/a&gt;). If I leave my heart-rate monitor on, I see that my heart rate remains mildly elevated long after I've stopped.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B656IJ3nlMSMZjAzNTkxNWEtZTc5ZS00NjQ1LWFmMzItZDlkMzk5OWFjMjlj" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="185" src="https://docs.google.com/uc?id=0B656IJ3nlMSMZjAzNTkxNWEtZTc5ZS00NjQ1LWFmMzItZDlkMzk5OWFjMjlj" width="200" /&gt;&lt;/a&gt;After about a month of doing this, I haven't seen any visible shrinkage of my midsection, but I've definitely got better stamina. I have a much easier time climbing stairs or getting up from sitting on the floor. All my exercise has been lower body, to take advantage of the larger muscles, but I'm pretty sure I've gained strength in my upper body as well.&lt;br /&gt;&lt;br /&gt;I think I would benefit faster if I were more careful with my diet. I keep thinking about cutting back on carbs, maybe I'll actually do that. Silly to put in the trouble to exercise and not add the piece that would actually allow me to lose some body fat. Sillier still to regard interval training as a license to eat donuts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6148865892116997082?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6148865892116997082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6148865892116997082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6148865892116997082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6148865892116997082'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/02/will-tries-interval-training.html' title='Will tries interval training'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7231959230199485870</id><published>2011-02-18T15:41:00.000-08:00</published><updated>2011-02-18T15:42:29.844-08:00</updated><title type='text'>Random punditry regarding IBM's Watson</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://cache.gawkerassets.com/assets/images/4/2011/02/ibm-watson-jeopardy.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="112" src="http://cache.gawkerassets.com/assets/images/4/2011/02/ibm-watson-jeopardy.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;I followed with considerable interest this week the game show &lt;a href="http://www.jeopardy.com/"&gt;Jeopardy!&lt;/a&gt; where one of the contestants was an &lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence"&gt;artificial intelligence&lt;/a&gt; built by &lt;a href="http://en.wikipedia.org/wiki/IBM"&gt;IBM&lt;/a&gt; called &lt;a href="http://www-943.ibm.com/innovation/us/watson/"&gt;Watson&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ordinarily I would try to offer some unique insight of my own about Watson. I would be tempted to acknowledge &lt;a href="http://en.wikipedia.org/wiki/Ken_Jennings"&gt;Ken Jennings&lt;/a&gt;' rephrasing of the now-ubiquitous Simpsons quote, "&lt;a href="http://en.wikipedia.org/wiki/Deep_Space_Homer"&gt;I, for one, welcome our new XYZ overlords&lt;/a&gt;". And I'd give my thoughts about what problems of modern society might be effectively addressed by this new technology, possibly in economics, medicine, or social policy.&lt;br /&gt;&lt;br /&gt;But so many large buckets of ink have already been poured over the topic of Watson that I think I'll kick back and let the harder-working pundits and bloggers have this one. So let's get started.&lt;br /&gt;&lt;br /&gt;An online publication called Washington Technology, whose business is to ensure that Beltway contractors know just enough 1337speak to get by, &lt;a href="http://washingtontechnology.com/articles/2011/02/17/ibm-watson-next-steps.aspx"&gt;mentions&lt;/a&gt; that Watson will now be working with some medical schools, presumably to suck their knowledge into its database. The original source for that information appears to be an &lt;a href="http://www.google.com/hostednews/ap/article/ALeqM5jdxUeWrx-2mKe6Kl25mwqOyT3iXw?docId=0c3aeff9556f4e178aaf1bce53097a64"&gt;AP news story&lt;/a&gt;. Then it will absorb speech recognition technology from &lt;a href="http://www.nuance.com/"&gt;Nuance, Inc&lt;/a&gt;&amp;nbsp;who had previously absorbed Dragon Systems. This will address the problem Watson faced during game play that it could only receive queries as electronic text messages.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eetimes.com/electronics-news/4213274/What-s-next-for-IBM-s-Watson-"&gt;Not much insight&lt;/a&gt; from EETimes, alas. They talk about a couple of pedestrian applications of data mining (basically what Netflix or Amazon does all day) in medical diagnosis where, like Watson's possible Jeopardy answers, each is assigned a confidence level, and in... wait for it... identifying patterns in shopping behavior, like the card readers at my local grocery store. Gee, that sounds world-transforming.&lt;br /&gt;&lt;br /&gt;MSNBC &lt;a href="http://cosmiclog.msnbc.msn.com/_news/2011/02/18/6081605-how-ibms-watson-will-make-money"&gt;talks about the same stuff&lt;/a&gt; Washington Technology talked about, and adds the data mining angle, this time playing Whack-a-Terrorist with license plates, credit card transactions, Internet activity, flight manifests, phone records, bank records, blah blah blah, every dystopian movie you've seen since 1993.&lt;br /&gt;&lt;br /&gt;That appears to cover 99% of the recent writings about Watson. A little disappointing. Maybe I'll need to come up with something myself after all. Hmm. Maybe Watson's next skill set should be online punditry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7231959230199485870?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7231959230199485870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7231959230199485870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7231959230199485870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7231959230199485870'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/02/random-punditry-regarding-ibms-watson.html' title='Random punditry regarding IBM&apos;s Watson'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6726059424562477457</id><published>2011-02-12T15:29:00.000-08:00</published><updated>2011-02-12T15:29:56.141-08:00</updated><title type='text'>Watson competes on Jeopardy</title><content type='html'>&lt;a href="http://www-03.ibm.com/innovation/us/watson/"&gt;Watson&lt;/a&gt; is a computer developed by &lt;a href="http://en.wikipedia.org/wiki/IBM"&gt;IBM&lt;/a&gt; researchers with the goal of competing on the game show &lt;a href="http://www.jeopardy.com/"&gt;Jeopardy&lt;/a&gt;. Watson's &lt;a href="http://www.jeopardy.com/minisites/watson/"&gt;appearance&lt;/a&gt; on Jeopardy is in only two days, during which it will compete against the planet's two best human Jeopardy players, Ken Jennings and Brad Rutter. Watson will be appearing on Monday, Tuesday and Wednesday evenings.&lt;br /&gt;&lt;br /&gt;This is a publicity event for IBM in the same spirit as the 1997 six-game chess match in which&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Deep_Blue_(chess_computer)"&gt;Deep Blue&lt;/a&gt;&amp;nbsp;defeated&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Garry_Kasparov"&gt;Garry Kasparov&lt;/a&gt;. But this is much more important. Deep Blue's technology was applicable only to chess and other deterministic games, amounting to a deep search of the tree of possible future moves.&lt;br /&gt;&lt;br /&gt;Watson uses a much broader range of technologies in &lt;a href="http://en.wikipedia.org/wiki/Natural_language_processing"&gt;natural language processing&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Data_mining"&gt;data mining&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Machine_learning"&gt;machine learning&lt;/a&gt;, and resolving ambiguities of communication. It is much likelier that work done on Watson will be applicable to &lt;a href="http://www-03.ibm.com/innovation/us/watson/watson-for-a-smarter-planet/expert-interviews.html"&gt;really important problems&lt;/a&gt; in medicine, economics, foreign policy, and other areas where there is a significant opportunity to raise the quality of human life.&lt;br /&gt;&lt;br /&gt;I don't ordinarily go around recommending that people watch a particular television program, but I'll make an exception here. I'll make this easy: go to Jeopardy's &lt;a href="http://www.jeopardy.com/showguide/whentowatch/"&gt;When-to-Watch page&lt;/a&gt;, click on your state, and see history unfold. As if Egypt wasn't enough history unfolding for the month of February. If you're in the Boston area, Jeopardy is at 7:30 PM on WBZ (channel 4).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6726059424562477457?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6726059424562477457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6726059424562477457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6726059424562477457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6726059424562477457'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/02/watson-competes-on-jeopardy.html' title='Watson competes on Jeopardy'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6262462631098219598</id><published>2011-02-03T15:31:00.000-08:00</published><updated>2011-02-24T05:37:14.856-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sprint 8'/><category scheme='http://www.blogger.com/atom/ns#' term='Android apps'/><title type='text'>Android app: a timer for Sprint 8 workouts</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://willware.net/cheetah.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://willware.net/cheetah.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;I recently learned about an interesting exercise technique called &lt;a href="http://www.howtobefit.com/sprint-8-workout.htm"&gt;Sprint 8&lt;/a&gt;, promoted by a guy named Phil Campbell, due to my sister's interest in &lt;a href="http://naturalhealthcenter.mercola.com/"&gt;Joseph Mercola&lt;/a&gt;, a doctor who took &lt;a href="http://fitness.mercola.com/sites/fitness/archive/2010/11/13/phil-campbell-on-peak-8-exercises.aspx"&gt;an interest&lt;/a&gt; in Sprint 8. The idea is pretty simple. Pick a favorite exercise, maybe a stairmaster or a stationary bike, and do eight sprints in the following way. Remember to consult your physician before starting any exercise program.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do two or three minutes of warm-up, nothing too strenuous.&lt;/li&gt;&lt;li&gt;Push yourself for 30 seconds. Work as hard as you can without risk of injury. This is a "sprint".&lt;/li&gt;&lt;li&gt;For 90 seconds to 2 minutes, move to a slower easier pace. Catch your breath. This is called "active resting".&lt;/li&gt;&lt;li&gt;Do a second 30-second sprint, followed by another 90-to-120-second active rest.&lt;/li&gt;&lt;li&gt;Repeat until you've done a total of eight sprints.&lt;/li&gt;&lt;/ul&gt;The Android app is a timer for doing Sprint 8, and the source code is &lt;a href="https://github.com/wware/stuff/tree/master/android_apps/Sprint8Timer"&gt;posted&lt;/a&gt; on Github. If you're set up for Android app development, feel free to compile it and try it on your Android phone. &lt;a href="https://market.android.com/details?id=net.willware.Sprint8Timer"&gt;The app is now available in the Android Market&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's a lot of &lt;a href="http://en.wikipedia.org/wiki/Skeletal_muscle#Muscle_fibers"&gt;exercise physiology&lt;/a&gt; knowledge to Sprint 8 that, in all honesty, I haven't yet studied. Maybe I will in future, and possibly blog about it. But I do know that after just a couple of short Sprint 8 workouts I feel really good. My back pain is way down and I get less winded when I climb a flight of stairs. Sprint 8 workouts are claimed to produce human growth hormone (the stuff outlawed in Olympic and professional sports because it gives athletes an unfair competitive advantage) which appears to have anti-aging effects. Also see &lt;a href="http://en.wikipedia.org/wiki/Interval_training"&gt;"interval training"&lt;/a&gt;, believed to work well for &lt;a href="http://www.intervaltraining.net/Epoc.html"&gt;fat loss&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6262462631098219598?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6262462631098219598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6262462631098219598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6262462631098219598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6262462631098219598'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2011/02/android-app-timer-for-sprint-8-workouts.html' title='Android app: a timer for Sprint 8 workouts'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-1498996394651204325</id><published>2010-12-21T12:40:00.000-08:00</published><updated>2011-12-18T06:14:37.184-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><category scheme='http://www.blogger.com/atom/ns#' term='SAM7'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Developing for the AT91SAM7 microcontroller</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dlnmh9ip6v2uc.cloudfront.net/images/products/SAM7-H256-0.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://dlnmh9ip6v2uc.cloudfront.net/images/products/SAM7-H256-0.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;I once purchased a SAM7 P256 board from Sparkfun for $72. This post is a bunch of pointers to the resources I’ll need to develop for it. The same code will work on the H64 header board (only $35), which can be used in future USB projects. UPDATE: Sparkfun no longer sells the H64 header board, but they have a &lt;a href="http://www.sparkfun.com/products/775"&gt;H256 board&lt;/a&gt; for $45.&lt;br /&gt;&lt;br /&gt;This post assumes an Ubuntu Linux environment.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;User manual: &lt;a href="http://www.olimex.com/dev/pdf/ARM/ATMEL/SAM7-P256.pdf"&gt;http://www.olimex.com/dev/pdf/ARM/ATMEL/SAM7-P256.pdf&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;P256 dev board at Sparkfun: &lt;a href="http://www.sparkfun.com/products/774"&gt;http://www.sparkfun.com/products/774&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;H64 header board at Sparkfun: &lt;a href="http://www.sparkfun.com/products/614"&gt;http://www.sparkfun.com/products/614&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Set up the development environment. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jaunty 9.04: &lt;a href="http://blog.nutaksas.com/2009/05/installing-gnuarm-arm-toolchain-on.html"&gt;http://blog.nutaksas.com/2009/05/installing-gnuarm-arm-toolchain-on.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lucid 10.04: &lt;a href="http://lejosrt.org/tuto/install-gnu-arm-toolchain-under-linux"&gt;http://lejosrt.org/tuto/install-gnu-arm-toolchain-under-linux&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Use Sam_I_Am to access the SAM-BA bootloader. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sam_I_Am website: &lt;a href="http://claymore.engineer.gvsu.edu/~steriana/Software/Sam_I_Am/index.html"&gt;http://claymore.engineer.gvsu.edu/~steriana/Software/Sam_I_Am/index.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How to get the SAM7 board into bootloader mode.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Power off the board by removing the USB cable.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Connect TST jumper.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Power on the board and let it sit for 10 seconds.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Power down the board.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Disconnect TST jumper. On next power-up, board will go into SAM-BA bootloader mode.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Adam Pierce article is worthwhile: &lt;a href="http://www.doctort.org/adam/nerd-notes/getting-started-with-the-olimex-sam7-p256.html"&gt;http://www.doctort.org/adam/nerd-notes/getting-started-with-the-olimex-sam7-p256.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;He has a good blinking-LED example that runs out of RAM (not flash, so lost on power cycle):&amp;nbsp;&lt;a href="http://www.doctort.org/adam/files/ARMBlinkExample.tar.bz2"&gt;http://www.doctort.org/adam/files/ARMBlinkExample.tar.bz2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;But I needed to modify his linker file to make it build on Ubuntu 10.04:&amp;nbsp;&lt;a href="https://github.com/wware/stuff/blob/master/sam7/ARMBlinkExample/ram-ln.cmd"&gt;https://github.com/wware/stuff/blob/master/sam7/ARMBlinkExample/ram-ln.cmd&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;You might need the mknod command discussed here to create a /dev/ttyUSB0 device: &lt;a href="http://claymore.engineer.gvsu.edu/~steriana/Software/Sam_I_Am/connecting.html"&gt;http://claymore.engineer.gvsu.edu/~steriana/Software/Sam_I_Am/connecting.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Some easily available demos and example programs &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blink LED demo: &lt;a href="http://www.olimex.com/dev/soft/arm/SAM7/Blinking_LED.zip"&gt;http://www.olimex.com/dev/soft/arm/SAM7/Blinking_LED.zip&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;USB HID mouse demo: &lt;a href="http://www.olimex.com/dev/soft/arm/SAM7/Mouse_driver.zip"&gt;http://www.olimex.com/dev/soft/arm/SAM7/Mouse_driver.zip&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/at91sam7s-ek.zip"&gt;http://www.atmel.com/dyn/resources/prod_documents/at91sam7s-ek.zip&lt;/a&gt; has more useful examples in the at91sam7s-ek/packages directory, look for the ones with names ending in "_gnu"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Other resources&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mjbauer.biz/SAM7_Firmware_Guide.htm"&gt;http://www.mjbauer.biz/SAM7_Firmware_Guide.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3784"&gt;http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3784&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/products/app_notes.asp?family_id=605"&gt;http://www.atmel.com/dyn/products/app_notes.asp?family_id=605&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/doc6293.pdf"&gt;http://www.atmel.com/dyn/resources/prod_documents/doc6293.pdf&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/doc6310.pdf"&gt;http://www.atmel.com/dyn/resources/prod_documents/doc6310.pdf&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/doc6263.pdf"&gt;http://www.atmel.com/dyn/resources/prod_documents/doc6263.pdf&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/doc6273.pdf"&gt;http://www.atmel.com/dyn/resources/prod_documents/doc6273.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-1498996394651204325?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/1498996394651204325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=1498996394651204325' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1498996394651204325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1498996394651204325'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/12/developing-for-at91sam7-microcontroller.html' title='Developing for the AT91SAM7 microcontroller'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7315516316422240276</id><published>2010-11-06T10:10:00.000-07:00</published><updated>2010-11-06T10:19:26.777-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='remastering'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Remastering Ubuntu Mini Remix</title><content type='html'>&lt;a href="http://www.ubuntu-mini-remix.org/"&gt;Ubuntu Mini Remix&lt;/a&gt; is a very small, very efficient Ubuntu distribution created by &lt;a href="http://fabrizioballiano.net/"&gt;Fabrizio Balliano&lt;/a&gt;. I discovered it when I needed to create a kiosk-like boot disk image that booted the user directly into a simple command-line application. I didn't need X Windows, OpenOffice, web access, or email, I just needed to run my application, and UMR was perfect for that. The baseline UMR image is about 165 MB, and is available for &lt;a href="http://www.ubuntu-mini-remix.org/download/10.10/ubuntu-mini-remix-10.10-i386.iso"&gt;i386&lt;/a&gt; and for &lt;a href="http://www.ubuntu-mini-remix.org/download/10.10/ubuntu-mini-remix-10.10-amd64.iso"&gt;amd64&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In my &lt;a href="http://willware.blogspot.com/2010/11/making-debian-release-package.html"&gt;previous blog post&lt;/a&gt;, I explained how to create a debian package. Since then I've written &lt;a href="https://github.com/wware/stuff/tree/master/remaster-umr/"&gt;a&amp;nbsp;shell script&lt;/a&gt; that takes one or more debian packages and uses them to remaster UMR. If you wanted to use the debian package from the last blog post to update UMR, you could simply type:&lt;br /&gt;&lt;pre&gt;(cd ../make-debian-pkg/; make)&lt;br /&gt;./customize.sh \&lt;br /&gt;    ../make-debian-pkg/foo-bar_1.0_i386.deb&lt;/pre&gt;If you have multiple debian packages to be included, simply add them as additional command line arguments. The result will be a file called "customized-umr-10.10-i386.iso", located in your home directory.&lt;br /&gt;&lt;br /&gt;For very small additions, a package may be overkill. It might make better sense to edit the script to simply add the files you need, and in my situation at work, that was the approach I ultimately chose. But if your change is more substantial, and especially if you want to include other packages that you'll rely upon, you'll want to think about using package management.&lt;br /&gt;&lt;br /&gt;If you want your boot image to take the user directly into your application as I did, you can go into the chroot jail and replace the file /etc/skel/.bashrc with a short script that calls your application. The command would look like this:&lt;br /&gt;&lt;pre&gt;sudo cp my-bashrc ${CHROOT_JAIL}/etc/skel/.bashrc&lt;/pre&gt;and you'd want to put that with the lines where the comment says "Prepare to chroot", near line 63. (Take the line number with a grain of salt as I may end up editing it at some point.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7315516316422240276?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7315516316422240276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7315516316422240276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7315516316422240276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7315516316422240276'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/11/remastering-ubuntu-mini-remix.html' title='Remastering Ubuntu Mini Remix'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3846440987028950644</id><published>2010-11-02T19:55:00.000-07:00</published><updated>2010-11-06T10:19:26.778-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Making a debian release package</title><content type='html'>I've been doing a lot with &lt;a href="http://en.wikipedia.org/wiki/Ubuntu_(operating_system)"&gt;Ubuntu&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; lately, and decided it was time to find out how to put together a &lt;a href="http://en.wikipedia.org/wiki/Deb_(file_format)"&gt;debian package&lt;/a&gt;. Ubuntu shares &lt;a href="http://en.wikipedia.org/wiki/Debian"&gt;Debian&lt;/a&gt;'s &lt;a href="http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html"&gt;package management system&lt;/a&gt;, having descended from Debian. I've banged my way through &lt;a href="http://github.com/wware/stuff/tree/master/make-debian-pkg/"&gt;the code&lt;/a&gt; so you don't have to. Here I will just discuss a few highlights. There isn't that much to it.&amp;nbsp;Since this is just an example, I didn't get very creative with the name or the contents. Running &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;make&lt;/span&gt;&lt;/span&gt;&amp;nbsp;will build &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;foo-bar_1.0_i386.deb&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;First a quick look at the files.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./Makefile&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./control&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./copyright&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./postinst&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./prerm&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./usr/bin/say-hello&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./usr/lib/python2.6/foobar.py&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./usr/share/doc/foo-bar/foobar.txt&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;The three files in the "usr" directory tree will be copied into the target system when you say "dpkg -i&amp;nbsp;foo-bar_1.0_i386.deb". If you then say "dpkg -r foo-bar", those three files will be removed. The postinst and prerm scripts can be used to perform actions after installation and before removal respectively, but here they just print messages to the console. The real meat is in the two files &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://github.com/wware/stuff/blob/master/make-debian-pkg/control"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;control&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://github.com/wware/stuff/blob/master/make-debian-pkg/Makefile"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Makefile&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;control&lt;/span&gt;&lt;/span&gt;&amp;nbsp;specifies the package name, version number, dependencies, and other information. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Makefile&lt;/span&gt;&lt;/span&gt; takes pieces of that information to build makefile variables that will be used in creating the package. There isn't a heck of a lot to say about the process other than there is a special DEBIAN directory with meta-information about the package and how it should be installed and removed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is the minimal possible example. You can build a deb file this way and install it on an Ubuntu machine. But there are a lot of things that could be improved and cleaned up, and put in better compliance with common practices for making these packages more maintainable. The two big areas are (1) there are &lt;a href="http://www.debian.org/doc/debian-policy/ch-controlfields.html"&gt;recommendations&lt;/a&gt; about additional fields to go into control, and (2) there is a tool called &lt;a href="http://lintian.debian.org/manual/index.html"&gt;lintian&lt;/a&gt;, a sort of lint command for deb packages, whose advice should be applied. When I build this package, the advice I get is the following:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;E: foo-bar: changelog-file-missing-in-native-package&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;W: foo-bar: third-party-package-in-python-dir usr/lib/python2.6/foobar.py&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;W: foo-bar: binary-without-manpage usr/bin/say-hello&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;W: foo-bar: maintainer-script-ignores-errors postinst&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;W: foo-bar: maintainer-script-ignores-errors prerm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;where "E" and "W" are "Error" and "Warning". So that's not too bad.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3846440987028950644?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3846440987028950644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3846440987028950644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3846440987028950644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3846440987028950644'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/11/making-debian-release-package.html' title='Making a debian release package'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4035845410778289106</id><published>2010-10-28T17:15:00.000-07:00</published><updated>2010-11-06T10:19:26.779-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='remastering'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Customized Ubuntu distributions part three</title><content type='html'>Apparently most of the stuff in my previous posting was the wrong approach. I think I've finally got what I want. All this time, I've been trying to figure out how to do a live Linux CD that (a) includes some code we've been developing at work, and (b) boots very quickly and simply to where the user can use that code. The goal is to provide software tools to a partner company where everybody's laptop runs Windows, but all our stuff is written in Linux.&lt;br /&gt;&lt;br /&gt;First I tried to build our code in Cygwin using the Windows version of libusb. I found that fraught with complexities of all sorts and eventually decided the Live CD approach sounded a lot easier. Besides, we wanted the Live CD/bootable USB stick anyway for some later plans.&lt;br /&gt;&lt;br /&gt;Theoretically there are small Linux distributions (the most famous being &lt;a href="http://www.damnsmalllinux.org/"&gt;Damn Small Linux&lt;/a&gt;) that can be used for this sort of thing. As soon as I started getting into that, I found that DSL is no longer maintained, the documentation for it is insufficient and the pieces that do exist contradict one another. I struggled to resolve dependency and version issues in porting our code to DSL and finally gave up. By that time, I had already discovered how to make an Ubuntu Live CD, and so I delivered one with the first piece of our code to our partner.&lt;br /&gt;&lt;br /&gt;But I really wanted a much shorter boot time. I don't need X Windows or networking or OpenOffice or a web browser. I'd prefer to have a development environment on there in case the code required modification but even that is unnecessary.&lt;br /&gt;&lt;br /&gt;In the past several days I've tinkered with about a dozen Linux distributions claiming to be "small" and found them all deficient in one way or another. I've tried dozens and dozens of permutations of dumb little tricks involving &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/QEMU"&gt;QEMU&lt;/a&gt; and &lt;a href="http://uck.sourceforge.net/"&gt;Ubuntu Customization Kit&lt;/a&gt; and burning CD-Rs and &lt;a href="https://help.ubuntu.com/community/Installation/FromUSBStick#Creating a bootable Ubuntu USB flash drive"&gt;USB sticks&lt;/a&gt;. I've looked at what feels like hundreds of different web pages and blog postings, each claiming to have an authoritative and trustworthy solution to my problem. Each involves failures to account for discrepancies between versions, or the document I've found is old and inapplicable to what I'm doing, or the author made several minor assumptions that don't work in my environment.&lt;br /&gt;&lt;br /&gt;Currently I'm looking at something called &lt;a href="http://www.ubuntu-mini-remix.org/"&gt;Ununtu Mini Remix&lt;/a&gt; which looks promising. It's looking very good so far, as I am remastering it with the information on &lt;a href="https://help.ubuntu.com/community/LiveCDCustomization"&gt;the Ubuntu help website&lt;/a&gt;. Adding a shell script to /bin to make sure I can, and adding an "echo HELLO" to /etc/skel/.bashrc to make sure it appears when the disk boots into a bash session.&lt;br /&gt;&lt;br /&gt;Everything was going great and then mksquashfs got hung up on the proc directory -- AH, this happened because when you finish a chroot session you must do &lt;a href="https://wiki.archlinux.org/index.php/Change_Root"&gt;three umounts&lt;/a&gt; (dev/pts, proc, sys) even if you weren't aware of having mounted them. Apparently chroot mounts them without telling you. Umount those in the chroot environment, exit, then umount edit/dev, and the mksquashfs goes just dandy.&lt;br /&gt;&lt;br /&gt;So my two dumb tricks in /bin and /etc/skel/.bashrc worked like a champ in VirtualBox and now I'm going to try to make a bootable USB stick. Ubuntu's Startup Disk Creator likes the file (it's very picky about what ISO files are considered bootable) and the USB stick works great in my Windows laptop. Now we make the &lt;a href="http://www.rovio.com/index.php?page=angry-birds"&gt;Angry Birds&lt;/a&gt; WHEEEE noise, however dumb some people might find the game. The next step is to make my tweaks into a Deb file using &lt;a href="http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/"&gt;this HOWTO&lt;/a&gt; so they go in painlessly.&lt;br /&gt;&lt;br /&gt;Grazie mille to Fabrizio Balliano for creating Ubuntu Mini Remix.&lt;br /&gt;&lt;br /&gt;&lt;div class="Il" id=":2mr" style="margin-top: 10px;"&gt;&lt;div class="zg"&gt;&lt;div&gt;&lt;div class="O-L zm J-bMcfAe-JW" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; cursor: auto; float: none; height: auto; margin-bottom: 7px; margin-left: 0px; margin-right: 7px; margin-top: 7px; padding-bottom: 5px; position: relative; width: 831px;"&gt;&lt;img class="O-L-Zl" src="https://s2.googleusercontent.com/s2/favicons?domain=www.ubuntu-mini-remix.org" style="float: left; height: 16px; margin-right: 5px; margin-top: -1px; width: 16px;" /&gt;&lt;br /&gt;&lt;div class="O-L-Jm" style="background-image: none; bottom: auto; display: block; height: 1.5em; overflow-x: hidden; overflow-y: hidden; position: relative; width: 664px;"&gt;&lt;div class="O-L-Jm-K0" style="color: black; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-right: 20px; white-space: nowrap;"&gt;&lt;a class="zn" href="http://www.ubuntu-mini-remix.org/" style="color: #0000cc;" target="_blank"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Ubuntu Mini Remix - The tiny Ubuntu you can build on!&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="O-L-JC" style="display: block; width: 664px;"&gt;&lt;div class="O-L-JC-K0" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-right: 10px;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;165MB Ubuntu livecd containing only the minimal Ubuntu package set. Wonderful as a rescue disk or as a base for Ubuntu derivative creation.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4035845410778289106?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4035845410778289106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4035845410778289106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4035845410778289106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4035845410778289106'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/10/customized-ubuntu-distributions-part_28.html' title='Customized Ubuntu distributions part three'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6704216602634587721</id><published>2010-10-23T21:25:00.000-07:00</published><updated>2010-11-06T10:19:26.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='remastering'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Customized Ubuntu distributions part two</title><content type='html'>Turns out I was mostly still spinning my wheels here -- move on to part three of this tale for the solution to the problem.&lt;br /&gt;&lt;br /&gt;After a brief visit to the world of &lt;a href="http://www.damnsmalllinux.org/"&gt;Damn Small Linux&lt;/a&gt;&amp;nbsp;and subsequent narrow escape from eternal damnation, I returned to Ubuntu with the idea of reducing the size (not as big a priority as I initially thought), speeding up the boot time, and running a program when the user logs into X.&lt;br /&gt;&lt;br /&gt;First a quick note about the 9.10/10.04 UCK thing. What's working well for me is to run UCK on a box that has 10.04 installed, and apply it to a 9.10 ISO. Do not attempt to run UCK inside a VMware instance, it's just a lot of pain. You can run the resulting ISO in QEMU but don't forget the "-boot d" argument.&lt;br /&gt;&lt;br /&gt;To shrink the distro, I removed OpenOffice, Ubuntu Docs, and Evolution. Things I added included autoconf, emacs, git, guile, and openssh-server.&lt;br /&gt;&lt;br /&gt;The low-hanging fruit for speeding up boot time is to bring up networking as a background process, described &lt;a href="http://www.dotkam.com/2008/08/06/speed-up-ubuntu-boot-time-by-starting-networking-on-the-background/"&gt;here&lt;/a&gt;. Doing this in Ubuntu 9.10 means editing /etc/init.d/networking, adding "&amp;amp;" here:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;case "$1" in&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;start)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/lib/init/upstart-job networking start &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;&amp;amp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;People have given a &lt;a href="http://lightningcrash.blogspot.com/2007/08/making-ubuntu-boot-in-19-seconds.html"&gt;lot&lt;/a&gt; &lt;a href="http://arstechnica.com/open-source/news/2009/06/ubuntu-aims-for-ten-second-boot-time.ars"&gt;of&lt;/a&gt; &lt;a href="http://www.extremetech.com/article2/0,2845,2114124,00.asp"&gt;thought&lt;/a&gt; to other approaches to speed up Ubuntu's boot time, and maybe I'll blog more about that as I investigate it further. I really need to dig deeper into the boot time topic. It will likely warrant another blog post.&lt;/div&gt;&lt;br /&gt;Having an app start immediately when the user logs in is somewhat interesting. The X session startup stuff is all in /etc/X11/Xsession.d/ and the main thing here is&amp;nbsp;/etc/X11/Xsession.d/40x11-common_xsessionrc where we find a call to the user's ".xsessionrc" file. The user's directory is populated from /etc/skel, so the trick here is to create /etc/skel/.xsessionrc:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;export LC_ALL=C&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;${HOME}/hello.sh &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;where hello.sh is a sample shell script just to make sure I've got the principle down pat:&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sleep 2 &amp;nbsp; # wait for other xinit stuff to finish&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;xterm -geometry 120x50+0+0 -e "echo HELLO WORLD; sleep 5"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Hmm... that worked for a bit, then stopped working. I've since discovered another file, /etc/gdm/PreSession/Default, which seems more relevant. But that starts the app just a little too early, before the user is actually logged into the X session, so maybe I should put a time delay in my app? Annoying.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6704216602634587721?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6704216602634587721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6704216602634587721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6704216602634587721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6704216602634587721'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/10/customized-ubuntu-distributions-part.html' title='Customized Ubuntu distributions part two'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-9030532760775313386</id><published>2010-10-18T17:51:00.000-07:00</published><updated>2010-11-06T10:19:26.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='remastering'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Fun with customized Ubuntu distributions</title><content type='html'>At &lt;a href="http://www.litl.com/"&gt;work&lt;/a&gt; we have an interesting problem. We are working with some companies in &lt;a href="http://en.wikipedia.org/wiki/Taiwan"&gt;Taiwan&lt;/a&gt;. Obviously there's a language difference, but there is another difference as well. We are an &lt;a href="http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29"&gt;Ubuntu&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; shop, and they all have &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Windows"&gt;Windows&lt;/a&gt; laptops. Periodically we have bits of test code that they need to use, and the &lt;a href="http://en.wikipedia.org/wiki/Operating_system"&gt;OS&lt;/a&gt; gulf needs to be overcome.&lt;br /&gt;&lt;br /&gt;My first whack at this issue was to try to use &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; to rebuild our tools from source on a Windows platform. But after I'd spent a few days dealing with &lt;a href="http://github.com/wware/stuff/tree/master/libusb-pbatard/"&gt;libusb&lt;/a&gt;, and making not a whole lot of progress, a co-worker suggested a &lt;a href="http://en.wikipedia.org/wiki/Booting"&gt;bootable&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/USB_flash_drive"&gt;USB stick&lt;/a&gt;. The Taiwanese folks get to keep their Windows laptops, but with a quick reboot they can temporarily use Linux machines just like ours. So I set about learning the art of bootable USB sticks, which in Ubuntu 9.10 is pretty painless. (This is not the case with Ubuntu 10.04. If you need to do this, stick with 9.10.)&lt;br /&gt;&lt;br /&gt;Not to keep you in suspense, the two magical things are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://uck.sourceforge.net/"&gt;Ubuntu Customization Kit&lt;/a&gt;, (sudo apt-get install uck) which produces an ISO file suitable for burning a CD or DVD which you can boot from, and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;USB Startup Disk Creator (already present in your System&amp;gt;Administration menu) which puts that ISO file onto a USB stick and makes the stick bootable.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;These are amazingly easy-to-use tools, given the complexity of what they're doing. In the bad old days, the &lt;a href="http://www.knoppix.net/"&gt;Knoppix distribution&lt;/a&gt; existed solely for the purpose of rendering this feat possible for mortals. That said, I learned a few tricks about these things which I'll pass along here. Do NOT use Ubuntu 10.04, as there is &lt;a href="https://bugs.launchpad.net/uck/+bug/544555"&gt;a serious bug&lt;/a&gt; in that version of UCK plus a handful of annoying behavioral oddities. These are fixed in a future UCK release, but that's not available in the Ubuntu 10.04 repositories.  In order to produce a USB stick which could be used with a Windows laptop to produce another bootable USB stick, I put a copy of the ISO file onto the USB stick. The instructions for copying the USB stick then go like this. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Boot into Windows and insert the first USB stick. Copy the ISO file somewhere memorable. Restart the laptop.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Boot into Ubuntu using the USB stick. Once you're booted, insert the second USB stick.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bring up USB Startup Disk Creator. The original ISO file on the first USB stick (from which you are now running) will not be visible in the file system. But the Windows hard drive will be readable, so dig around in it to find the ISO file copy you just used. Use that as the source, and select the 2nd USB stick as the destination. Push the button.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once that installation is complete, copy the ISO file from the Windows hard drive onto the second USB stick. Voila, a copy.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Using the first part (making an ISO image) I was able to produce a DVD with some of our tools for the Taiwanese folks to use. I set up &lt;a href="http://en.wikipedia.org/wiki/Traditional_Chinese_characters"&gt;Traditional Chinese&lt;/a&gt; and English as languages, with the default to boot into Traditional Chinese. But then because it had some of our source code, I encrypted this entire 725 MB file, which is ironic given that Ubuntu is open source. But there had to be a way to encrypt only the proprietary stuff.&lt;br /&gt;&lt;br /&gt;On the next boot image I send them (which will be a USB stick, not a DVD, since USB sticks are oh so much sexier), the contents of the stick will be open source, and the proprietary stuff will be pulled down from a little tarball on some handy little server. The thing that pulls down the tarball and handles security is my little &lt;a href="http://github.com/wware/stuff/tree/master/tarball-runner/"&gt;tarball runner script&lt;/a&gt;. The new ISO is at &lt;a href="http://willware.net/tbr-disk.iso"&gt;http://willware.net/tbr-disk.iso&lt;/a&gt;, and if you need to share some closed-source Linux code with people in China or Taiwan, feel free to use it.&lt;br /&gt;&lt;br /&gt;To use this bit of cleverness, build some code on your Linux box, package it up as a tarball (including a run.sh shell script at the root level, in case you need to do installation stuff), and if necessary, encrypt it using (&lt;a href="http://github.com/wware/stuff/tree/master/twofishmodule-0.7/"&gt;my tweaked version&lt;/a&gt; of) the &lt;a href="http://en.wikipedia.org/wiki/Twofish"&gt;Twofish&lt;/a&gt; algorithm found on &lt;a href="http://sourceforge.net/projects/twofish-py/"&gt;Sourceforge&lt;/a&gt;. Then post it to the Internet and email the password only to your intended recipients.&lt;br /&gt;&lt;br /&gt;If I find the time and energy, I'll package up the tarball runner and the Twofish module as a &lt;a href="http://en.wikipedia.org/wiki/Deb_%28file_format%29"&gt;Deb package&lt;/a&gt; to make the installation painless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-9030532760775313386?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/9030532760775313386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=9030532760775313386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9030532760775313386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9030532760775313386'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/10/fun-with-customized-ubuntu.html' title='Fun with customized Ubuntu distributions'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-9033345956883092599</id><published>2010-10-10T14:47:00.000-07:00</published><updated>2010-10-10T15:02:51.778-07:00</updated><title type='text'>Preliminary things from the Life Extesion Conference</title><content type='html'>This weekend I'm attending &lt;a href="http://twitter.com/lifeext"&gt;Christine Peterson&lt;/a&gt;'s &lt;a href="http://lifeextensionconference.com"&gt;Life Extension Conference&lt;/a&gt; in San Francisco. Chris wanted to put together information that is both scientifically valid and actionable, so she lined up a lot of really high-quality speakers. One thing I learned pretty quickly is that there are a large number of areas of expertise, generally interrelated, all pretty deep. I'll try to do a series of blog postings about these topics so this one will just skim a few highlights.&lt;br /&gt;&lt;br /&gt;Here are some very quick bits of advice.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Completely stop eating sugar.&lt;br /&gt;&lt;li&gt;Exercise.&lt;br /&gt;&lt;li&gt;Eat spinach and other leafy greens, take vitamin D and drink green tea.&lt;br /&gt;&lt;li&gt;The health of your brain is crucial to your overall health. Meditation is better for your brain than puzzles and games.&lt;br /&gt;&lt;li&gt;Intermittent fasting (e.g. 24 hours every 2 or 3 day) is good for you.&lt;br /&gt;&lt;/ul&gt;The popular aging theory that our bodies wear out over time is false. We know this because there are animals and plants thousands of years old which may die from accidents or mishaps, but they do not age biologically.  &lt;a href="http://www.worldscibooks.com/lifesci/5457.html"&gt;Michael Rose&lt;/a&gt; has been breeding long-lived "Methuselah" fruit flies for over 30 years and he discussed his approach. There were a lot of great talks but I found this one clarified some bsic information about aging for me.&lt;br /&gt;&lt;br /&gt;Simplistically assume that flies always begin reproducing at age A and always stop reproducing at age B. Any heritable cause of death that takes effect before age A will be strongly selected against, and any heritable cause of death that takes effect after age B will face no selection pressure at all. What Rose did was to tinker with A and B, delaying both, and discardiing the flies who didn't live very long, and he did this from 1980 to the present day. I think I'll have more to say about this when I've gone over my notes more, but a few quick things about these Methuselah flies.&lt;br /&gt;&lt;br /&gt;We couldn't do this in 1980 but we can now sequence the DNA of these flies and compare it to the DNA of normal flies. What you see is that there are a lot of teeny differences widely spread over the genome. This leads me to think that there's no silver bullet longevity gene, but rather a lot of small tweaks that address a large number of heritable causes of death.&lt;br /&gt;&lt;br /&gt;More stuff to come as I sift through my notes. Chris has talked about posting all the slides online and making the presentation videos available as a DVD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-9033345956883092599?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/9033345956883092599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=9033345956883092599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9033345956883092599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9033345956883092599'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/10/preliminary-things-from-life-extesion.html' title='Preliminary things from the Life Extesion Conference'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-9131898484105776513</id><published>2010-09-16T22:19:00.000-07:00</published><updated>2010-09-16T22:34:25.681-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><category scheme='http://www.blogger.com/atom/ns#' term='specifications'/><title type='text'>Tim BL's talk on Linked Data</title><content type='html'>I'm part way through watching &lt;a href="http://www.ted.com/talks/tim_berners_lee_on_the_next_web.html"&gt;Tim Berners-Lee's TED talk&lt;/a&gt; from February 2009 about &lt;a href="http://en.wikipedia.org/wiki/Linked_Data"&gt;Linked Data&lt;/a&gt;. He talks a bit about his motivation for inventing the Web, which was that the data he encountered at CERN was in all different formats and on all different computer architectures and he spent a huge fraction of his time writing code to translate one format to another. He talks about how much of the world's data is still locked up in a million disconnected little islands, and how many of the world's most urgent problems require that data be made available across the boundaries between corporations, organizations, laboratories, universities, and nations. It's a very eloquent talk, reminding me in places of David Gelernter's prophetic book &lt;a href="http://www.amazon.com/Mirror-Worlds-Software-Universe-Shoebox-How/dp/019507906X"&gt;Mirror Worlds&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://richard.cyganiak.de/2007/10/lod/lod-datasets_2009-07-14.png"&gt;&lt;img src="http://richard.cyganiak.de/2007/10/lod/lod-datasets_2009-07-14.png" width="400px"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What's remarkable about the Linked Data idea is that, as much as people tend to dismiss the whole semantic web vision, it really is making &lt;a href="http://linkeddata.org/"&gt;remarkable progress&lt;/a&gt;. The diagram above shows several interlinked websites with large and mutually compatible data sets.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dbpedia.org/About"&gt;DBPedia&lt;/a&gt; aims to extract linked data from Wikipedia and make it publicly available.&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mpi-inf.mpg.de/yago-naga/yago/"&gt;YAGO&lt;/a&gt; is a huge semantic knowledge base. Currently, YAGO knows more than 2 million entities (like persons, organizations, cities, etc.). It knows 20 million facts about these entities.&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.lexvo.org/"&gt;Lexvo.org&lt;/a&gt; brings information about languages, words, characters, and other human language-related entities to the Linked Data Web and Semantic Web.&lt;br /&gt;&lt;li&gt;The &lt;a href="http://www.opencalais.com/"&gt;Calais&lt;/a&gt; web service is an API that accepts unstructured text (like news articles, blog postings, etc.), processes them using natural language processing and machine learning algorithms, and returns RDF-formatted entities, facts and events. It takes about 0.5 to 1.0 second depending on how big a document you send and the size of your pipe. &lt;br /&gt;&lt;li&gt;&lt;a href="http://www.freebase.com/"&gt;Freebase&lt;/a&gt; is an open repository of structured data of more than 12 million entities. An entity is a single person, place, or thing. Freebase connects entities together as a graph.&lt;br /&gt;&lt;li&gt;&lt;a href="http://linkedct.org/index.html"&gt;LinkedCT&lt;/a&gt; is a website full of linked data about past and present clinical trials.&lt;br /&gt;&lt;/ul&gt;Berners-Lee has &lt;a href="http://www.w3.org/DesignIssues/LinkedData"&gt;recommended&lt;/a&gt; a very small set of Linked Data principles. &lt;ul&gt;&lt;li&gt;Use URIs as names for things.&lt;br /&gt;&lt;li&gt;Use HTTP URIs so that people can look up those names.&lt;br /&gt;&lt;li&gt;When someone looks up a URI, provide useful information, using the standards (RDF*, SPARQL)&lt;br /&gt;&lt;li&gt;Include links to other URIs so that they can discover more things.&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-9131898484105776513?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/9131898484105776513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=9131898484105776513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9131898484105776513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/9131898484105776513'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/09/tim-bls-talk-on-linked-data.html' title='Tim BL&apos;s talk on Linked Data'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4411384230784907873</id><published>2010-09-13T07:13:00.000-07:00</published><updated>2010-09-16T22:34:50.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><title type='text'>Set theory, OWL, and the Semantic Web</title><content type='html'>Despite my interest in semantic web technology, there is one area I've had a little mental block about, which is &lt;a href="http://en.wikipedia.org/wiki/Web_Ontology_Language"&gt;OWL&lt;/a&gt;. If you just sit down and try to read the available technical information about OWL, it's clear as mud. Imagine my surprise when clarity dawned in the form of the book &lt;a href="http://www.amazon.com/Semantic-Web-Dummies-Jeffrey-Pollock/dp/0470396792"&gt;Semantic Web for Dummies&lt;/a&gt; by Jeffrey Pollock, who explains in Chapter 8 that OWL amounts to set theory. The book is surprisingly good, I recommend it.&lt;br /&gt;&lt;br /&gt;I attended elementary school in the 1960s, when the U.S. was trying a stupid educational experiment called &lt;a href="http://en.wikipedia.org/wiki/New_Matht"&gt;New Math&lt;/a&gt;. The basic premise was that little kids needed to know axiomatic set theory, in order for the U.S. to raise a generation of uber math geeks who could outperform the Soviet engineers who put &lt;a href="http://en.wikipedia.org/wiki/Sputnik"&gt;Sputnik&lt;/a&gt;&amp;nbsp;into orbit. If only I'd taken more seriously all this nonsense about unions and intersections and empty sets, I might have avoided all that trouble with schoolyard bullies. Oh wait.... Anyway, in order to fulfill this obviously pointless requirement, our teacher would spend the first three weeks of every school year drilling us on exercises in set theory and then move on to whatever math we actually really needed to learn for that year. The take-home lesson was that intersection was preferable to union, because writing the result of a union operation meant I had to do more writing and it made my hand hurt. In retrospect it's amazing that I retained any interest in mathematics.&lt;br /&gt;&lt;br /&gt;Set theory came into vogue as guys like &lt;a href="http://en.wikipedia.org/wiki/David_Hilbert"&gt;David Hilbert&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Bertrand_Russell"&gt;Bertrand Russell&lt;/a&gt; were fishing around for a formal bedrock on which to place the edifice of mathematics. The hope was to establish a mathematics that was essentially automatable, in the belief that as a result it would be infallible. So they went around formalizing the definitions of various mathematical objects by injecting bits of set theory. One of the more successful examples was to use &lt;a href="http://en.wikipedia.org/Dedekind_cut"&gt;Dedekind cuts&lt;/a&gt; to define the real numbers in terms of the rational numbers.&lt;br /&gt;&lt;br /&gt;Hopes of the infallibility of mathematics' new foundation were dashed by &lt;a href="http://en.wikipedia.org/wiki/Kurt_G%C3%B6del"&gt;Kurt Godel&lt;/a&gt;'s brilliant incompleteness theorem, described as “the most signal paper in logic in two thousand years.” It was possible to define mathematical ideas in set theoretic terms, and to formalize the axioms, and to automate the proof process, but at a cost. Godel proved the existence of mathematical truths that were formally undecidable -- they could neither be proved nor disproved. Hilbert had hoped that once mathematics was formalized, no stone would be left unturned, and all true mathematical statements would be provable. The story of Godel's theorem (not the history, just an outline of the proof itself) is a wonderful story, well told in Hofstatder's book &lt;a href="http://en.wikipedia.org/wiki/G%C3%B6del,_Escher,_Bach"&gt;Godel, Escher, Bach&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But getting back to semantic web stuff. Here are some basic ideas of OWL.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Everything is an instance of owl:Thing. Think of it as a base class like java.lang.Object.&lt;/li&gt;&lt;li&gt;Within an ontology, you have "instances", "classes", and "properties".&lt;/li&gt;&lt;li&gt;"Classes" are essentially sets. "Individuals" are elements of sets.&lt;/li&gt;&lt;li&gt;A "property" expresses some relationship between two individuals.&lt;/li&gt;&lt;li&gt;OWL includes representations for:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;unions and intersections of classes (sets)&lt;/li&gt;&lt;li&gt;the idea that a set is a subset of another&lt;/li&gt;&lt;li&gt;the idea that two sets are disjoint&lt;/li&gt;&lt;li&gt;the idea that two sets are the same set&lt;/li&gt;&lt;li&gt;the idea that two instances are the same instance&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Properties can by symmetric (like "sibling") or transitive (like "equals")&lt;/li&gt;&lt;li&gt;A property can be "functional", or a function in a mathematical sense. If p is functional, and you assert that p(x)=y and p(x)=z, then the reasoning engine will conclude that y=z.&lt;/li&gt;&lt;li&gt;One property can be declared to be the inverse of another.&lt;/li&gt;&lt;li&gt;One can declare a property to have specific classes (sets) as its domain and range.&lt;/li&gt;&lt;/ul&gt;It would be really nice if, at this point, I had some brilliantly illustrative examples of OWL hacking ready to include here. Hopefully those will be forthcoming.&lt;br /&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/9667563-4411384230784907873?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4411384230784907873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4411384230784907873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4411384230784907873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4411384230784907873'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/09/set-theory-owl-and-semantic-web.html' title='Set theory, OWL, and the Semantic Web'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-123978383479865925</id><published>2010-08-21T21:17:00.000-07:00</published><updated>2010-09-16T22:36:30.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><title type='text'>Setting up a small electronics lab</title><content type='html'>&lt;img align="right" src="http://static.sparkfun.com/images/products/09263-4_i_ma.jpg" /&gt;At &lt;a href="http://www.litl.com/"&gt;Litl&lt;/a&gt;, I will be setting up a small electrical engineering lab. What should I get? There's a lot of great stuff at &lt;a href="http://www.sparkfun.com/"&gt;SparkFun&lt;/a&gt;, and more at &lt;a href="http://www.digikey.com/"&gt;Digi-Key&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's my shopping list, all from Sparkfun. No, I'm not a fan boy. Thanks for asking. &lt;br /&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=9667563"&gt;&lt;/a&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8794"&gt;Diagonal cutters&lt;/a&gt;, $2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9141"&gt;Multimeter&lt;/a&gt;, $15&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=762"&gt;USB Bit Whacker&lt;/a&gt;, GPIO on the end of a USB cable, $25&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9263"&gt;MSO-19&lt;/a&gt; USB oscilloscope and logic analyzer, $250, looks pretty &lt;a href="http://www.linkinstruments.com/MSO-19%20Electronics%20Learning%20Lab%20supplement.pdf"&gt;cool&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9139"&gt;Jumper wires&lt;/a&gt;, $25&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9034"&gt;nRF24LU1+ breakout board&lt;/a&gt;, $35&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Total $352, which seems pretty reasonable for all that cool stuff.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Honorable mention, stuff that is not a near-term priority. Most of these are entirely non-work-related toys that just look fun.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.gssteched.com/R-ECG1.html"&gt;EKG kit&lt;/a&gt;, $45&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.totalphase.com/products/beagle_usb12/"&gt;USB protocol analyzer&lt;/a&gt;, $400&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://store.makerbot.com/cupcake-cnc/cupcake-cnc-deluxe-kit.html"&gt;Makerbot&lt;/a&gt;, $950, maybe later&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.trossenrobotics.com/bioloid-zigbee-wireless-module-set.aspx"&gt;Pair of Zigbee modules&lt;/a&gt;, $50&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IRobot's &lt;a href="http://store.irobot.com/product/index.jsp?productId=2591901&amp;amp;mr:referralID=NA&amp;amp;mr:trackingCode=10BC9975-E481-DE11-B7F3-0019B9C043EB"&gt;Create robotics development platform&lt;/a&gt;, $300&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nerdkits.com/store/"&gt;NerdKit&lt;/a&gt;, $80&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-123978383479865925?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/123978383479865925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=123978383479865925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/123978383479865925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/123978383479865925'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/08/setting-up-small-electronics-lab.html' title='Setting up a small electronics lab'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5027296825382384370</id><published>2010-08-14T20:38:00.000-07:00</published><updated>2011-01-16T11:12:41.846-08:00</updated><title type='text'>In Taiwan next week</title><content type='html'>I'm not a big traveler generally speaking, but my new job with &lt;a href="http://www.litl.com/"&gt;Litl&lt;/a&gt; is bringing me to &lt;a href="http://en.wikipedia.org/wiki/Taipei"&gt;Taipei&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Hsinchu"&gt;Hsinchu&lt;/a&gt; in &lt;a href="http://en.wikipedia.org/wiki/Taiwan"&gt;Taiwan&lt;/a&gt; for a few days next week. I'm excited and a little nervous. I've tried to pick up a few words of &lt;a href="http://en.wikipedia.org/wiki/Standard_Mandarin"&gt;Mandarin&lt;/a&gt; over the past week using &lt;a href="http://en.wikipedia.org/wiki/Rosetta_Stone_%28software%29"&gt;Rosetta Stone&lt;/a&gt;, but it's a tough language for an American with only dim memories of high school French.&lt;br /&gt;&lt;br /&gt;Hopefully I'll be posting some cool pictures soon, if I get a chance to wander anywhere interesting.&lt;br /&gt;&lt;br /&gt;Tuesday evening&lt;br /&gt;&lt;br /&gt;What the heck is Tuesday when you're 12 time zones from home? Here in Taiwan it's 8:30 PM. Back home in Massachusetts, it's 8:30 AM on Wednesday morning. Between the time difference and the jet lag, not a lot of luck in reasoning about time.&lt;br /&gt;&lt;br /&gt;I'm doing very slightly better with language, strangely. I've identified two glyphs. &lt;a href="http://www.chinavista.com/experience/hanzi/zi.gif"&gt;One&lt;/a&gt; (字) looks like a seven digit with a horizontal line through it. It's pronounced "tze" (the vowel is a &lt;a href="http://en.wikipedia.org/wiki/Schwa"&gt;schwa&lt;/a&gt;) and I've seen it occur at the ends of several words or small phrases but I don't know its meaning. The other, I can't remember now because I'm too jet-lagged. Another thing this morning was that I identified a glyph that I believe is a very recent invention without any of the historical roots of the other characters. It's an outline of the Red Cross symbols, with crossbars along the top and bottom edges, and my guess is that it indicates a hospital. Some of the &lt;a href="http://en.wikipedia.org/wiki/Chinese_character#Formation_of_characters"&gt;mechanics&lt;/a&gt; of how these characters are formed is fascinating.&lt;br /&gt;&lt;br /&gt;Today I visited Hsinchu with a couple of other engineers, one also from Litl, and one from Motorola. We did a bunch of debug on some boards that a contractor is designing for us.&lt;br /&gt;&lt;br /&gt;I'm surprised how normal things feel in Taiwan. I had expected it to feel more alien. But everything kinda fits and makes sense. It's interesting to be immersed in a culture that's a little different but not very, and a language that is thoroughly alien. (Though I suppose the clicking languages of Australian aborigines would be even more alien.)&lt;br /&gt;&lt;br /&gt;Friday evening, Taiwan time&lt;br /&gt;&lt;br /&gt;你好 East Coast folks! I should be back in about 24 hours. Just in time to liberate the cat from cat jail and spend the rest of Saturday morning napping.&lt;br /&gt;&lt;br /&gt;I really wish I'd gotten an earlier start on learning some Chinese and applied myself more diligently. It was frustrating to look around and see and hear all this interesting language and understand nearly none of it. Oh well, there should be more opportunities. I'm given to understand that my work will bring me to mainland China before too long.&lt;br /&gt;&lt;br /&gt;I also wish I'd thought to take more photos. I just totally spaced on the fact that I'd brought along a camera.&lt;br /&gt;&lt;br /&gt;Saturday evening, back home&lt;br /&gt;&lt;br /&gt;Still a bit dazed about time zones. Spent 18 hours on airplanes getting home, with a layover in SF long enough to stroll around Fisherman's Wharf. Both airplanes were useless for sleeping so I needed to nap. Gonna try to use melatonin to get my biorhythms resynchronized.&lt;br /&gt;&lt;br /&gt;I think I was mistaken in thinking the Red-Cross-like character was a recent invention. I later saw other usages that were inconsistent with that theory. It just doesn't feel calligraphic to me in the same way as the rest of the written language.&lt;br /&gt;&lt;br /&gt;Here's something humorous: most of the comments to most of my blog postings are in Chinese, with a string of periods, each an HTML link to some Chinese porn site. They're doing this to try to crank up the Google ratings of their porn industry, obviously. The same is true of this posting, there is currently one comment from a friend in Kolkata and four of these porn-site-promoting comments. It just seems kinda funny that they're in response to a posting about visiting Taiwan. I dunno, it sounded funnier when I first thought of it. If anybody knows how to block such comments on one's blog without blocking any legitimate comments from the same geographical area, I'd love to hear about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5027296825382384370?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5027296825382384370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5027296825382384370' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5027296825382384370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5027296825382384370'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/08/in-taiwan-next-week.html' title='In Taiwan next week'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6075721741483632331</id><published>2010-08-12T19:57:00.000-07:00</published><updated>2011-03-21T11:10:53.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='China'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>This Google-Verizon deal and Net Neutrality and all that...</title><content type='html'>Like everybody else, I'm disappointed with Google on this one. The stuff about the wired Internet is good, it's actually a stronger stance on net neutrality than has existed to date. But the wireless Internet is now supposed to be the Wild West of high tech, a lawless place where anybody big enough can do anything they want. Google should know better. But Google is not the important party in all this.&lt;br /&gt;&lt;br /&gt;My feelings about Verizon are very different. Verizon paid for the network (having purchased it from its builders and/or previous owners) and now pays to maintain it. When the network in my neighborhood goes down, the trucks that come to fix it are Verizon trucks.&amp;nbsp;It's fair and reasonable for Verizon to decide which packets its network will carry, and how those packets will be prioritized.&lt;br /&gt;&lt;br /&gt;What would not be fair or reasonable would be to allow Verizon to block other efforts to build traffic-bearing networks.&lt;br /&gt;&lt;br /&gt;I would love to see a parallel Internet built by hobbyists and local communities and small businesses.&amp;nbsp;A few years back there was a wonderful book called &lt;a href="http://oreilly.com/catalog/9780596005023"&gt;&lt;i&gt;Building Wireless Community Networks&lt;/i&gt;&lt;/a&gt; by Rob Flickinger. It seemed to me that Flickinger envisioned a nation-wide and perhaps world-wide community network. Maybe I was projecting my own hopes, but I like to think he might have shared that sentiment.&lt;br /&gt;&lt;br /&gt;The right response to the Google-Verizon deal is not to complain about Google's duplicity. They are a publicly traded company, with all that entails. The right response is to start building a network that isn't supported by already-large corporations, where individuals and small new companies don't need to worry about policy decisions by the Googles and Verizons of the world.&lt;br /&gt;&lt;br /&gt;Maybe this should replace Amateur Radio, which has been in decline since the Internet came along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6075721741483632331?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6075721741483632331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6075721741483632331' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6075721741483632331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6075721741483632331'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/08/this-google-verizon-deal-and-net.html' title='This Google-Verizon deal and Net Neutrality and all that...'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6508527702107581767</id><published>2010-07-31T22:18:00.000-07:00</published><updated>2010-08-01T08:59:18.369-07:00</updated><title type='text'>Evolution and randomness</title><content type='html'>Lately I've been watching a video of Richard Dawkins reading from his new book "The Greatest Show on Earth". As always, he is fascinating and lucid.&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="264" width="400"&gt;&lt;param name="flashvars" value="webhost=fora.tv&amp;clipid=9962&amp;cliptype=clip" /&gt;&lt;param name="allowScriptAccess" value="always"  /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="movie" value="http://fora.tv/embedded_player" /&gt;&lt;embed flashvars="webhost=fora.tv&amp;clipid=9962&amp;cliptype=clip" src="http://fora.tv/embedded_player" width="400" height="264" allowScriptAccess="always" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Sometimes people criticize evolution on the grounds that "it's all about randomness". They ask questions like this:&lt;br /&gt;&lt;blockquote&gt;If I spread a bunch of airplane parts on a football field, and a tornado comes around and stirs up all the parts, what is the likelihood that the result will be a correctly assembled, functioning airplane? This is the same likelihood that the human body (or the eye, or the brain, or the hand) could have arisen out of evolution, a process characterized entirely by randomness.&lt;/blockquote&gt;Evolution consists of two parts. One is variation, which can be random but need not be, and the other is selection, which is not random at all.&amp;nbsp;The part of evolution that is random, the point mutations and crossovers among chromosomes, is not where its explanatory power resides. If that were the whole story, then complex forms really would be no more likely than working airplanes popping out of tornadoes. These random bits of variation merely supply the variety upon which the filter of selection operates.&lt;br /&gt;&lt;br /&gt;It is in selection that the explanatory power of evolution resides. Selection is the non-random part of evolution, where the signal (this trait works) is separated from the noise (that trait doesn't work). It is because selection is consistent and non-random that we see the re-appearance of traits at very different times and places in the history of life. Tyrannosaurus Rex and my cat both have sharp claws. Are cats direct ancestors of T. Rex, and did those sharp-claw genes somehow survive tens of millions of years unmodified? No, but they are both hunting predators faced with problems that sharp claws solve. Likewise, complex eyes with focusing lenses have independently evolved dozens of times, because clear vision is useful.&lt;br /&gt;&lt;br /&gt;Randomness in the physical world is of two types, fundamental randomness and consequent randomness. Fundamental randomness is the stuff of quantum mechanics. When particles appear to act randomly, are there &lt;a href="http://en.wikipedia.org/wiki/Hidden_variable_theory"&gt;hidden variables&lt;/a&gt;&amp;nbsp;which, if we could see them, we'd be able to see through the apparent randomness to an underlying determinism? If there aren't, then the universe includes a component of fundamental randomness -- some things are just random and there's nothing you can do about it. My understanding is that it's still an open question among physicists whether fundamental randomness exists in the universe, but the weight of opinion favors it, as experimentation has ruled out &lt;a href="http://en.wikipedia.org/wiki/Local_hidden_variable_theory"&gt;local hidden variables&lt;/a&gt;&amp;nbsp;and only non-local hidden variables remain as a possibility.&lt;br /&gt;&lt;br /&gt;Consequent randomness is the appearance of randomness among things that are individually deterministic. A &lt;a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function"&gt;cryptographic hash algorithm&lt;/a&gt; is a good example. If we feed this deterministic process with a deterministic input sequence (e.g. 1, 2, 3, 4, 5...) what we get is an output sequence of large integers that look entirely random. They pass every statistical test of randomness with flying colors. Yet in some important sense they aren't random at all, because we can start the input sequence over and we get exactly the same output sequence repeated. So we have apparent randomness arising from deterministic pieces&amp;nbsp;in a &lt;a href="http://en.wikipedia.org/wiki/Rube_Goldberg_machine"&gt;complicated Rube Goldberg fashion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Consequent randomness can easily arise where there is a mixing of data with different explanations or from different domains. Peoples' cholesterol levels and their telephone numbers are unrelated, so if telephone numbers are put in order of the person's cholesterol level, the sequence appears random.&lt;br /&gt;&lt;br /&gt;Often people object to evolution on the grounds that it requires fundamental randomness, and these same people often find the notion of fundamental randomness personally abhorrent, and so they accept this situation as a disproof of the theory of evolution. In fact, evolution works just fine when variation is driven by consequent randomness. All genetic algorithms running on computers work this way.&lt;br /&gt;&lt;br /&gt;In his talk above, Dawkins discusses a much better potential disproof of evolution, for which he thinks the creationists ought to be scrambling to find evidence. If we found fossils in the wrong geological strata, for instance a rabbit fossil among dinosaur fossils or trilobite fossils, then the case for evolution would be significantly weakened. Such fossils, which Dawkins calls "anachronistic", have never been found among the many hundreds of thousands of fossils recorded in natural history museums and universities around the world. While we may find gaps in the fossil record, we never find such temporal discrepancies.&lt;br /&gt;&lt;br /&gt;So why do I personally believe in evolution? I have two answers to that. The first is that the entire process can be done on a computer. It's a standard thing, people have been doing it for years, it reliably solves hard problems, it's a classic technique in computer science. For me to disbelieve in the efficacy of genetic algorithms would be akin to an auto mechanic whose personal convictions prevent him believing in the inflation of tires, while his colleagues inflate tires on a daily or weekly basis in the shop around him.&lt;br /&gt;&lt;br /&gt;Second, the fundamental idea of evolution is so simple. It has so few parts. There are only a very small number of places it could possibly go wrong. If it went wrong in one of those places, no malicious cabal or conspiracy of evolutionary biologists could cover up its failure for long. The logic of evolution is simply too simple and too compelling to be incorrect.&lt;br /&gt;&lt;br /&gt;Objectors to evolution are sometimes motivated by the fear that it rules out the possibility of an afterlife. Having lost loved ones and myself being mortal, I have some appreciation for this concern. Personally I cannot rule out the possibility of a universe of &lt;a href="http://en.wikipedia.org/wiki/Dualism_(philosophy_of_mind)"&gt;Cartesian dualism&lt;/a&gt;, and in fact I very much hope it's the case. As far as I am aware the strongest arguments against dualism are &lt;a href="http://en.wikipedia.org/wiki/Occam%27s_razor"&gt;Occam's razor&lt;/a&gt; and Dennett's objection that in a dualist universe, a philosopher like himself would have no hope of understanding or explaining anything because everything would be arbitrary. I also appreciate Dennett's position, but it seems to me to lack imagination -- perhaps there is a dualism that is lawful, understandable, and explainable, and which could ultimately become part of science, but which also allows for some piece of a person's mind or personality that outlasts the physical body. Then it might be possible that such minds and physical bodies might undergo parallel processes of evolution as organisms increase in complexity over billions of years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6508527702107581767?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6508527702107581767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6508527702107581767' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6508527702107581767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6508527702107581767'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/07/evolution-and-randomness.html' title='Evolution and randomness'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6830444305509399972</id><published>2010-07-29T20:33:00.000-07:00</published><updated>2010-07-29T20:33:34.693-07:00</updated><title type='text'>Android app: share your location</title><content type='html'>In December I wrote a very lame Android app. It had a couple of buttons, a date picker, and a green background. The buttons incremented and decremented a counter. Clay Shirky's&lt;a href="http://www.youtube.com/watch?v=qu7ZpWecIS8"&gt; talk on cognitive surplus&lt;/a&gt; referred to &lt;a href="http://icanhascheezburger.com/"&gt;LOLcats&lt;/a&gt; as the minimal creative act, the feeblest teeny quantum of effort one can make in a creative direction. He only said that because he wasn't familiar with my first Android app.&lt;br /&gt;&lt;br /&gt;My second app, written over the last few days, is way cooler. So much so that I'm willing to post&amp;nbsp;&lt;a href="http://github.com/wware/stuff/tree/master/android_apps/LocationSender/"&gt;the source code&lt;/a&gt;, risking public humiliation. Good thing nobody ever reads this blog.&lt;br /&gt;&lt;br /&gt;This app actually serves a purpose. The Motorola Droid phone can find your location using its GPS receiver, but there is no convenient way to then share that location information with a friend (via email, SMS, Twitter, or what have you). The app determines your location, converts it to a Google Maps URL, and then you copy/paste it into an email, a SMS message, or a tweet.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D8UbavaesGg/TFJD1Bf6q-I/AAAAAAAAApU/Bf1X9teHFZ8/s1600/location.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_D8UbavaesGg/TFJD1Bf6q-I/AAAAAAAAApU/Bf1X9teHFZ8/s320/location.png" /&gt;&lt;/a&gt;&lt;/div&gt;When I tweet a location from my Droid phone it looks like this. I don't know if that location bit appearing under the tweet (which allowed me to pop up the map) came from the location I tweeted, or whether it was some kind of metadata that the phone's Twitter client somehow attached to the tweet separately.&lt;br /&gt;&lt;br /&gt;If you have some strange urge to try this on your own Android phone, you can download &lt;a href="http://willware.net/Location%20Sender.apk"&gt;the unsigned APK file&lt;/a&gt;, load it onto your phone's SD card, and install it with AppInstaller, available in the Android app market.&lt;br /&gt;&lt;br /&gt;The interesting things I ran into with this app are mostly in the &lt;a href="http://github.com/wware/stuff/blob/master/android_apps/LocationSender/src/net/willware/locationsender/LocationSender.java"&gt;single Java source file&lt;/a&gt;. I learned that you need to make sure that your onPause and onResume methods call the parent. I think (not sure) it's a bad idea to call &lt;a href="http://developer.android.com/reference/android/location/LocationManager.html#removeUpdates(android.location.LocationListener)"&gt;removeUpdates()&lt;/a&gt; on a &lt;a href="http://developer.android.com/reference/android/location/LocationListener.html"&gt;LocationListener&lt;/a&gt; more than once.&lt;br /&gt;&lt;br /&gt;Still tinkering and figuring my way around Android's JSR-179 implementation. Interesting cool stuff. I look forward to writing an Android client for some sort of web-accessible database thing that I'd probably throw up on App Engine at some point, when I can come up with a worthwhile application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6830444305509399972?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6830444305509399972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6830444305509399972' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6830444305509399972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6830444305509399972'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/07/android-app-share-your-location.html' title='Android app: share your location'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D8UbavaesGg/TFJD1Bf6q-I/AAAAAAAAApU/Bf1X9teHFZ8/s72-c/location.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3889437049532031871</id><published>2010-06-17T21:09:00.000-07:00</published><updated>2010-07-05T08:34:09.937-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Website design, lessons learned, part 1</title><content type='html'>I recently got a fortune cookie that said something along these lines:&lt;br /&gt;&lt;blockquote&gt;Skillful actions come from experience. Experience comes from unskillful actions.&lt;/blockquote&gt;Maybe I can share some experience and save somebody a little grief. I anticipate I'll post more things along these lines so I'm calling this "part 1".&lt;br /&gt;&lt;br /&gt;I've spent some months building a Django website. The website has been growing more complex and the requirement has been a moving target, so I have been developing practices accordingly.&lt;br /&gt;&lt;br /&gt;The first thing is automated testing. We all know it's good, but we don't always remember just how good. Plan your test strategy early.&lt;br /&gt;&lt;br /&gt;Django's templating system works well with nested Python dictionaries, so a data structure like&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; {"foo":&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {"bar":&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {"baz": "some content here"},&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... }&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; ... }&lt;/div&gt;can be included in an HTML page with a notation like this.&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;Let's put {{ foo.bar.baz }} in our web page.&lt;/div&gt;Python dictionaries are essentially the same as JSON data structures. So all my view functions produce nested Python dictionaries, which can either be plugged into HTML templates, or returned as JSON if "json=1" is present in the HTTP request parameters. In the short term, the JSON output makes it very easy to write automated tests that don't have to scrape HTML to find the content. In the longer term, I'll want JSON when I move to AJAX some day.&lt;br /&gt;&lt;br /&gt;The second topic is URL design. I've discovered a new way to write spaghetti code -- I've produced a profusion of URLs as I've grown the functionality rapidly. Each URL ("/foo/", "/bar/", "/profile/", etc) has an entry in urls.py and a function in views.py. If you're careless about planning, these tend to sprawl.&lt;br /&gt;&lt;br /&gt;I think the right thing is to draw something like a state machine diagram for your website. The nodes are the URLs, each mapping to a HTML page. The edges are the actions users take to go from page to page, clicking buttons or controls or submitting HTML forms. Somewhere in there you need notations for the stuff happening in the back end, things being fetched from the DB or stored, various computations being done, various complex data structures being constructed. My thoughts on how to construct a proper state diagram are not yet complete.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwillware.blogspot.com%2F2010%2F06%2Fwebsite-design-lessons-learned-part-1.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;height=80" style="border: medium none; height: 80px; overflow: hidden; width: 300px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3889437049532031871?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3889437049532031871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3889437049532031871' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3889437049532031871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3889437049532031871'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/06/website-design-lessons-learned-part-1.html' title='Website design, lessons learned, part 1'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-1986864281662130632</id><published>2010-05-10T15:18:00.000-07:00</published><updated>2010-05-13T07:14:35.415-07:00</updated><title type='text'>Saint-Saëns' Symphony No. 3 in C minor</title><content type='html'>Sections &lt;a href="http://www.youtube.com/watch?v=4bV11c91D4k"&gt;1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=_-KEVlAbyk8"&gt;2&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=ic8-5XvpHhc"&gt;3&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=TCKiZRWyv20"&gt;4&lt;/a&gt; on Youtube, &lt;a href="http://en.wikipedia.org/wiki/Symphony_No._3_%28Saint-Sa%C3%ABns%29"&gt;Wikipedia article&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;The &lt;b&gt;Symphony No. 3 in &lt;a href="http://en.wikipedia.org/wiki/C_minor" title="C minor"&gt;C minor&lt;/a&gt;&lt;/b&gt;, &lt;a href="http://en.wikipedia.org/wiki/Opus_number" title="Opus number"&gt;Op.&lt;/a&gt; 78, was completed by &lt;a href="http://en.wikipedia.org/wiki/Camille_Saint-Sa%C3%ABns" title="Camille Saint-Saëns"&gt;Camille Saint-Saëns&lt;/a&gt; in 1886 at what was probably the artistic zenith of his career. It is also popularly known as the "&lt;i&gt;Organ Symphony&lt;/i&gt;", even though it is not a true &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Symphony_for_organ" title="Symphony for organ"&gt;symphony for organ&lt;/a&gt;, but simply an orchestral symphony where two sections out of four use the &lt;a href="http://en.wikipedia.org/wiki/Pipe_organ" title="Pipe organ"&gt;pipe organ&lt;/a&gt;. The French title of the work is more accurate: &lt;i&gt;Symphonie No. 3 "avec orgue"&lt;/i&gt; (with organ).&lt;br /&gt;&lt;br /&gt;Of composing the work Saint-Saëns said that he had &lt;i&gt;"given everything to it I was able to give."&lt;/i&gt; The composer seemed to know it would be his last attempt at the symphonic form, and he wrote the work almost as a type of "history" of his own career: virtuoso piano passages, brilliant orchestral writing characteristic of the Romantic period, and the sound of a cathedral-sized pipe organ. The work was dedicated to Saint-Saëns's friend &lt;a href="http://en.wikipedia.org/wiki/Franz_Liszt" title="Franz Liszt"&gt;Franz Liszt&lt;/a&gt;, who died that year, on July 31, 1886.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%253A%252F%252Fwillware.blogspot.com%252F2010%252F05%252Fsaint-saens-symphony-no-3-in-c-minor.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=light&amp;amp;height=60" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:60px;" allowTransparency="true"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-1986864281662130632?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/1986864281662130632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=1986864281662130632' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1986864281662130632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1986864281662130632'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/05/saint-saens-symphony-no-3-in-c-minor.html' title='Saint-Saëns&apos; Symphony No. 3 in C minor'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4320732620851109477</id><published>2010-05-03T08:51:00.000-07:00</published><updated>2010-06-17T20:30:56.972-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='steampunk'/><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><title type='text'>Enjoyed a Steampunk Festival, later got an idea of my own</title><content type='html'>On Saturday I went to the &lt;a href="http://www.crmi.org/steampunk2010.pdf"&gt;New England Steampunk Festival&lt;/a&gt; in Waltham, Massachusetts. It was delightful. A lot of people in Victorian dress with complicated goggles, and elaborate gadgets hanging off their belts or strapped to their backs. I took some pictures and did some twittering while I was there.&lt;br /&gt;&lt;br /&gt;Steampunk has its &lt;a href="http://theclockworkcentury.com/?p=165"&gt;apologists&lt;/a&gt;, but I'm not sure it needs them. I heard a few complaints that some gadgets were simply props and did nothing, and some gadgets were built with obviously modern pieces. To the first I'd say that steampunk is a style, not a technology (the enthusiasts are very clear on this, and unashamedly use the word "prop" for their toys) and to the second, I'd say that you can't expect them all to be equally skilled and ambitious, and if they're having fun and not hurting anyone, is it really so terrible that you can see the plastic Coke bottle cap on their ray-gun?&lt;br /&gt;&lt;br /&gt;I'm surprised that there aren't more steampunk graphic novels. That strikes me as a natural fit. I also wish they weren't quite so obsessed with "airships", the way Fifties sci-fi was obsessed with flying saucers and robots.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Attending Steampunk Festival, Charles River Museum of Industry and Innovation, Waltham MA&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Steam engines http://twitgoo.com/u4fvs&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i44.tinypic.com/ejy0wn.jpg" width="400px" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;More steampunk stuff http://twitgoo.com/u4g12&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i42.tinypic.com/16igmq8.jpg" width="400px" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The guy calls it a "spirit harvester" http://twitgoo.com/u4g74&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i43.tinypic.com/2usweg1.jpg" width="400px" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Best costume imho http://twitgoo.com/u4gb6&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I later found this woman's &lt;a href="http://www.blogger.com/post-edit.g?blogID=9667563&amp;amp;postID=4320732620851109477"&gt;blog&lt;/a&gt;, mostly a compendium of sci-fi and fantasy events happening around New England. Useful and interesting.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm5.static.flickr.com/4005/4710344429_ae141a3bb0_b_d.jpg" width="400px" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Won a piece of optometry equipment in the raffle at the New England Steampunk Festival in Waltham MA http://twitgoo.com/u4yn5&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i44.tinypic.com/qs8w2h.jpg" width="400px" /&gt;&lt;br /&gt;&lt;br /&gt;The next day I was thinking about pipe organs, and about all the cool stuff I saw on Saturday, and it occurred to me that it would be feasible (even for me) to build a small USB-controlled pipe organ rank. My one area of uncertainty is the solenoid valves, it seems difficult to find them at a price that's affordable if I want to put in fifty-or-so pipes.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm5.static.flickr.com/4072/4710344439_4bb2c9061e_b_d.jpg" width="400px" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://www.facebook.com/plugins/like.php?href=http%253A%252F%252Fwillware.blogspot.com%252F2010%252F05%252Fenjoyed-steampunk-festival-later-got.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=light&amp;amp;height=60" style="border: medium none; height: 60px; overflow: hidden; width: 300px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4320732620851109477?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4320732620851109477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4320732620851109477' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4320732620851109477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4320732620851109477'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/05/enjoyed-steampunk-festival-later-got.html' title='Enjoyed a Steampunk Festival, later got an idea of my own'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i44.tinypic.com/ejy0wn_th.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5544181378403545293</id><published>2010-04-18T05:33:00.000-07:00</published><updated>2010-05-13T07:15:16.340-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><title type='text'>Autosci talk at Bar Camp Boston</title><content type='html'>Yesterday I had fun giving a talk on the &lt;a href="http://willware.blogspot.com/search/label/automation%20of%20science"&gt;automation of science&lt;/a&gt; at &lt;a href="http://www.barcampboston.org/"&gt;Bar Camp Boston&lt;/a&gt;. I was very fortunate to (A) have very little to say myself, so that I quickly got out of the way for others to discuss, and (B) have some very smart people in the room who got the idea immediately, some of them able to give the scientist's-eye view of this idea.&lt;br /&gt;&lt;br /&gt;Discussion centered around a few topics. One was how comprehensive a role would computers play in the entire scientific process. There seemed to be consensus that computers could easily identify statistical patterns in data, could perform symbolic regression in cases of limited complexity and not too many variables, but that in the creation of scientific theories and hypotheses, there are necessary intuitive leaps that a machine can't make. Personally I believe that's true but I imagine that computers might demonstrate an ability to make leaps we can't make as humans, and I have no idea what those leaps would look like because they would be the product of an alien intelligence. If no such leaps occur, at least the collection of tools available to human scientists will hopefully have grown in a useful direction.&lt;br /&gt;&lt;br /&gt;Another topic was the willingness of scientists to provide semantic markup for research literature. Only those expert in the field are qualified to provide such markup since it requires an in-depth understanding of the field as a whole, and the paper's reasoning process in particular. It's also likely to be a lot of work, at least initially, and there is as yet no incentive to offer scientists in exchange for such work. The notion of posting papers on some kind of wiki and hoping that semantic markup could be crowd-sourced was quickly dismissed. Crowd-sourcing doesn't work when there is a very precise correct answer and the number of people with that answer is very small.&lt;br /&gt;&lt;br /&gt;There has been a lot of Twitter traffic around Bar Camp Boston, and I was able to find a few comments on my talk afterward. It looks like people enjoyed it and found it stimulating and engaging, so that's very cool. It turned out to be a good limbering-up for an immediately following talk on Wolfram Alpha. I found one particularly evocative tweet:&lt;br /&gt;&lt;blockquote&gt;Has anyone approached a CS journal to have their content semantically marked up? #BCBos @BarCampBoston&lt;/blockquote&gt;Thinking about that question, I realized that computer science is the right branch of science to begin this stuff, and that the way to make it most palatable to scientists is to publish papers that demonstrate how to do semantic markup as easily as possible at time of publication (not as a later retrofit), how a scientist can benefit himself or herself by doing that work, and how to do interesting stuff with the markup of papers that have already been published. My quick guess is that some sort of &lt;a href="http://en.wikipedia.org/wiki/Literate_programming"&gt;literate programming&lt;/a&gt; approach (&lt;a href="http://en.literateprograms.org/LiteratePrograms:Welcome"&gt;wiki&lt;/a&gt;) is appropriate. So lots to think about.&lt;br /&gt;&lt;br /&gt;If you attended my talk, thanks very much for being there. I had a lot of fun, and hope you did too.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%253A%252F%252Fwillware.blogspot.com%252F2010%252F04%252Fautosci-talk-at-bar-camp-boston.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=light&amp;amp;height=60" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:60px;" allowTransparency="true"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5544181378403545293?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5544181378403545293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5544181378403545293' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5544181378403545293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5544181378403545293'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/04/autosci-talk-at-bar-camp-boston.html' title='Autosci talk at Bar Camp Boston'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-24908434859405047</id><published>2010-04-12T07:25:00.000-07:00</published><updated>2010-05-13T07:15:33.112-07:00</updated><title type='text'>A Formal System For Euclid's Elements</title><content type='html'>I came across this tidbit on the &lt;a href="http://lambda-the-ultimate.org/node/3899"&gt;Lambda the Ultimate&lt;/a&gt; website. It's a pointer to a juicy &lt;a href="http://journals.cambridge.org/repo_A674ohNM"&gt;paper&lt;/a&gt; by some Carnegie Mellon folks.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Abstract.&lt;/b&gt; We present a formal system, E, which provides a faithful model of the proofs in Euclid’s Elements, including the use of diagrammatic reasoning.&lt;/blockquote&gt;"Diagrammatic reasoning" is the interesting part. People have recognized the Elements as an exemplar of rigorous reasoning for many centuries, but it took some time for the question to emerge, "are the diagrams a necessary component of the logical argument?" Liebniz believed they were not:&lt;br /&gt;&lt;blockquote&gt;...it is not the figures which furnish the proof with geometers, though the style of the exposition may make you think so. The force of the demonstration is independent of the figure drawn, which is drawn only to facilitate the knowledge of our meaning, and to fix the attention; it is the universal propositions, i.e. the definitions, axioms, and theorems already demonstrated, which make the reasoning, and which would sustain it though the figure were not there.&lt;/blockquote&gt;The authors note that "there is no [historical] chain linking our contemporary diagrams with the ones that Euclid actually drew; it is likely that, over the years, diagrams were often reconstructed from the text". Their abstract seems to say that the design of E recognizes some essential role for the diagrams, so I assume one must exist. I haven't finished reading the paper yet. But the whole thing is very interesting.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%253A%252F%252Fwillware.blogspot.com%252F2010%252F04%252Fformal-system-for-euclids-elements.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=light&amp;amp;height=60" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:60px;" allowTransparency="true"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-24908434859405047?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/24908434859405047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=24908434859405047' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/24908434859405047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/24908434859405047'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/04/formal-system-for-euclids-elements.html' title='A Formal System For Euclid&apos;s Elements'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4714209650371859159</id><published>2010-04-10T08:43:00.000-07:00</published><updated>2010-05-13T07:15:50.360-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='specifications'/><title type='text'>Learning to live with software specifications</title><content type='html'>We software developers have a knee-jerk hatred of specifications. Rather than write a document describing work we plan to do, we would rather throw together a quick prototype and grow it into the final system. We sometimes feel like specs are for liberal-arts sissies and pointy-haired bosses. Our prehistoric brains want us to dismiss specifications as a waste of time or even an intentional misdirection of energy.&lt;br /&gt;&lt;br /&gt;The truth of it is that specs build consensus between developers, testers, tech writers, managers, and customers. They make sure everybody agrees about what to build, how to test it, how to write a user manual for it, and what the priorities are.&lt;br /&gt;&lt;br /&gt;The Agile guys talk about the &lt;a href="http://www.ambysoft.com/essays/whyAgileWorksFeedback.html"&gt;exponentially increasing cost&lt;/a&gt; of fixing a bug. The later in the process you find that bug, the more troublesome and expensive it is to fix it. Fixing bugs in code is hard, even prototype code, and fixing text is easy.&lt;br /&gt;&lt;br /&gt;Let's learn to trick our brains to work around our reluctance. The &lt;a href="http://headfirstlabs.com/"&gt;Head-First books&lt;/a&gt; always start with a &lt;a href="http://www.headfirstlabs.com/readme.php"&gt;great little explanation&lt;/a&gt; about how our prehistoric brain circuitry divvies up our attention, classifying things as interesting or boring, and determines what sticks in our memories. Sesame Street learned how to make stuff sticky by&lt;br /&gt;&lt;ul&gt;&lt;li&gt;repetition&lt;br /&gt;&lt;/li&gt;&lt;li&gt;lighting up more brain circuitry&lt;br /&gt;&lt;/li&gt;&lt;li&gt;infusing the topic with emotional content&lt;br /&gt;&lt;/li&gt;&lt;li&gt;relating it to things that were already sticky&lt;/li&gt;&lt;/ul&gt;One way to infuse your spec with emotional content would be to make it a turf war. That hooks into all our brain circuitry for tribes and feuds. But turf wars are traumatic and damaging to people and projects, so let's not do this.&lt;br /&gt;&lt;br /&gt;To light up more brain circuitry, sketch out pieces of the spec on a big whiteboard. Draw a lot of pictures and diagrams. Use different colored markers. Get a few people together and generate consensus (not a turf war), and ask them to help identify issues that you forgot. That meeting is called a &lt;a href="http://philip.greenspun.com/software/design-review"&gt;design review&lt;/a&gt;, like a code review for specs.&lt;br /&gt;&lt;br /&gt;Who should write and own the spec?&amp;nbsp; Part three of Joel Spolsky's great four-part (&lt;a href="http://www.joelonsoftware.com/articles/fog0000000036.html"&gt;1&lt;/a&gt;, &lt;a href="http://www.joelonsoftware.com/articles/fog0000000035.html"&gt;2&lt;/a&gt;, &lt;a href="http://www.joelonsoftware.com/articles/fog0000000034.html"&gt;3&lt;/a&gt;, &lt;a href="http://www.joelonsoftware.com/articles/fog0000000033.html"&gt;4&lt;/a&gt;) article answers this question, drawing on his experience at Microsoft. One person should write and own the spec, and the programmers should &lt;i&gt;not&lt;/i&gt; report to that person. At Microsoft, that person is a program manager.&lt;br /&gt;&lt;br /&gt;It's important to differentiate between &lt;br /&gt;&lt;ul&gt;&lt;li&gt;a functional spec (what the user sees and experiences, what the customer wants) dealing with features, screens, dialog boxes, UI and UX, work flow &lt;/li&gt;&lt;li&gt;and a technical spec (the stuff under the hood) dealing with system components, data structures and algorithms, communication protocols, database schemas, tools, languages, test methodologies, and external dependencies which may have hard-to-predict schedule impacts&lt;/li&gt;&lt;/ul&gt;Write the functional spec first, then the technical spec, then the code. If you love &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;test-driven development&lt;/a&gt; then write the specs, then the tests, then the code.&lt;br /&gt;&lt;br /&gt;Joel's article includes some great points on &lt;a href="http://www.joelonsoftware.com/articles/fog0000000033.html"&gt;keeping the spec readable&lt;/a&gt;. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use humor. It helps people stay awake.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write simply, clearly, and briefly. Don't pontificate.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Re-read your own spec, many times. Eat your own literary dogfood. If you can't stay awake, nobody else will either.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Avoid working to a template unless politically necessary.&lt;/li&gt;&lt;/ul&gt;How do you know when the spec is done? &lt;br /&gt;&lt;ul&gt;&lt;li&gt;The functional spec is done when the system can be designed, built, tested, and deployed without asking more questions about the user interface or user experience.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The technical spec is done when each component of the system can be designed, built, tested, and deployed without asking more questions about the rest of the system.&lt;/li&gt;&lt;/ul&gt;This doesn't mean that these documents can never be updated or renegotiated. But the goal is to aim for as little subsequent change as possible.&lt;br /&gt;&lt;br /&gt;I am still sorely tempted by the idea of a quick prototype, an "executable spec" that exposes bugs in design or logical consistency. Maybe it's OK to co-develop this with the spec, or tinker with it on one's own time, or consider it as a first phase of the coding. I'm still sorting this out. The basic rationale of a spec, that fixing bugs in text is easier and cheaper than fixing bugs in code, still needs to be observed.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%253A%252F%252Fwillware.blogspot.com%252F2010%252F04%252Flearning-to-live-with-software.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=light&amp;amp;height=60" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:60px;" allowTransparency="true"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4714209650371859159?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4714209650371859159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4714209650371859159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4714209650371859159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4714209650371859159'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/04/learning-to-live-with-software.html' title='Learning to live with software specifications'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-689542686747991666</id><published>2010-04-04T09:49:00.000-07:00</published><updated>2010-05-13T07:16:09.012-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbook'/><category scheme='http://www.blogger.com/atom/ns#' term='tablet'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>Don't covet Apple's new iPad</title><content type='html'>Back in the days of its founding, &lt;a href="http://en.wikipedia.org/wiki/Apple_Inc."&gt;Apple&lt;/a&gt; championed hobbyists and experimenters, even including &lt;a href="http://en.wikipedia.org/wiki/Circuit_diagram"&gt;circuit board schematics&lt;/a&gt; with the Apple ][+ to help people who wanted to tinker with the electronics. Not so now. &lt;a href="http://en.wikipedia.org/wiki/Cory_Doctorow"&gt;Cory Doctorow&lt;/a&gt; (brilliant guy, read his &lt;a href="http://en.wikipedia.org/wiki/Down_and_Out_in_the_Magic_Kingdom"&gt;Disneyland sci-fi novel&lt;/a&gt;) recently &lt;a href="http://www.boingboing.net/2010/04/02/why-i-wont-buy-an-ipad-and-think-you-shouldnt-either.html"&gt;blogged&lt;/a&gt; about how Apple has switched its loyalty to the &lt;a href="http://www.cbojar.net/issues/copyright/"&gt;DRM-and-eternal-copyright crowd&lt;/a&gt;, and like the &lt;a href="http://en.wikipedia.org/wiki/IPhone"&gt;iPhone&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/IPad"&gt;iPad&lt;/a&gt; reflects this. Consequently, the common temptation to covet an iPad is an evil one.&lt;br /&gt;&lt;br /&gt;I like my &lt;a href="http://en.wikipedia.org/wiki/Android_%28operating_system%29"&gt;Android&lt;/a&gt; phone (a &lt;a href="http://en.wikipedia.org/wiki/Motorola_Droid"&gt;Motorola Droid&lt;/a&gt; from &lt;a href="http://en.wikipedia.org/wiki/Verizon_Wireless"&gt;Verizon&lt;/a&gt;) except for the PHONE part, the one thing it does poorly. Every &lt;a href="http://www.android.com/market/"&gt;other function&lt;/a&gt;, I adore. Also I'd like a bigger keyboard and screen, maybe &lt;a href="http://en.wikipedia.org/wiki/Amazon_Kindle"&gt;Kindle&lt;/a&gt; size. So: Android tablet with bigger keyboard and screen, and no phone (therefore no messy dependency on &lt;a href="http://en.wikipedia.org/wiki/List_of_mobile_network_operators"&gt;mobile carriers&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I wouldn't want to try to build a tablet from scratch, but &lt;a href="http://www.alwaysinnovating.com/touchbook/"&gt;the Touch Book&lt;/a&gt; from &lt;a href="http://www.alwaysinnovating.com/home/index.htm"&gt;AlwaysInnovating&lt;/a&gt; looks good. The tablet piece (sans keyboard, which makes it a netbook) is $300, loaded with their custom &lt;a href="http://en.wikipedia.org/wiki/Linux"&gt;Linux OS&lt;/a&gt;. The OS can be replaced with &lt;a href="http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29"&gt;Ubuntu&lt;/a&gt;, Android, &lt;a href="http://en.wikipedia.org/wiki/Google_Chrome_OS"&gt;Chrome&lt;/a&gt;, etc. An &lt;a href="http://en.wikipedia.org/wiki/Secure_Digital"&gt;SD card&lt;/a&gt; makes it easy to get apps and files onto and off the tablet. There's a &lt;a href="http://www.alwaysinnovating.com/wiki/index.php/Main_Page"&gt;wiki&lt;/a&gt; to help developers get up to speed.&lt;br /&gt;&lt;object height="300" width="374"&gt;&lt;param name="movie" value="http://www.youtube.com/v/srLm8vrddac&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/srLm8vrddac&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="374" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;In another video, the inventor shows how to &lt;a href="http://www.youtube.com/watch?v=PK6jVxd_o14"&gt;enable route tracking&lt;/a&gt; on Google Maps by popping off the back cover and plugging a &lt;a href="http://en.wikipedia.org/wiki/Global_Positioning_System"&gt;GPS&lt;/a&gt; receiver into an internal &lt;a href="http://en.wikipedia.org/wiki/Universal_Serial_Bus"&gt;USB&lt;/a&gt; connector. I am currently between jobs, but this is going on my shopping list for later.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?href=http%253A%252F%252Fwillware.blogspot.com%252F2010%252F04%252Fdont-covet-apples-new-ipad.html&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=300&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=light&amp;amp;height=60" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:60px;" allowTransparency="true"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-689542686747991666?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/689542686747991666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=689542686747991666' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/689542686747991666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/689542686747991666'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/04/dont-covet-apples-new-ipad.html' title='Don&apos;t covet Apple&apos;s new iPad'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8821837866109123157</id><published>2010-04-04T07:59:00.000-07:00</published><updated>2010-04-10T20:43:31.094-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>All web app frameworks lead to Rome</title><content type='html'>Earlier I &lt;a href="http://willware.blogspot.com/2009/08/i-blinked-and-web-apps-advanced-ten.html"&gt;blogged&lt;/a&gt; about how it seemed like web app development had just zoomed past me. Since then, I've buckled down and actually started to study this stuff. My earlier posting only talked about the &lt;a href="http://en.wikipedia.org/wiki/Presentation_Layer"&gt;presentation layer&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/HTML"&gt;HTML&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;Javascript&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets"&gt;CSS&lt;/a&gt;. I still have more to learn about those, but the really interesting stuff happens on the server.&lt;br /&gt;&lt;br /&gt;In December I went to a two-day session on &lt;a href="http://en.wikipedia.org/wiki/Hibernate_%28Java%29"&gt;Hibernate&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Spring_Framework"&gt;Spring&lt;/a&gt;, and it was full of mysterious jargon that made me sleepy: dependency injection, inversion of control, aspects, object-relational mapping, convention over configuration, blah blah blah. I kept at it, though, looking at &lt;a href="http://en.wikipedia.org/wiki/Ruby_on_Rails"&gt;Rails&lt;/a&gt; and later &lt;a href="http://en.wikipedia.org/wiki/Django_%28web_framework%29"&gt;Django&lt;/a&gt;. I'm now waist-deep in building a MySQL-backed Django site. What I learned is that (A) all these web app frameworks are &lt;a href="http://en.wikipedia.org/wiki/Category:Web_application_frameworks"&gt;remarkably similar&lt;/a&gt; to one another, and (B) those jargon terms are a lot simpler than they seem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Inversion_of_control"&gt;Inversion of control&lt;/a&gt; means that the framework makes calls into your app code, rather than you calling the framework from a main() function. &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;Dependency injection&lt;/a&gt; is a set of tricks to minimize dependencies between different Java source files. &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;Aspects&lt;/a&gt; are Java tricks that you can do by wrapping your methods in other methods with the same signatures, a lot like &lt;a href="http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators"&gt;decorators&lt;/a&gt; in Python. &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;Object-relational mapping&lt;/a&gt; is creating classes to represent your DB tables: each instance represents a row, each column is represented by a setter and getter. The &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;MVC pattern&lt;/a&gt; gives the lay of the land for all these frameworks, and all the presentation stuff I talked about before is limited to the "view" piece.&lt;br /&gt;&lt;br /&gt;As I find my footing in the basics, I start to notice where the interesting bits of more advanced topics pop up. If I put a Django app and a &lt;a href="http://en.wikipedia.org/wiki/MediaWiki"&gt;Mediawiki&lt;/a&gt; on the same server, can I do a &lt;a href="http://en.wikipedia.org/wiki/Single_sign-on"&gt;single sign-on&lt;/a&gt; for both of them? I think I can, by writing an &lt;a href="http://wiki.case.edu/CaseWiki:External_Authentication"&gt;AuthPlugin extension&lt;/a&gt; to make the Mediawiki accept Django's &lt;a href="http://en.wikipedia.org/wiki/Authentication"&gt;authentication&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/HTTP_cookie"&gt;cookie&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Don't ask Django to serve a PHP page because it doesn't include a &lt;a href="http://en.wikipedia.org/wiki/PHP"&gt;PHP&lt;/a&gt; interpreter (what mod_php does for &lt;a href="http://en.wikipedia.org/wiki/Apache_HTTP_Server"&gt;Apache&lt;/a&gt;). Your Apache config file must deal with PHP files before &lt;a href="http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/"&gt;routing to Django&lt;/a&gt;.&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;    AliasMatch /([^/]*\.php) ..../phpdir/$1&lt;br /&gt;    WSGIScriptAlias / ..../djangodir/django.wsgi&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;One thing I haven't quite understood is why the Django community seems to love &lt;a href="http://www.prototypejs.org/"&gt;Prototype&lt;/a&gt; and hate &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;. Is that just because Prototype is included in the standard Django package? Is it purely historical, with jQuery the abandoned but superior &lt;a href="http://en.wikipedia.org/wiki/Betamax"&gt;Betamax&lt;/a&gt; to Prototype's &lt;a href="http://en.wikipedia.org/wiki/VHS"&gt;VHS&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8821837866109123157?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8821837866109123157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8821837866109123157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8821837866109123157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8821837866109123157'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/04/all-web-app-frameworks-lead-to-rome.html' title='All web app frameworks lead to Rome'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3117228079229878514</id><published>2010-03-12T15:45:00.000-08:00</published><updated>2010-05-03T08:57:05.775-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Verilog'/><title type='text'>A new FPGA board to play with</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D8UbavaesGg/S5q8uZIYlRI/AAAAAAAAAmY/UQ6cIWY-h1k/s1600-h/fpgaboardsmall.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="147" src="http://2.bp.blogspot.com/_D8UbavaesGg/S5q8uZIYlRI/AAAAAAAAAmY/UQ6cIWY-h1k/s200/fpgaboardsmall.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.digilentinc.com/"&gt;Digilent&lt;/a&gt;, a partner of &lt;a href="http://www.xilinx.com/"&gt;Xilinx&lt;/a&gt;, makes eval boards for Xilinx &lt;a href="http://en.wikipedia.org/wiki/Field-programmable_gate_array"&gt;FPGA&lt;/a&gt;s. I bought one and plan to &lt;a href="http://willware.blogspot.com/2006/11/verilogfpga-tools-for-linux.html"&gt;hack some Verilog&lt;/a&gt; with it. My &lt;a href="http://willware.blogspot.com/2007/08/software-defined-radio-board-stalled.html"&gt;past experiments&lt;/a&gt; involved a board of my own design with a FPGA and a &lt;a href="http://en.wikipedia.org/wiki/Universal_Serial_Bus"&gt;USB&lt;/a&gt;-enabled &lt;a href="http://en.wikipedia.org/wiki/Microcontroller"&gt;microcontroller&lt;/a&gt;. I successfully programmed the microcontroller over the USB cable to wiggle &lt;a href="http://en.wikipedia.org/wiki/General_Purpose_Input/Output"&gt;GPIO&lt;/a&gt; pins, which should have allowed me to program the FPGA via &lt;a href="http://en.wikipedia.org/wiki/Joint_Test_Action_Group"&gt;JTAG&lt;/a&gt;. But for some reason, JTAG programming of the FPGA didn't work. This time the JTAG programming pins will be wired directly to &lt;a href="http://en.wikipedia.org/wiki/Parallel_port"&gt;parallel port pins &lt;/a&gt;and there is a &lt;a href="http://parapin.sourceforge.net/"&gt;Linux library&lt;/a&gt; for programming them, so I should have better luck this time. Fewer unknowns and variables, more easily probed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://static.sparkfun.com/images/products/08938-01.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://static.sparkfun.com/images/products/08938-01.jpg" width="200" /&gt;&lt;/a&gt;Attention (hey, shiny!) deficit break: I stumbled across a &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8938"&gt;couple&lt;/a&gt; &lt;a href="http://www.usbee.com/sx.html"&gt;of&lt;/a&gt; very affordable logic analyzers. Amazing stuff, just the thing for debugging errant JTAG signals.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sourceware.org/ml/binutils/2002-02/msg00813.html"&gt;Some nice folks&lt;/a&gt; have released a &lt;a href="http://www.opencores.org/project,pci"&gt;PCI soft core&lt;/a&gt; under the LGPL. I'm not ready to tackle that yet, but hope to get there before too long. Speaking of PCI, &lt;a href="http://enterpoint.co.uk/moelbryn/rs1_2_718x336.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="93" src="http://enterpoint.co.uk/moelbryn/rs1_2_718x336.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://enterpoint.co.uk/moelbryn/raggedstone1.html"&gt;here&lt;/a&gt; is a nice FPGA board for a PCI bus slot from &lt;a href="http://enterpoint.co.uk/"&gt;Enterpoint&lt;/a&gt; in the UK. They &lt;a href="http://enterpoint.co.uk/ipproducts/pci_core_32mhz_32bit.html"&gt;also&lt;/a&gt; have a PCI soft core but the licensing is a bit pricey for a hobbyist. I wonder if the LGPLed PCI core would work on the Enterpoint board.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3117228079229878514?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3117228079229878514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3117228079229878514' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3117228079229878514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3117228079229878514'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/03/new-fpga-board-to-play-with.html' title='A new FPGA board to play with'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D8UbavaesGg/S5q8uZIYlRI/AAAAAAAAAmY/UQ6cIWY-h1k/s72-c/fpgaboardsmall.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-304245146291514088</id><published>2010-03-11T06:55:00.000-08:00</published><updated>2010-03-11T06:57:06.962-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aging'/><category scheme='http://www.blogger.com/atom/ns#' term='TA-65'/><category scheme='http://www.blogger.com/atom/ns#' term='telomerase'/><title type='text'>TA-65 safety claims</title><content type='html'>Earlier I &lt;a href="http://willware.blogspot.com/2010/02/telomeres-and-aging.html"&gt;posted&lt;/a&gt; about TA-65, a telomerase activator, which some hope could reverse some of the effects of aging. &lt;a href="http://knol.google.com/k/amiya-sarkar/-/2046yetiokw52/0#"&gt;Amiya Sarkar&lt;/a&gt; is a doctor in Calcutta who writes a fascinating &lt;a href="http://physiology-physics.blogspot.com/"&gt;blog&lt;/a&gt; on physiology and physics. He and I have emailed back and forth for a couple years now, starting with a very cool idea he had for an inexpensive open-source electrocardiogram. (One of these days we really need to get that project back on track.)&lt;br /&gt;&lt;br /&gt;Amiya expressed the concern that any telomerase activator could be viewed as a potential cancer risk. Cancerous cells use telomerase to support the unlimited replication that characterizes cancer. The folks at Sierra Sciences openly recognize this concern, and give reasons why they believe it's a red herring, on &lt;a href="http://sierrasciences.com/science/index.html"&gt;this&lt;/a&gt; webpage:&lt;br /&gt;&lt;blockquote&gt;In most cases (85–95%), cancers accomplish this indefinite cell division by turning on telomerase. For this reason, forcing telomerase to turn off throughout the body has been suggested as a cure for cancer, and there are several telomerase inhibitor drugs presently being tested in clinical trials.&lt;br /&gt;&lt;br /&gt;So, anti-aging scientists must be out of their minds to want to turn the telomerase gene on, right?&lt;br /&gt;&lt;br /&gt;No! Although telomerase is necessary for cancers to extend their lifespan, telomerase does not cause cancer. This has been repeatedly demonstrated: at least seven assays for cancer have been performed on telomerase-positive human cells: the soft agar assay, the contact inhibition assay, the mouse xenograft assay, the karyotype assay, the serum inhibition assay, the gene expression assay, and the checkpoint analysis assay. All reported negative results...&lt;br /&gt;&lt;br /&gt;Paradoxically, even though cells require telomerase to become dangerous cancers, turning on telomerase may actually prevent cancer. This is not just because the risk of chromosome rearrangements is reduced, but also because telomerase can extend the lifespan of our immune cells, improving their ability to seek out and destroy cancer cells.&lt;/blockquote&gt;In support of this, they list several papers.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jiang, X.-R. et al. Telomerase expression in human somatic cells does not induce changes associated with a transformed phenotype. Nature Genet., 21, 111–114 (1999)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Morales, C.P., et. al. Absence of cancer-associated changes in human fibroblasts immortalized with telomerase. Nature Genet., 21, 115–118 (1999)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Harley, C. B. Telomerase is not an oncogene. Oncogene 21(4): 494-502 (2002).&lt;/li&gt;&lt;/ul&gt;From other writings on their website, and from their postings to Twitter and Facebook, it's clear that the Sierra Sciences folks are 100% confident that telomerase activators pose zero cancer risk. They are in a much better position to know about this than I. But if I started taking TA-65 and they were somehow mistaken, they wouldn't be the ones at risk for cancer.  I hope to find out about those seven assays and try to read those three papers in my &lt;i&gt;abundant&lt;/i&gt; spare time, and maybe discuss the matter with my doctor. (My present circumstances do not permit me to afford TA-65 even if I decide I want it.) Wouldn't it be cool if the Sierra Sciences people turn out to be correct...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-304245146291514088?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/304245146291514088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=304245146291514088' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/304245146291514088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/304245146291514088'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/03/ta-65-safety-claims.html' title='TA-65 safety claims'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-1060806472132018966</id><published>2010-02-27T18:32:00.000-08:00</published><updated>2010-04-10T20:44:10.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><category scheme='http://www.blogger.com/atom/ns#' term='server stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Learning Ruby on Rails</title><content type='html'>I'm learning &lt;a href="http://en.wikipedia.org/wiki/Ruby_on_Rails"&gt;Ruby on Rails&lt;/a&gt; to help a friend with his website and to be able to put it on my resume, and keeping &lt;a href="http://en.wikipedia.org/wiki/User:WillWare/Learning_Ruby_on_Rails"&gt;notes&lt;/a&gt; as I go.&lt;br /&gt;&lt;br /&gt;I've gotten the thing to do typical CGI script stuff, and now I'm figuring out how database access works. One big surprise is that as Rails advanced to version 2.0, one of the basic commands for setting up database access changed. Google "rails 2.0 scaffolding" for details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-1060806472132018966?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/1060806472132018966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=1060806472132018966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1060806472132018966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1060806472132018966'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/02/learning-ruby-on-rails.html' title='Learning Ruby on Rails'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5867098962881060310</id><published>2010-02-24T10:00:00.000-08:00</published><updated>2010-04-18T05:39:16.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jena'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><title type='text'>Jena: Node versus RDFNode</title><content type='html'>The &lt;a href="http://jena.sourceforge.net/javadoc/index.html"&gt;Jena code&lt;/a&gt; has two representations for nodes in an RDF graph. One is the class &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/graph/Node.html"&gt;Node&lt;/a&gt;, which has several subclasses: Node_Variable, Node_Literal, Node_URI, etc. The other is the interface &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/model/RDFNode.html"&gt;RDFNode&lt;/a&gt;, which has many subinterfaces: Literal, Resource, Property, etc.&lt;br /&gt;&lt;br /&gt;These two node representations have very different roles and very different idiomatic usages, and this doesn't appear to be spelled out in the Jena documentation anywhere. RDFNode is in the &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/model/package-summary.html"&gt;com.hp.hpl.jena.rdf.model&lt;/a&gt; package, where Node is in the &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/graph/package-frame.html"&gt;com.hp.hpl.jena.graph&lt;/a&gt; package, but I don't think the packaging by itself is a big enough hint.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://jena.sourceforge.net/documentation.html"&gt;Jena tutorials&lt;/a&gt; mostly talk only about the RDFNode variants, usually instantiating them by calling a "create" method on the &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/model/Model.html"&gt;Model&lt;/a&gt;. The poorly documented distinction between RDFNode and Node extends to the distinction between Model and &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/graph/Graph.html"&gt;Graph&lt;/a&gt;, and between &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/model/Statement.html"&gt;Statement&lt;/a&gt; and &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/graph/Triple.html"&gt;Triple&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since this information didn't appear in the documentation, we need to look at the &lt;a href="http://tech.groups.yahoo.com/group/jena-dev/message/38299"&gt;Jena mailing list&lt;/a&gt; to find it.&lt;br /&gt;&lt;blockquote&gt;A key difference between Resource and Node is that Resources know which model they are in, and Nodes are general. That's what makes resource.getProperty() work. Now in a query that is not a concept that has any meaning in the general case and patterns can span graphs.&lt;br /&gt;&lt;br /&gt;We have found that Model/Statement/RDFNode (the API) works as an application interface but it's not the right thing for storage abstractions and the Graph/Triple/Node (the SPI) works better where the regularity is more valuable. That is, we have split the application-facing design from the sub-system-facing design.&lt;/blockquote&gt;So an instance of RDFNode is associated with a specific Model, where an instance of Node is free-floating, and is used to build &lt;a href="http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/reasoner/rulesys/Rule.html"&gt;Rule&lt;/a&gt;s, which are also model-independent. The two representations can be connected by URIs. If you have a Node and a Model, and you want the corresponding RDFNode, do this (or use createProperty or createLiteral as needed):&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Resource r = model.createResource(uri1);&lt;/pre&gt;&lt;/blockquote&gt;and if you have an RDFNode, you can do this to get a Node:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Node uriNode = Node.createURI(&lt;br /&gt;        ((Resource)rdfNode).getURI());&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;So I can understand that there are two very different appropriate interfaces for writing Jena apps and for interfacing to a storage system. What I don't get is why I would ever see the latter while writing an application. If I define a Rule, I need to deal in Nodes. Presumably this is because I've been &lt;a href="http://code.google.com/p/wware-autosci/source/browse/semweb/java/net/willware/semweb/JenaUtil.java#390"&gt;constructing Rules programmatically&lt;/a&gt; rather than just reading them in from a file. Maybe I should stick with the latter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5867098962881060310?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5867098962881060310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5867098962881060310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5867098962881060310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5867098962881060310'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/02/jena-node-versus-rdfnode.html' title='Jena: Node versus RDFNode'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8521649867812993998</id><published>2010-02-24T08:39:00.000-08:00</published><updated>2010-02-24T17:42:33.926-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CUDA'/><category scheme='http://www.blogger.com/atom/ns#' term='GPUs'/><title type='text'>Fixing a versioning problem with CUDA 2.3</title><content type='html'>In an &lt;a href="http://willware.blogspot.com/2009/10/hacking-cuda-on-fedora-10.html"&gt;earlier posting&lt;/a&gt;, I observed that CUDA 2.3 wants to use GCC 4.3, which is a problem for Fedora 11 and Ubuntu 9.10. I've been itching to upgrade my distribution on my &lt;a href="http://willware.blogspot.com/2009/07/building-gpu-machine.html"&gt;NVIDIA Linux box&lt;/a&gt;, and particularly itching to move to Ubuntu. I found &lt;a href="http://moelhave.dk/2009/12/nvidia-cuda-on-ubuntu-karmic-koala/"&gt;some help&lt;/a&gt; on &lt;a href="http://moelhave.dk/"&gt;Thomas Moelhave's blog&lt;/a&gt;. Thanks, Thomas!&lt;br /&gt;&lt;br /&gt;In addition to his instructions, I needed to install some stuff.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;sudo aptitude install freeglut3 \&lt;br /&gt;   freeglut3-dev libXmu-dev libXi-dev&lt;/pre&gt;&lt;/blockquote&gt;Once I did that and completed his instructions, everything worked great. The rest of my Ubuntu 9.10 installation is completely intact and happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8521649867812993998?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8521649867812993998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8521649867812993998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8521649867812993998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8521649867812993998'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/02/fixing-versioning-problem-with-cuda-23.html' title='Fixing a versioning problem with CUDA 2.3'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2319279210244230325</id><published>2010-02-17T15:20:00.000-08:00</published><updated>2010-03-11T05:07:14.141-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aging'/><category scheme='http://www.blogger.com/atom/ns#' term='longevity'/><category scheme='http://www.blogger.com/atom/ns#' term='TA-65'/><category scheme='http://www.blogger.com/atom/ns#' term='telomerase'/><title type='text'>Telomeres and aging</title><content type='html'>&lt;div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img align="right/" height="182" src="http://openpit.files.wordpress.com/2009/10/telomere.jpg" width="200" /&gt;&lt;/div&gt;Recently I became aware of &lt;a href="http://www.sierrasci.com/"&gt;Sierra Sciences&lt;/a&gt;, a startup founded by William Andrews, previously of &lt;a href="http://www.geron.com/"&gt;Geron&lt;/a&gt;. Andrews had done a lot of research on telomeres and telomerase.&lt;br /&gt;&lt;br /&gt;Your cells have nuclei in them where your &lt;a href="http://en.wikipedia.org/wiki/DNA"&gt;DNA&lt;/a&gt; is wadded up into packets called &lt;a href="http://en.wikipedia.org/wiki/Chromosomes"&gt;chromosomes&lt;/a&gt;. On the ends of the DNA strands there's a thing called a &lt;a href="http://en.wikipedia.org/wiki/Telomere"&gt;telomere&lt;/a&gt;. It protects the DNA from unravelling, like the little plastic tube on the end of your shoelace. Our telomeres shorten as we get older, and longer telomeres are strongly correlated with youth and vigor and health. There are many contributors to &lt;a href="http://en.wikipedia.org/wiki/Ageing"&gt;ageing&lt;/a&gt; but telomere length is currently regarded as one of the most urgent and one of the best understood.&lt;br /&gt;&lt;br /&gt;Our &lt;a href="http://en.wikipedia.org/wiki/Reproduction#Sexual_reproduction"&gt;reproductive&lt;/a&gt; cells do not suffer this effect. If we passed on shorter telomeres to our kids, they wouldn't live long, and they probably couldn't have kids of their own. To accomplish this, our reproductive cells produce stuff called &lt;a href="http://en.wikipedia.org/wiki/Telomerase"&gt;telomerase&lt;/a&gt; which protects the telomeres from shortening. Here's the cool part: the gene for producing telomerase is present in ALL our cells, but it's only switched on in the reproductive cells. So there's a research push to find a telomerase activator that switches on the gene in all our cells. Sierra Sciences is one of the companies involved in this research.&lt;br /&gt;&lt;br /&gt;You can buy a telomerase activator today, called &lt;a href="http://www.tasciences.com/ta65molecule.html"&gt;TA-65&lt;/a&gt;. It's expensive, about $1500 per month, I think. But I haven't yet found any compelling evidence that it's a scam or a significant health risk. So I'm toying with the idea of trying it for a few months and see if I feel any different.&lt;br /&gt;&lt;br /&gt;There is also a clinical test to measure the length of your telomeres. I know it exists but I don't know much more about it at the moment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2319279210244230325?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2319279210244230325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2319279210244230325' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2319279210244230325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2319279210244230325'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/02/telomeres-and-aging.html' title='Telomeres and aging'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2726306930094930682</id><published>2010-02-05T10:56:00.000-08:00</published><updated>2010-02-24T06:45:50.078-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jena'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><title type='text'>Playing with the Jena semantic web framework</title><content type='html'>I've begun tinkering with Jena, a semantic web framework written in Java. It embodies a lot of ideas and technologies that were once considered AI or expert systems, and which I neglected at the time (1980s).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jena homepage: &lt;a href="http://jena.sourceforge.net/"&gt;http://jena.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Docs: &lt;a href="http://jena.sourceforge.net/documentation.html"&gt;http://jena.sourceforge.net/documentation.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Javadoc: &lt;a href="http://jena.sourceforge.net/javadoc/index.html"&gt;http://jena.sourceforge.net/javadoc/index.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The semantic web frames a body of knowledge as a collection of three-word sentences called triples. These can be diagrammed as a directed graph such as the one below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Semantic_Net.svg/320px-Semantic_Net.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Semantic_Net.svg/320px-Semantic_Net.svg.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The corresponding three-word sentences appear below, written in N3, a human-readable formal language used by the semantic web community.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;@prefix :  &amp;lt;#&amp;gt; .&lt;br /&gt;:Cat :has :Fur .&lt;br /&gt;:Bear :has :Fur .&lt;br /&gt;:Cat :is-a :Mammal .&lt;br /&gt;:Bear :is-a :Mammal .&lt;br /&gt;:Mammal :has :Vertebrae .&lt;br /&gt;:Whale :is-a :Mammal .&lt;br /&gt;:Whale :lives-in :Water .&lt;br /&gt;:Mammal :is-a :Animal .&lt;br /&gt;:Fish :is-a :Animal .&lt;br /&gt;:Fish :lives-in :Water .&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;In Jena, a Model is one of these things. Having constructed it (or having loaded it from either a file on the internet or a file on your computer), you can apply rules that allow you to draw conclusions. So let's step through that proecess. First we need to read in the file.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;private static final String baseUri =&lt;br /&gt;    "file:///home/wware/wware-autosci/" +&lt;br /&gt;    "semweb/java/simpleNet.n3#";&lt;br /&gt;private static void modelReadFile(String filename,&lt;br /&gt;                                  Model model) {&lt;br /&gt;    try {&lt;br /&gt;        File f = new File(filename);&lt;br /&gt;        FileReader fr = new FileReader(f);&lt;br /&gt;        model.read(fr, baseUri);&lt;br /&gt;    } catch (FileNotFoundException e) {&lt;br /&gt;        e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;To print the contents of a model, we can use the SPARQL query language, which looks a lot like SQL.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;private static void printModel(Model model) {&lt;br /&gt;    String queryString = &lt;br /&gt;        "SELECT ?x ?y ?z " +&lt;br /&gt;        "WHERE {" +&lt;br /&gt;        "    ?x ?y ?z . " +&lt;br /&gt;        "}";&lt;br /&gt;    Query query = QueryFactory.create(queryString);&lt;br /&gt;    QueryExecution qe =&lt;br /&gt;      QueryExecutionFactory.create(query, model);&lt;br /&gt;    ResultSet results = qe.execSelect();&lt;br /&gt;    ResultSetFormatter.out(System.out, results, query);&lt;br /&gt;    qe.close();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;and we'll call that method from our main method. I personally find it appalling that the graph above fails to recognize that fish have vertebrae, so we'll add a triple for that.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public static void main(String[] args) {&lt;br /&gt;    Model model = ModelFactory.createDefaultModel();&lt;br /&gt;    modelReadFile("simpleNet.rdf", model);&lt;br /&gt;    model.createResource(baseUri + "Fish")&lt;br /&gt;         .addProperty(model.createProperty(&lt;br /&gt;                         baseUri + "has"),&lt;br /&gt;                      model.createResource(&lt;br /&gt;                         baseUri + "Vertebrae"));&lt;br /&gt;    printModel(model);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;and the RDF file that imports the model was translated from the N3 above, using &lt;a href="http://www.w3.org/2000/10/swap/doc/cwm.html"&gt;CWM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;rdf:RDF&lt;br /&gt;xmlns="file:///home/wware/wware-autosci/semweb/java/simpleNet.n3#"&lt;br /&gt;xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&amp;gt;&lt;br /&gt;    &amp;lt;rdf:Description rdf:about="#Bear"&amp;gt;&lt;br /&gt;        &amp;lt;has rdf:resource="#Fur"/&amp;gt;&lt;br /&gt;        &amp;lt;is-a rdf:resource="#Mammal"/&amp;gt;&lt;br /&gt;    &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;    &amp;lt;rdf:Description rdf:about="#Cat"&amp;gt;&lt;br /&gt;        &amp;lt;has rdf:resource="#Fur"/&amp;gt;&lt;br /&gt;        &amp;lt;is-a rdf:resource="#Mammal"/&amp;gt;&lt;br /&gt;    &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;    &amp;lt;rdf:Description rdf:about="#Fish"&amp;gt;&lt;br /&gt;        &amp;lt;is-a rdf:resource="#Animal"/&amp;gt;&lt;br /&gt;        &amp;lt;lives-in rdf:resource="#Water"/&amp;gt;&lt;br /&gt;    &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;    &amp;lt;rdf:Description rdf:about="#Mammal"&amp;gt;&lt;br /&gt;        &amp;lt;has rdf:resource="#Vertebrae"/&amp;gt;&lt;br /&gt;        &amp;lt;is-a rdf:resource="#Animal"/&amp;gt;&lt;br /&gt;    &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;    &amp;lt;rdf:Description rdf:about="#Whale"&amp;gt;&lt;br /&gt;        &amp;lt;is-a rdf:resource="#Mammal"/&amp;gt;&lt;br /&gt;        &amp;lt;lives-in rdf:resource="#Water"/&amp;gt;&lt;br /&gt;    &amp;lt;/rdf:Description&amp;gt;&lt;br /&gt;&amp;lt;/rdf:RDF&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;There is a Model.write(OutputStream) method, so we can write a model directly to a file instead of stepping through the triples explicitly.&lt;br /&gt;&lt;br /&gt;So how about some actual reasoning? We should be able to conclude that a cat is an animal, and has vertebrae. This will require that we define two rules of inference, rule1 ("is-a" is transitive) and rule2 (a member of a species has the things the species has).&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;String rules =&lt;br /&gt;        "[ rule1: (?x " + baseUri+"is-a ?y) " +&lt;br /&gt;                 "(?y " + baseUri+"is-a ?z) -&amp;gt; " +&lt;br /&gt;                 "(?x " + baseUri+"is-a ?z) ] " +&lt;br /&gt;        "[ rule2: (?x " + baseUri+"is-a ?y) " +&lt;br /&gt;                 "(?y " + baseUri+"has ?z) -&amp;gt; " +&lt;br /&gt;                 "(?x " + baseUri+"has ?z) ]";&lt;br /&gt;Reasoner reasoner = new&lt;br /&gt;    GenericRuleReasoner(Rule.parseRules(rules));&lt;br /&gt;reasoner.setDerivationLogging(true);&lt;br /&gt;InfModel inf =&lt;br /&gt;  ModelFactory.createInfModel(reasoner, model);&lt;br /&gt;printModel(inf);&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Simply creating the InfModel is enough to draw all the relevant inferences. The Reasoner's setDerivationLogging method tells the model to remember the derivations that led to any new conclusions, and these derivations can be examined for debugging purposes.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;PrintWriter out = new PrintWriter(System.out);&lt;br /&gt;for (StmtIterator i = inf.listStatements();&lt;br /&gt;             i.hasNext(); ) {&lt;br /&gt;    Statement s = i.nextStatement();&lt;br /&gt;    for (Iterator&lt;derivation&gt; id = inf.getDerivation(s);&lt;br /&gt;             id.hasNext(); ) {&lt;br /&gt;        Derivation deriv = id.next();&lt;br /&gt;        deriv.printTrace(out, true);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;out.flush();&lt;br /&gt;&lt;/derivation&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2726306930094930682?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2726306930094930682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2726306930094930682' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2726306930094930682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2726306930094930682'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/02/playing-with-jena-semantic-web.html' title='Playing with the Jena semantic web framework'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3151708742989482093</id><published>2010-01-27T19:05:00.000-08:00</published><updated>2010-02-24T08:21:12.914-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><category scheme='http://www.blogger.com/atom/ns#' term='bayesian'/><title type='text'>Bayesian nets in RDF, and how to update them</title><content type='html'>I've &lt;a href="http://code.google.com/p/wware-autosci/source/browse/semweb/java/net/willware/semweb/BayesianInference.java"&gt;banged my head on this&lt;/a&gt; for a couple of days and feel close to a solution. The graph looks like this.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/BayesRdfHack001.jpg/646px-BayesRdfHack001.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/BayesRdfHack001.jpg/646px-BayesRdfHack001.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Each random boolean variable gets a node, the causal relationship between them gets a node, and each variable gets a probability.&lt;br /&gt;The &lt;a href="http://code.google.com/p/wware-autosci/source/browse/bayesnets/updateMath.py"&gt;math for updating probabilities&lt;/a&gt; is a little tricky, but in a fun and interesting way, so I enjoyed banging on that. At some point I'll tackle more involved cases where there aren't simply two random boolean variables, but that's the logistically simple case that exposes most of the concepts involved. Kinda like the Drosophila of Bayesian inference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3151708742989482093?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3151708742989482093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3151708742989482093' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3151708742989482093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3151708742989482093'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/01/bayesian-nets-in-rdf-and-how-to-update.html' title='Bayesian nets in RDF, and how to update them'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7363329328570612769</id><published>2010-01-18T20:53:00.000-08:00</published><updated>2010-01-19T09:53:36.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><category scheme='http://www.blogger.com/atom/ns#' term='bayesian'/><title type='text'>Inference engines and automated reasoning</title><content type='html'>An &lt;a href="http://en.wikipedia.org/wiki/Inference_engine"&gt;inference engine&lt;/a&gt; is a computer program that reasons, using some form of &lt;a href="http://en.wikipedia.org/wiki/Knowledge_representation_and_reasoning"&gt;knowledge representation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This can be done with &lt;a href="http://en.wikipedia.org/wiki/Propositional_calculus"&gt;propositional logic&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/First-order_logic"&gt;first-order logic&lt;/a&gt;, assuming each proposition is completely unambiguous and is either 100% true or 100% false. These simplistic engines are &lt;a href="http://groups.google.com/group/alt.sources/msg/aa339a28d8ef46b2?dmode=source"&gt;fun little exercises&lt;/a&gt; in programming but in real-world situations, reasoning usually needs to consider ambiguities and uncertainties. Instead of simply being true or false, propositions may be likely or unlikely, or their likelihood may be something to be tested or determined. Some elements of some propositions may be poorly defined.&lt;br /&gt;&lt;br /&gt;In the unambiguous binary case, it's typical to express rules for generating new propositions as if-then rules with variables in them. We call these &lt;a href="http://en.wikipedia.org/wiki/Production_system"&gt;production rules&lt;/a&gt; because they are used to produce new propositions.&lt;br /&gt;&lt;blockquote&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;If X is a man, then X is mortal.&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;Given the statement &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"Socrates is a man"&lt;/span&gt;, we&lt;br /&gt;&lt;ul&gt;&lt;li&gt;match the statement to the rule's IF clause&lt;/li&gt;&lt;li&gt;take note of all variable assignments: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;X=Socrates&lt;/span&gt;&lt;/li&gt;&lt;li&gt;plug assignments into the THEN clause: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"Socrates is mortal"&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Obviously this isn't rocket science, but even without handling uncertainty, it will still be useful if scaled to very large numbers of propositions, as in the &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;semantic web&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;How to handle uncertainty? This can be done by representing knowledge as a &lt;a href="http://en.wikipedia.org/wiki/Bayesian_network"&gt;Bayesian network&lt;/a&gt;, a directed graph where the edges represent the influences and dependencies between random variables. There is a &lt;a href="http://people.cs.ubc.ca/%7Emurphyk/Bayes/bayes.html"&gt;good tutorial&lt;/a&gt; about these online. Here's an &lt;a href="http://en.wikipedia.org/wiki/Bayesian_network#Example"&gt;example&lt;/a&gt; from the Wikipedia article where the probability of rain is an independent variable, and the sprinkler system is usually off if it's raining, and the grass can get wet from either rain or the sprinkler.&lt;br /&gt;&lt;img border="0" height="180" src="http://upload.wikimedia.org/wikipedia/en/thumb/0/0e/SimpleBayesNet.svg/400px-SimpleBayesNet.svg.png" width="320" /&gt;&lt;br /&gt;There are at least two open-source inference engines that work with Bayesian networks. One is &lt;a href="http://genie.sis.pitt.edu/wiki/SMILE_Tutorial_1:_Creating_a_Bayesian_Network"&gt;SMILE&lt;/a&gt;, another is the &lt;a href="http://www.openbayes.org/"&gt;OpenBayes&lt;/a&gt; library for the &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; language. OpenBayes allows you to update the state of your knowledge with a new observation.&lt;br /&gt;&lt;blockquote&gt;Suppose now that you know that the sprinkler is on and that it is not cloudy, and you wonder what's the probability of the grass being wet : Pr(w|s=1,c=0). This is called evidence...&lt;br /&gt;&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ie.SetObs({'s':1,'c':0})&lt;br /&gt;&lt;/blockquote&gt;and then perform inference in the same way... The grass is much more likely to be wet because the sprinkler is on!&lt;br /&gt;&lt;/blockquote&gt;&lt;a href="http://people.cs.ubc.ca/%7Emurphyk/Software/bnsoft.html"&gt;Here&lt;/a&gt; is a list of many more Bayesian network libraries, and &lt;a href="http://directory.google.com/Top/Computers/Artificial_Intelligence/Belief_Networks/Software/"&gt;another list&lt;/a&gt;. There is also a nice tutorial on &lt;a href="http://www.cs.huji.ac.il/%7Enirf/Nips01-Tutorial/"&gt;Learning Bayesian Networks from Data&lt;/a&gt;, the process of taking a bunch of data and automatically discovering the Bayesian network that might have produced it. Another Bayesian reasoning system is &lt;a href="http://people.csail.mit.edu/milch/blog/index.html"&gt;BLOG&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;Bayesian logic (BLOG) is a first-order probabilistic modeling language under development at MIT and UC Berkeley. It is designed for making inferences about real-world objects that underlie some observed data: for instance, tracking multiple people in a video sequence, or identifying repeated mentions of people and organizations in a set of text documents. BLOG makes it (relatively) easy to represent uncertainty about the number of underlying objects and the mapping between objects and observations.&lt;br /&gt;&lt;/blockquote&gt;Are production rule systems and Bayesian network systems mutually compatible? I don't yet know. Do Bayesian networks adequately represent all important forms of uncertainty or vagueness that one might encounter in working with real-world data? I don't know that either. Are there other paradigms I should be checking out? Probably.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7363329328570612769?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7363329328570612769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7363329328570612769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7363329328570612769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7363329328570612769'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/01/inference-engines-and-automated.html' title='Inference engines and automated reasoning'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8525732918003531084</id><published>2010-01-17T16:50:00.000-08:00</published><updated>2010-01-17T17:16:14.927-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><title type='text'>How hard is generating scientific hypotheses?</title><content type='html'>In the 1500s, a Danish astronomer named &lt;a href="http://en.wikipedia.org/wiki/Tycho_Brahe"&gt;Tycho Brahe&lt;/a&gt; used Galileo's invention of the telescope to collect an enormous amount of numerical data describing the motion of the planets. Brahe's assistant &lt;a href="http://en.wikipedia.org/wiki/Johannes_Kepler"&gt;Johannes Kepler&lt;/a&gt; studied that data and arrived at some interesting conclusions which we now know as &lt;a href="http://en.wikipedia.org/wiki/Kepler%27s_laws_of_planetary_motion"&gt;Kepler's laws of planetary motion&lt;/a&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The &lt;a href="http://en.wikipedia.org/wiki/Orbit" title="Orbit"&gt;orbit&lt;/a&gt; of every &lt;a href="http://en.wikipedia.org/wiki/Planet" title="Planet"&gt;planet&lt;/a&gt; is an &lt;a href="http://en.wikipedia.org/wiki/Ellipse" title="Ellipse"&gt;ellipse&lt;/a&gt; with the Sun at a &lt;a href="http://en.wikipedia.org/wiki/Focus_%28geometry%29" title="Focus (geometry)"&gt;focus&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A &lt;a href="http://en.wikipedia.org/wiki/Line_%28geometry%29" title="Line (geometry)"&gt;line&lt;/a&gt; joining a planet and the Sun sweeps out equal areas during equal intervals of time.&lt;sup id="cite_ref-Wolfram2nd_0-0" class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Kepler%27s_laws_of_planetary_motion#cite_note-Wolfram2nd-0"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;The &lt;a href="http://en.wikipedia.org/wiki/Square_%28algebra%29" title="Square (algebra)"&gt;square&lt;/a&gt; of the &lt;a href="http://en.wikipedia.org/wiki/Orbital_period" title="Orbital period"&gt;orbital period&lt;/a&gt; of a planet is directly &lt;a href="http://en.wikipedia.org/wiki/Proportionality_%28mathematics%29" title="Proportionality (mathematics)"&gt;proportional&lt;/a&gt; to the &lt;a href="http://en.wikipedia.org/wiki/Cube_%28arithmetic%29" title="Cube (arithmetic)" class="mw-redirect"&gt;cube&lt;/a&gt; of the &lt;a href="http://en.wikipedia.org/wiki/Semi-major_axis" title="Semi-major axis"&gt;semi-major axis&lt;/a&gt; of its orbit.&lt;/li&gt;&lt;/ol&gt;Kepler's laws were the starting point from which &lt;a href="http://en.wikipedia.org/wiki/Isaac_Newton"&gt;Isaac Newton&lt;/a&gt; formulated his &lt;a href="http://en.wikipedia.org/wiki/Newton%27s_law_of_universal_gravitation"&gt;law of gravitation&lt;/a&gt;, the inverse-square law that we all know and love.&lt;br /&gt;&lt;br /&gt;We have here a three-step process: collect data, find mathematical patterns in the data, and create a theory that explains those patterns. Collecting data is simple in principle, and looking for mathematical patterns is also simple. Kepler's arithmetic was done by hand, but now we have computer programs (like &lt;a href="http://ccsl.mae.cornell.edu/eureqa"&gt;Eureqa&lt;/a&gt;) which use &lt;a href="http://en.wikipedia.org/wiki/Genetic_programming"&gt;genetic programming&lt;/a&gt; to find &lt;a href="http://en.wikipedia.org/wiki/Parsimony"&gt;parsimonious&lt;/a&gt; mathematical formulas that fit sets of data. You can find &lt;a href="http://www.alesdar.org/oldSite/IS/GeneticProgramming/GPApplet.html"&gt;Java applets&lt;/a&gt; on the web that demonstrate this idea.&lt;br /&gt;&lt;br /&gt;So the first two steps aren't too hard. We can arrive rather easily at mathematical formulas that describe various experimentally measurable aspects of reality. That's a good thing. The hard job is the next step: finding theories or "likely stories" that explain why those formulas take whatever form they do. Sometimes the form of the math suggests a mechanism, because you've learned to associate elliptical orbits with conservative force fields which necessarily have an inverse-square law. (Hundreds of years after Newton, that is now a no-brainer.) But generally the problem is non-trivial and so far, as far as I'm aware, requires human insight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8525732918003531084?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8525732918003531084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8525732918003531084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8525732918003531084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8525732918003531084'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/01/how-hard-is-generating-scientific.html' title='How hard is generating scientific hypotheses?'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7171033271048915327</id><published>2010-01-17T16:22:00.000-08:00</published><updated>2010-01-24T12:26:20.911-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><category scheme='http://www.blogger.com/atom/ns#' term='foresight institute'/><title type='text'>Foresight Institute conference, Jan 16 and 17, 2010</title><content type='html'>The Foresight conference is just winding down. The talks were live-blogged over at &lt;a href="http://www.nextbigfuture.com/"&gt;NextBigFuture&lt;/a&gt; by Brian Wang who did a good job of concisely capturing the essentials. My own favorite talk was by &lt;a href="http://nextbigfuture.com/2010/01/liveblogging-foresight-2010-conference_16.html"&gt;Hod Lipson&lt;/a&gt;, who talked about a number of things, including something I find fascinating, the automation of science, about which I plan to blog more frequently.&lt;br /&gt;&lt;br /&gt;I blogged &lt;a href="http://willware.blogspot.com/2009/04/machines-doing-actual-science-not-just.html"&gt;too briefly&lt;/a&gt; in the past about the Adam project, but it deserves more. Reported in April 2009 by Ross King at Aberystwyth University. It used lab automation to perform experiments, and data mining to find patterns in the resulting data. Adam developed novel genomics hypotheses about &lt;span style="font-style: italic;"&gt;S. cerevisiae&lt;/span&gt; yeast and tested them. Adam's conclusions were manually confirmed by human experimenters, and found to be correct. This was the first instance in human history where a machine discovered new scientific knowledge without human oversight.&lt;br /&gt;&lt;br /&gt;Here is what I want to see computers doing in the coming years.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Look for patterns in data -- data mining&lt;/li&gt;&lt;li&gt;Propose falsifiable hypotheses&lt;/li&gt;&lt;li&gt;Design experiments to test those hypotheses&lt;/li&gt;&lt;li&gt;Perform the experiments and collect data&lt;/li&gt;&lt;li&gt;Confirm or deny hypotheses&lt;/li&gt;&lt;li&gt;Mine new data for new patterns, repeat the process&lt;/li&gt;&lt;/ul&gt;In the longer term, I want to see machine theoreticians and experimetalists collaborate with their human counterparts, both working in a scientific literature that is readable and comprehensible for both. This will require the development of a machine-parseable ontology (ideally a widely recognized standard) for sharing elements of the scientific reasoning process: data sets, hypotheses, predictions, deduction, induction, statistical inference, and the design of experiments.&lt;br /&gt;&lt;br /&gt;So why do I want all this stuff? For one thing, it's interesting. For another, I am approaching the end of my life and I want to see scientific progress (and particularly medical progress) accelerate considerably in my remaining ye&lt;span id="mbl2"&gt;&lt;/span&gt;ars. Finally, this looks to me like something where I can make some modestly valuable contribution to humanity with the time and energy I have left.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7171033271048915327?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7171033271048915327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7171033271048915327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7171033271048915327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7171033271048915327'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2010/01/foresight-institute-conference-jan-16.html' title='Foresight Institute conference, Jan 16 and 17, 2010'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7664609737090119452</id><published>2009-12-20T11:21:00.001-08:00</published><updated>2009-12-20T11:59:18.219-08:00</updated><title type='text'>Snow and more snow, December 2009</title><content type='html'>We got a dusting on December 6th.&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yxHz_bkT2EU&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/yxHz_bkT2EU&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;In all this cold, I had occasion to heat some water for tea, watching the pot the whole while, and contrary to common belief, it boiled anyway.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We had a bunch of snow last night and this morning. It's just stopped in the last hour.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/28098191@N00/4200301767/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2621/4200301767_373c567338_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/28098191@N00/4201054988/" title="dscn0530 by wware01701, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2532/4201054988_082a7a04c4_t.jpg" width="100" height="75" alt="dscn0530" /&gt;&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/28098191@N00/4200301259/" title="dscn0531 by wware01701, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2669/4200301259_02ddc64738_t.jpg" width="100" height="75" alt="dscn0531" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7664609737090119452?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7664609737090119452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7664609737090119452' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7664609737090119452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7664609737090119452'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/12/snow-and-more-snow-december-2009.html' title='Snow and more snow, December 2009'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2621/4200301767_373c567338_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7045078668898134546</id><published>2009-12-02T06:28:00.001-08:00</published><updated>2010-04-10T20:42:12.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='karma'/><category scheme='http://www.blogger.com/atom/ns#' term='social goals'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Honorable mention for BetterExplained.com website and its author, Kalid Azad</title><content type='html'>Kalid Azad's &lt;a href="http://betterexplained.com/"&gt;BetterExplained.com&lt;/a&gt; website has a lot of elegantly straightforward articles on interesting topics, many of them mathematical. He's doing some really interesting stuff, including a brilliant &lt;a href="http://instacalc.com/"&gt;online calculator&lt;/a&gt; that you can use to embed calculations in web pages.&lt;script&gt;instacalc_embed_height = 300; instacalc_embed_width = 425; instacalc_embed_url = 'http://instacalc.com/embed/?d=&amp;c=Ly8gQ2FsY3VsYXRpb25zIGNhbiBpbmNsdWRlIGNvbW1lbnRzfFIgPSAxMCAgIC8vIG9uIHRoZSBzYW1lIGxpbmUgd2l0aCBudW1lcmljYWwgc3R1ZmZ8QXJlYSA9IHBpICogUl4yfFZvbHVtZSA9ICg0LzMpICogcGkgKiBSXjN8RGVuc2l0eSA9IDJ8V2VpZ2h0ID0gVm9sdW1lICogRGVuc2l0eXx8fHw&amp;s=ssssssssss&amp;v=0.9';&lt;/script&gt;&lt;br /&gt;&lt;script src="http://instacalc.com/javascripts/embed.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&amp;amp;lt;a href="http://instacalc.com/?d=&amp;amp;amp;c=Ly8gQ2FsY3VsYXRpb25zIGNhbiBpbmNsdWRlIGNvbW1lbnRzfFIgPSAxMCAgIC8vIG9uIHRoZSBzYW1lIGxpbmUgd2l0aCBudW1lcmljYWwgc3R1ZmZ8QXJlYSA9IHBpICogUl4yfFZvbHVtZSA9ICg0LzMpICogcGkgKiBSXjN8RGVuc2l0eSA9IDJ8V2VpZ2h0ID0gVm9sdW1lICogRGVuc2l0eXx8fHw&amp;amp;amp;s=ssssssssss&amp;amp;amp;v=0.9"&amp;amp;gt;calculation&amp;amp;lt;/a&amp;amp;gt; powered by &amp;amp;lt;a href="http://instacalc.com"&amp;amp;gt;InstaCalc Online Calculator&amp;amp;lt;/a&amp;amp;gt;&lt;/noscript&gt;I'm not a Microsoft fanboy by any means, but I admire the video he made, using Windows 7 for humanitarian purposes.&lt;br /&gt;&lt;object height="height=&amp;quot;344&amp;quot;" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oZfquGgNKCA&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/oZfquGgNKCA&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;In an article on happiness, Kalid includes a video of Steve Jobs's commencement address at Stanford. I'm really grateful that he included this.&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/D1R-jKKp3NA&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/D1R-jKKp3NA&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Remember this is a guy who had a diagnosis of terminal cancer a year earlier.&lt;br /&gt;&lt;blockquote&gt;Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle... All external expectations, all pride, all fear of embarrassment or failure -- these things just fall away in the face of death, leaving only what is truly important. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.&lt;/blockquote&gt;I recently left a job where I wasn't following my heart. The money was good and the rest of the economy was bad, so I spent a lot of energy and effort trying to make it work, but there was no passion or fun or excitement. So this talk resonates for me now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7045078668898134546?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7045078668898134546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7045078668898134546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7045078668898134546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7045078668898134546'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/12/honorable-mention-for.html' title='Honorable mention for BetterExplained.com website and its author, Kalid Azad'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2512253945077602444</id><published>2009-11-24T16:12:00.000-08:00</published><updated>2009-12-02T05:51:56.904-08:00</updated><title type='text'>A few last comments on the Hackathon</title><content type='html'>This is a random collection of notes about things I learned at the Hackathon or shortly after.&lt;br /&gt;&lt;br /&gt;The Hackathon was a lot of fun. Pamela Fox, one of the developers of Wave, gave a couple of presentations (&lt;a href="http://prezi.com/sxuwendhwqsy/"&gt;1&lt;/a&gt;, &lt;a href="http://prezi.com/egrptwqumq8j/"&gt;2&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;There are some article on debugging Wave extensions for &lt;a href="http://code.google.com/apis/wave/articles/robotdebugging.html#LocalDebugging"&gt;Robots&lt;/a&gt; and &lt;a href="http://code.google.com/apis/wave/articles/gadgetdebugging.html"&gt;Gadgets&lt;/a&gt;. More handy debug tips &lt;a href="http://www.byteblocks.com/post/2009/11/03/How-to-debug-Google-Wave-Robot.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you're writing a Robot in Java, a huge amount of support is available in Google's &lt;a href="http://code.google.com/eclipse/"&gt;Eclipse plugins&lt;/a&gt;. Be sure to have Java 1.6 installed. If you already have an earlier version, you can install 1.6 on top of it, and just switch the preference within Eclipse. I think it was Windows -&gt; Preferences -&gt; Java -&gt; something...&lt;br /&gt;&lt;br /&gt;There is also an Eclipse plugin for Python called &lt;a href="http://pydev.org/"&gt;PyDev&lt;/a&gt;. I don't have a lot of experience with it.&lt;br /&gt;&lt;br /&gt;One guy at the Hackathon wrote a robot in &lt;a href="http://en.wikipedia.org/wiki/Groovy_%28programming_language%29"&gt;Groovy&lt;/a&gt;, a dynamic language that runs on the JVM. From what I could tell, it was working fine.&lt;br /&gt;&lt;br /&gt;At the present time, Robots must be deployed to Google &lt;a href="http://code.google.com/appengine/"&gt;App Engine&lt;/a&gt;. This restriction will probably be relaxed, especially as non-Google Wave servers come on line.&lt;br /&gt;&lt;br /&gt;App Engine doesn't run PHP (I had wanted to add Mediawiki to my web app) but if you really want PHP you can try &lt;a href="http://www.webdigi.co.uk/blog/2009/run-php-on-the-google-app-engine/"&gt;Quercus&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;App Engine has a great &lt;a href="http://code.google.com/appengine/articles/logging.html"&gt;logging&lt;/a&gt; facility, accessible via &lt;a href="https://appengine.google.com/"&gt;https://appengine.google.com&lt;/a&gt;. You can put logging statements in Python code (import logging) or Java code (import java.util.logging) and both will dump info statements into the GAE log.&lt;br /&gt;&lt;br /&gt;Google likes extensions to adhere to some &lt;a href="http://code.google.com/apis/wave/extensions/designprinciples.html"&gt;design principles&lt;/a&gt;. These are designed to maximize the broad appeal of your Wave extension and to make it run faster. Google figures that slow ugly extensions will drive users away from their ads.&lt;br /&gt;&lt;br /&gt;There was talk at the Hackathon (and I wasn't paying close enough attention) about people setting up Wave servers. If I set up my own server, can I issue my own invitations to people so that I'm not depending on Google providing invitations? That would rock.&lt;br /&gt;&lt;br /&gt;More useful links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wavecompass.net/"&gt;http://wavecompass.net/&lt;/a&gt;  -- a mediawiki that tries to fill in gaps in Google's Wave docs&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reddit.com/r/wave"&gt;http://www.reddit.com/r/wave&lt;/a&gt; -- random semi-useful Wave discussions on Reddit&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/pygowave-server/"&gt;http://code.google.com/p/pygowave-server/&lt;/a&gt; -- a Wave server in Python&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/wave-protocol/"&gt;http://code.google.com/p/wave-protocol/&lt;/a&gt; -- the official Google wave server in Java&lt;/li&gt;&lt;li&gt;&lt;a href="http://completewaveguide.com/"&gt;http://completewaveguide.com/&lt;/a&gt; -- Gina Trapani's &lt;span style="font-style: italic;"&gt;Complete Guide to Google Wave&lt;/span&gt; is fantastic&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Something that would be very valuable for robot development would be a lightweight Wave server simulator running in Python, probably using the classes in the &lt;a href="http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/index.html"&gt;Python Wave API&lt;/a&gt;. You'd want a way to simulate an on-going Wave conversation, and the simulator would send &lt;a href="http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/waveapi.events-module.html"&gt;events&lt;/a&gt; to the robot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2512253945077602444?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2512253945077602444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2512253945077602444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2512253945077602444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2512253945077602444'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/11/few-last-comments-on-hackathon.html' title='A few last comments on the Hackathon'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4967210147545448551</id><published>2009-11-16T09:36:00.000-08:00</published><updated>2009-11-24T16:33:52.754-08:00</updated><title type='text'>Tinkering with Google Wave Gadgets and Robots</title><content type='html'>Google is hosting a &lt;a href="http://massgtug.gtugs.org/news/wave-hackaton"&gt;Hackathon&lt;/a&gt; on Saturday focusing on Wave. For Wave, you can create Gadgets or Robots. I wanted to be able to monitor and control my house's non-existent burglar alarm and &lt;a href="http://en.wikipedia.org/wiki/X10_%28industry_standard%29"&gt;X10 appliances&lt;/a&gt; from inside a Wave. A Gadget is the best thing for that, which you'll see (entitled "Home Controller") on the right side of this blog.&lt;br /&gt;&lt;br /&gt;Assuming my machine at home is running the client code (which doesn't really control anything, it just fakes it), you can use the command "feed the cat" with password "abcd" to change the cat's state from hungry to full, or "wait a minute" to change the cat from full to hungry. Be patient, it can take up to fifteen seconds before your command produces a visible result. The Gadget and the client code are both polling a teeny web service on App Engine which passes information between them, and the polling rate is not hasty. The Gadget's &lt;a href="http://code.google.com/p/clipper-wware/source/browse/#hg/src"&gt;source&lt;/a&gt; is hosted on Google Code. A not-too-detailed description is &lt;a href="http://en.wikipedia.org/wiki/User:WillWare/Google_Gadget_Home_Controller"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Robots require working directly with the &lt;a href="http://wave-robot-java-client.googlecode.com/svn/trunk/doc/index.html"&gt;Wave API&lt;/a&gt;, which Gadgets don't. &lt;a href="http://code.google.com/p/clipper-wware/source/browse/#hg/src/lxrbot"&gt;Here&lt;/a&gt; is a Robot that will help you look stuff up in the Linux kernel source code, using the &lt;a href="http://lxr.linux.no/+trees"&gt;LXR&lt;/a&gt; website. To use the Robot in a wave, first add it to your Gmail contacts. Use the name "Lxreffy" and the email address "wware-lxreffy@appspot.com". Now go into Wave and search for the contact "Lxreffy", and you'll be able to invite it into any Wave. Then type "LXR: foobar" in a blip, and hit "Done", and it will append a series of web links to the blip showing where "foobar" appears in the kernel. Example screenshot below.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://willware.net/lxrscreen.png" /&gt;&lt;br /&gt;&lt;br /&gt;Another Robot uses &lt;a href="http://wiki.sympy.org/wiki/Main_Page"&gt;SymPy&lt;/a&gt; to enable symbolic algebra to be done within a Wave. The "SymPy { ... }" piece is typed by the human user, and the Robot responds by adding the response from SymPy.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://willware.net/sympybotscreen.png" /&gt;&lt;br /&gt;Rosie คือโปรแกรมคอมพิวเตอร์สำหรับการแปลภาษามนุษย์เขียนโดย Google. ลักษณะที่ฉันชอบไม่ได้งานดีมาก. ฉันจะใส่ข้อความภาษาไทยนี้บนบล็อกของฉัน.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4967210147545448551?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4967210147545448551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4967210147545448551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4967210147545448551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4967210147545448551'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/11/tinkering-with-google-gadgets.html' title='Tinkering with Google Wave Gadgets and Robots'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2774066006457588599</id><published>2009-10-12T19:34:00.000-07:00</published><updated>2010-02-24T08:41:05.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CUDA'/><category scheme='http://www.blogger.com/atom/ns#' term='GPUs'/><title type='text'>Hacking CUDA and OpenCL on Fedora 10</title><content type='html'>I discovered Fedora 11 is not compatible with NVIDIA's CUDA toolkit (now on &lt;a href="http://www.nvidia.com/object/cuda_get.html"&gt;version 2.3&lt;/a&gt;; &lt;i&gt;see note&lt;/i&gt; about driver version below) because the latter requires GCC 4.3 where Fedora 11 provides GCC 4.4. So I'll have to back down to &lt;a href="http://docs.fedoraproject.org/release-notes/f10/en_US/"&gt;Fedora 10&lt;/a&gt;. Here are some &lt;a href="http://www.mjmwired.net/resources/mjm-fedora-f10.html"&gt;handy notes&lt;/a&gt; for setting up Fedora 10. I installed a number of RPMs to get CUDA to build.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;pre&gt;sudo yum install eclipse-jdt eclipse-cdt \&lt;br /&gt;freeglut freeglut-devel kernel-devel \&lt;br /&gt;mesa-libGLU-devel libXmu-devel libXi-devel&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The Eclipse stuff wasn't all necessary for CUDA but I wanted it.&lt;br /&gt;&lt;br /&gt;In a comment to an earlier posting, &lt;a href="http://www.blogger.com/profile/05676046752428260715"&gt;Jesper&lt;/a&gt; told me about &lt;a href="http://en.wikipedia.org/wiki/OpenCL"&gt;OpenCL&lt;/a&gt;, a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, GPUs, and other processors. NVIDIA &lt;a href="http://www.nvidia.com/object/cuda_opencl.html"&gt;supports this&lt;/a&gt; and has an &lt;a href="http://developer.nvidia.com/object/opencl-download.html"&gt;OpenCL implementation&lt;/a&gt; which required updating my NVIDIA drivers to &lt;a href="http://developer.download.nvidia.com/compute/cuda/2_3/opencl/drivers/nvdrivers_2.3_linux_32_190.29.run"&gt;version 190.29&lt;/a&gt;, more recent than the version 190.18 drivers on NVIDIA's CUDA 2.3 page. When I installed 190.29, it warned me that it was uninstalling the 190.18 drivers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.python.org"&gt;Python&lt;/a&gt; enthusiasts will be interested in &lt;a href="http://mathema.tician.de/software/pyopencl"&gt;PyOpenCL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;NVIDIA provides a lot of resources and literature for getting started with OpenCL.&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.nvidia.com/object/get-opencl.html"&gt;OpenCL Drivers, Visual Profiler, SDK Code Samples and more&lt;/A&gt; &lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.nvidia.com/content/cudazone/download/OpenCL/NVIDIA_OpenCL_ProgrammingOverview.pdf"&gt;NVIDIA OpenCL Programming Overview&lt;/A&gt; &lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.nvidia.com/content/cudazone/download/OpenCL/NVIDIA_OpenCL_ProgrammingGuide.pdf"&gt;NVIDIA OpenCL Programming Guide&lt;/A&gt;&lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.nvidia.com/content/cudazone/CUDABrowser/downloads/papers/NVIDIA_OpenCL_BestPracticesGuide.pdf"&gt;NVIDIA OpenCL Best Practices Guide&lt;/A&gt;&lt;/LI&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/OpenCL/NVIDIA_OpenCL_JumpStart_Guide.pdf"&gt;OpenCL JumpStart Guide&lt;/A&gt;&lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.nvidia.com/object/cuda_get.html"&gt;NVIDIA GPU Computing SDK and Tools&lt;/A&gt;&lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.khronos.org/files/opencl-quick-reference-card.pdf"&gt;Khronos Quick Reference Card&lt;/A&gt;&lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=r1sN1ELJfNo&amp;amp;feature=channel_page"&gt;NVIDIA's OpenCL GPU n-body demo&lt;/A&gt;&lt;/LI&gt;&lt;li&gt;&lt;a href="http://www.khronos.org/registry/cl/"&gt;OpenCL Core API Specification, Headers, and Documentation&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2774066006457588599?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2774066006457588599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2774066006457588599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2774066006457588599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2774066006457588599'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/10/hacking-cuda-on-fedora-10.html' title='Hacking CUDA and OpenCL on Fedora 10'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8574901707427549223</id><published>2009-10-09T10:42:00.000-07:00</published><updated>2010-01-06T13:17:19.531-08:00</updated><title type='text'>Sampled profiling in Linux</title><content type='html'>A few years back I was doing some cross-platform &lt;a href="http://www.nanorex.com/"&gt;work&lt;/a&gt; on a mostly-Python package with a bunch of math libraries. I happened to be jumping back and forth between Linux and Mac, and I discovered that the Mac had this magical performance measurement tool that, as far as I knew, didn't exist for Linux. How could that be? How could such a great idea, obviously amenable to open source, NOT have made it into the Linux world? I was flabbergasted.&lt;br /&gt;&lt;a href="http://tk.files.storage.msn.com/x1pM0jCSUoiRhALPPnieNIE6Vr0zv4Lz4XurhcEhLxEItonj1zsoys-JWapopXQ6eb7kk5OGoAUt3u3OifodfORODMFlMsw-Qo1GM4L7PYy0diCzn211U1jKzyQ8MvW6jfkty7UeVBGtYw"&gt;&lt;img src="http://tk.files.storage.msn.com/x1pM0jCSUoiRhALPPnieNIE6Vr0zv4Lz4XurhcEhLxEItonj1zsoys-JWapopXQ6eb7kk5OGoAUt3u3OifodfORODMFlMsw-Qo1GM4L7PYy0diCzn211U1jKzyQ8MvW6jfkty7UeVBGtYw" width="300" height="188" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;That tool was a &lt;a href="http://en.wikipedia.org/wiki/Profiling_%28computer_programming%29#Statistical_profilers"&gt;sampling profiler&lt;/a&gt;. It works like this. At regular intervals, you stop the processor and say, what are you doing? what process are you in? what thread are you in? what does your call stack look like? and you collect statistics on all this stuff, figure out the percentages of time spent in different places, and present it in an easily understandable visual tree format.&lt;br /&gt;&lt;br /&gt;Thinking about it more, I saw that to make this work, you need to have built your code with debug enabled, so that all the symbols are present in the compiled binary. Most Linux software is built without debug symbols (or at least that was the common practice a few years ago) which is why this idea hadn't gotten traction in the Linux world.&lt;br /&gt;&lt;br /&gt;So today I stumbled across a &lt;a href="http://satyajitranjeev.wordpress.com/2009/05/13/what-to-expect-from-fedora-11/"&gt;cool review of Fedora 11 Linux&lt;/a&gt; and near the bottom, it talks about some of the &lt;a href="http://www.linuxjournal.com/article/7413"&gt;development work&lt;/a&gt; that Red Hat has been doing on the Eclipse IDE, including a sampling profiler called &lt;a href="http://www.eclipse.org/linuxtools/projectPages/oprofile/"&gt;OProfile&lt;/a&gt;. There's a nice little &lt;a href="http://ftp.ussg.iu.edu/eclipse/technology/linuxtools/videos/eclipse-oprofile-demo.ogg"&gt;video&lt;/a&gt; of a Red Hat engineer demonstrating OProfile. Very cool stuff. One of the most impressive things is that in addition to simply sampling at fixed time intervals, you can also choose to sample on events happening in the computer hardware, like when the processor drives data onto the &lt;a href="http://en.wikipedia.org/wiki/Front-side_bus"&gt;front-side bus&lt;/a&gt;. Wow, yikes. I don't have a clear idea what that would help with, but I guess some performance issues can correlate to things happening in the hardware.&lt;br /&gt;&lt;br /&gt;Here are some of my old notes I found on this topic. These notes are old and I didn't know about OProfile at the time, though OProfile originated in the same group at HP that did the QProf work described below. The old notes will be in italics to avoid confusion with more current information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Finally, something the Mac has that Linux doesn't have&lt;/span&gt;&lt;br /&gt;&lt;p style="font-style: italic;"&gt;The Mac has this cool little utility called sample. Here's how it works. Suppose some program is running as process ID 1234. You type "sample 1234 60" in another terminal, and it interrupts that process 100 times per second for 60 seconds, getting a stack trace each time. You end up with a histogram showing the different threads and C call stacks, and it becomes very easy to figure out where the program is spending most of its time. It's very cool. It doesn't even significantly slow down the process under study. &lt;/p&gt;&lt;p style="font-style: italic;"&gt;I started looking to see if there was anything similar for Linux. There ought to be. This isn't so different from what GDB does. The closest thing I could find was something called pstack, which does this once, but doesn't seem so good at extracting the names of C routines. I've never seen pstack get a stack that was more than three calls deep. I also found a variant called lsstack.&lt;/p&gt;&lt;p style="font-style: italic;"&gt;I think the Mac can do this because Apple can dictate that every compile must have the -g switch turned on. The pstack utility came originally from the BSD world.&lt;/p&gt;&lt;p style="font-style: italic;"&gt;If there's ever a working sample utility for Linux, it will be a brilliant thing.&lt;/p&gt;&lt;p style="font-style: italic;"&gt;First you need a timer process that interrupts the target process. On each interrupt, you collect a stack trace. You do that by having an interrupt handler that gets the stack above it and throws it in some kind of data structure. In Mac OS, you can do all this without recompiling any of the target process code. &lt;/p&gt;&lt;p style="font-style: italic;"&gt;You run the timer for however long and collect all this stuff. You end up with a data structure with all these stacks in it. Now you can create a tree with histogram numbers for each node in the tree, where each node in the tree represents a program counter. Next you use map files to convert the program counters to line numbers in source files, and if you want brownie points, you even include the source line for each of them. &lt;/p&gt;&lt;p style="font-style: italic;"&gt;This should be feasible in Linux. Check out "man request_irq". &lt;/p&gt;&lt;p style="font-style: italic;"&gt;The only issue with making this work as well in Linux as it does on the Mac is that code that isn't built with "-g" will not have the debug information for pulling out function names and line numbers. Somebody (probably David Mosberger-Tang)  has already done this project: &lt;/p&gt; &lt;ul style="font-style: italic;"&gt;&lt;li&gt; &lt;a href="http://www.hpl.hp.com/research/linux/qprof/"&gt;http://www.hpl.hp.com/research/linux/qprof/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8574901707427549223?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8574901707427549223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8574901707427549223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8574901707427549223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8574901707427549223'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/10/sampled-profiling-in-linux.html' title='Sampled profiling in Linux'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5680257377073868062</id><published>2009-08-25T05:19:00.001-07:00</published><updated>2010-02-24T08:43:16.171-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='molecular modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><title type='text'>I blinked, and web apps advanced ten years</title><content type='html'>Back in the day, we all watched static HTML pages give way to CGI, followed by MySQL and Perl, followed by Java middleware. Back then I wrote &lt;a href="http://willware.net/ncad.html"&gt;NanoCAD&lt;/a&gt;, but client-side Java applets never got traction. Now we have &lt;a href="http://en.wikipedia.org/wiki/Adobe_Flash"&gt;Flash&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Silverlight"&gt;Silverlight&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;AJAX&lt;/a&gt;. On the server side we have &lt;a href="http://en.wikipedia.org/wiki/PHP"&gt;PHP&lt;/a&gt;, and on the client side, &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;Javascript&lt;/a&gt;, which is totally unrelated to Java. Many modern browsers now support the &lt;a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29"&gt;canvas tag&lt;/a&gt;. Kinda makes me want to recast NanoCAD in more modern technology.&lt;br /&gt;&lt;br /&gt;Simultaneously we now have netbooks - small cheap wifi-connected laptops that can run a decent web browser and not much more. Google and others are pitching the idea that all our previously shrink-wrapped apps can therefore live in the cloud. It's an intriguing idea.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/wware-misc/source/browse/trunk/ajaxfun/blarg.php"&gt;Source code&lt;/a&gt; for a minimal AJAX example, demo &lt;a href="http://willware.net/blarg.php"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;There are several free webhosting services listed &lt;a href="http://www.freewebspace.net/"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;You can test whether your browser supports canvas tags &lt;a href="http://willware.net/trycanvas.html"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;I'm tinkering with a molecule viewing browser app &lt;a href="http://willware.net/nc.html"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;More about Javascript&lt;/li&gt;&lt;ul&gt;&lt;li&gt;A cool &lt;a href="http://en.wikipedia.org/wiki/Soft_body_dynamics"&gt;soft body&lt;/a&gt; &lt;a href="http://dev.opera.com/articles/view/blob-sallad-canvas-tag-and-javascrip/"&gt;Javascript app&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Douglas_Crockford"&gt;Doug Crockford&lt;/a&gt; has written &lt;a href="http://www.crockford.com/javascript/"&gt;deeply insightful stuff&lt;/a&gt; from a linguistic perspective.&lt;/li&gt;&lt;li&gt;Access to &lt;a href="http://en.wikipedia.org/wiki/Document_Object_Model"&gt;DOM&lt;/a&gt;: &lt;a href="http://www.javascriptkit.com/domref/"&gt;1&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en/Traversing_an_HTML_table_with_JavaScript_and_DOM_Interfaces"&gt;2&lt;/a&gt;, &lt;a href="http://www.quirksmode.org/dom/intro.html"&gt;3&lt;/a&gt;, &lt;a href="http://willware.net/domhack.html"&gt;4&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Libraries: &lt;a href="http://prototypejs.org/"&gt;Prototype&lt;/a&gt;, &lt;a href="http://script.aculo.us/"&gt;Scriptaculous&lt;/a&gt;, and &lt;a href="http://www.dojotoolkit.org/"&gt;Dojo&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.w3schools.com/js/tryit.asp?filename=tryjs_intro"&gt;Online "IDE"&lt;/a&gt; for Javascript.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Tutorials and references&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Javascript: &lt;a href="http://www.javascriptkit.com/javatutors/"&gt;1&lt;/a&gt;, &lt;a href="http://www.w3schools.com/js/"&gt;2&lt;/a&gt;, &lt;a href="http://www.webmonkey.com/tutorial/JavaScript_Tutorial"&gt;3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Canvas tag: &lt;a href="https://developer.mozilla.org/en/Canvas_tutorial"&gt;1&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en/Drawing_Graphics_with_Canvas"&gt;2&lt;/a&gt;, &lt;a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/"&gt;3&lt;/a&gt;, &lt;a href="http://www.canvasdemos.com/"&gt;4&lt;/a&gt;, &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html"&gt;5&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Videos &lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=jLP9Q240DKo"&gt;Prototype&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bannerrep.com/videos/tutorial_scriptaculous/index.html"&gt;Scriptaculous&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=6656858892835599820#"&gt;Dojo&lt;/a&gt;, including general discussion of Javascript&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=U49_tSB_HrE"&gt;Authoring interactive Adobe Flash content&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;When you're working in Java or Python, you can use an IDE like &lt;a href="http://www.jetbrains.com/idea/"&gt;Idea&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/IDLE_%28Python%29"&gt;Idle&lt;/a&gt;. Is there anything like that for Javascript? I am not aware of it, if there is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5680257377073868062?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5680257377073868062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5680257377073868062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5680257377073868062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5680257377073868062'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/08/i-blinked-and-web-apps-advanced-ten.html' title='I blinked, and web apps advanced ten years'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2820860799790726754</id><published>2009-07-21T05:01:00.001-07:00</published><updated>2010-02-24T08:41:27.613-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CUDA'/><category scheme='http://www.blogger.com/atom/ns#' term='GPUs'/><title type='text'>Building a GPU machine</title><content type='html'>I've been reading lately about what NVIDIA has been doing with &lt;a href="http://www.nvidia.com/object/cuda_home.html"&gt;CUDA&lt;/a&gt; and it's quite impressive. CUDA is a programming environment for their &lt;a href="http://en.wikipedia.org/wiki/Graphics_processing_unit"&gt;GPU&lt;/a&gt; boards, available for Windows, Linux, and Mac. I am putting together a Linux box with an NVIDIA &lt;a href="http://www.nvidia.com/object/product_geforce_9600gt_us.html"&gt;9600GT&lt;/a&gt; board to play with this stuff. The NVIDIA board cost me $150 at &lt;a href="http://www.staples.com/"&gt;Staples&lt;/a&gt;. Eventually I intend to replace it with a &lt;a href="http://www.nvidia.com/object/product_geforce_gtx_280_us.html"&gt;GTX280&lt;/a&gt; or &lt;a href="http://www.nvidia.com/object/product_geforce_gtx_285_us.html"&gt;GTX285&lt;/a&gt;, which both have 240 processor cores to the 9600GT's 64. I purchased the following from &lt;a href="http://www.magicmicro.com/"&gt;Magic Micro&lt;/a&gt;, which was about $300 including shipping:&lt;br /&gt;&lt;table cellspacing="0" cellpadding="0" width="579" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Intel Barebones #2 &lt;/b&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;Intel Pentium Dual Core E2220 2.4 GHz, 800FSB (Dual Core) 1024K&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;Spire Socket 775 Intel fan&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;ASRock 4Core1600, G31, 1600FSB, Onboard Video, PCI Express, Sound, LAN&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;4GB (2x2GB) PC6400 DDR2 800 Dual Channel&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;AC 97 3D Full Duplex sound card (onboard)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;Ethernet network adapter (onboard)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;Nikao Black Neon ATX Case w/side window &amp;amp; front USB&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" align="left" colspan="4"&gt;* &lt;i&gt;Okia 550W ATX Power Supply w/ 6pin PCI-E&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I scavenged an old DVD-ROM drive and a 120-gig HD from an old machine, plus a keyboard, mouse, and 1024x768 LCD monitor. I installed Slackware Linux. I went to the &lt;a href="http://www.nvidia.com/object/cuda_get.html"&gt;CUDA download website&lt;/a&gt; and picked up the driver, the toolkit, the SDK, and the debugger.&lt;br /&gt;&lt;br /&gt;This is the most powerful PC I've ever put together, and it was a total investment of just a few hundred dollars. For many years I've drooled at the prospect of networking a number of Linux boxes and using them for scientific computation, but now I can do it all in one box. It's a real live supercomputer sitting on my table, and it's affordable.&lt;br /&gt;&lt;br /&gt;I am really starting to like NVIDIA. They provide a lot of support for scientific computation. They are very good about &lt;a href="http://developer.nvidia.com/page/documentation.html"&gt;sharing their knowledge&lt;/a&gt;. They post lots of videos of scientific uses for their hardware.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/view_play_list?p=B4EBCE6F71F703AE"&gt;http://www.youtube.com/view_play_list?p=B4EBCE6F71F703AE&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=8XyKWJj0ZYI"&gt;http://www.youtube.com/watch?v=8XyKWJj0ZYI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=R0xvW36BCu0"&gt;http://www.youtube.com/watch?v=R0xvW36BCu0&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img height="251" src="http://takashiyoshida.org/wp-content/uploads/2008/11/cuda-nbody-example.png" width="320" align="right" /&gt;NVIDIA's SDK includes several demos, some of them visually attractive: &lt;a href="http://www.youtube.com/watch?v=HUGjUvjtwS8"&gt;n-body&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=dX8KeqYLY10"&gt;smoke particles&lt;/a&gt;, a &lt;a href="http://www.youtube.com/watch?v=RaCPrXYOiRE"&gt;Julia set&lt;/a&gt;, and a &lt;a href="http://www.youtube.com/watch?v=wwy7bcmDjGQ"&gt;fluid dynamics&lt;/a&gt; demo. When running the n-body demo, the 9600GT claims to be going at 125 &lt;a href="http://en.wikipedia.org/wiki/FLOPS"&gt;gigaflops&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_21/toolkit/docs/CUDA_Getting_Started_2.2_Linux.pdf"&gt;CUDA 2.2 QuickStart Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_21/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.2.1.pdf"&gt;CUDA 2.2 Programming Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_2/toolkit/docs/CUDA_Reference_Manual_2.2.pdf"&gt;CUDA 2.2 Reference Manual&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_2/toolkit/docs/cudatoolkit_release_notes_linux.txt"&gt;CUDA 2.2 Toolkit Release Notes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_21/sdk/docs/cudasdk_release_notes_linux.txt"&gt;CUDA 2.2.1 SDK Release Notes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_2/toolkit/docs/cudaprof_1.2_readme.html"&gt;CUDA Visual Profiler v1.2 Readme&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/CUBLAS_Library_2.1.pdf"&gt;Documentation for CUDA BLAS (CUBLAS) Library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/CUFFT_Library_2.1.pdf"&gt;Documentation for CUDA FFT (CUFFT) Library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jrti.com/pdf/nvidia_cuda_bestpractguide.pdf"&gt;NVIDIA CUDA C Programming Best Practices Guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;A few more resources...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.nvidia.com/object/cg_tutorial_home.html"&gt;http://developer.nvidia.com/object/cg_tutorial_home.html&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html"&gt;http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.myacrobatpdf.com/2759/tutorial-basics-of-gpu-programming.html"&gt;http://www.myacrobatpdf.com/2759/tutorial-basics-of-gpu-programming.html&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://developer.amd.com/gpu/ATIStreamSDK/pages/TutorialOpenCL.aspx"&gt;http://developer.amd.com/gpu/ATIStreamSDK/pages/TutorialOpenCL.aspx&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.colefusion.com/class/cs594/gpu-final/tutorial/"&gt;http://www.colefusion.com/class/cs594/gpu-final/tutorial/&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ncsa.illinois.edu/~kindr/projects/hpca/files/NCSA_GPU_tutorial_d4.pdf"&gt;http://www.ncsa.illinois.edu/~kindr/projects/hpca/files/NCSA_GPU_tutorial_d4.pdf&lt;/a&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2820860799790726754?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2820860799790726754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2820860799790726754' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2820860799790726754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2820860799790726754'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/07/building-gpu-machine.html' title='Building a GPU machine'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2772223866223220850</id><published>2009-07-10T05:09:00.001-07:00</published><updated>2010-01-26T13:18:10.819-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPUs'/><title type='text'>Moore's Law and GPUs</title><content type='html'>Way back when, &lt;a href="http://en.wikipedia.org/w/index.php?title=Gordon_Moore"&gt;Gordon Moore&lt;/a&gt; of &lt;a href="http://en.wikipedia.org/wiki/Intel_Corporation"&gt;Intel&lt;/a&gt; came up with his &lt;a href="http://en.wikipedia.org/wiki/Moore%27s_Law"&gt;"law"&lt;/a&gt; that the number of transistors on a given area of silicon would double every 18 months. Currently chip manufacturers use a &lt;a href="http://en.wikipedia.org/wiki/45_nanometer"&gt;45 nm process&lt;/a&gt;, and are preparing to move to a &lt;a href="http://en.wikipedia.org/wiki/32_nanometer"&gt;32 nm process&lt;/a&gt;. There is an &lt;a href="http://en.wikipedia.org/wiki/International_Technology_Roadmap_for_Semiconductors"&gt;International Technology Roadmap for Semiconductors&lt;/a&gt; that lays all this out. As feature sizes shrink, we need progressively more exotic technology to fabricate chips. The ITRS timeframe for a &lt;a href="http://en.wikipedia.org/wiki/16_nanometer"&gt;16 nm process&lt;/a&gt; is 2018, well beyond the expectation set by Moore's Law. There is a &lt;a href="http://tech.yahoo.com/blogs/null/145121"&gt;lot&lt;/a&gt; of &lt;a href="http://www.informationweek.com/news/hardware/processors/showArticle.jhtml?articleID=217900161"&gt;punditry&lt;/a&gt; around these days about how Moore's Law is slowing down.&lt;br /&gt;&lt;br /&gt;That's process technology. The other way to improve computer performance is &lt;a href="http://en.wikipedia.org/wiki/CPU_design"&gt;processor architecture&lt;/a&gt;. As advances in process technology become more expensive and less frequent, architecture plays an increasingly important role. It's always been important, and in the last 20 years, microprocessors have taken on innovations that had previously appeared only in big iron, things like &lt;a href="http://en.wikipedia.org/wiki/Microcode"&gt;microcode&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Reduced_instruction_set_computer"&gt;RISC&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Pipeline_%28computing%29"&gt;pipelining&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/CPU_cache"&gt;cacheing&lt;/a&gt; of instructions and data, and &lt;a href="http://en.wikipedia.org/wiki/Branch_predictor"&gt;branch prediction&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Every time process technology hits a bump in the road, it's a boost for parallelism. In the 1980s, a lot of start-ups tried to build &lt;a href="http://en.wikipedia.org/wiki/Massively_parallel"&gt;massively parallel&lt;/a&gt; computers. I was a fan of &lt;a href="http://en.wikipedia.org/wiki/Thinking_Machines"&gt;Thinking Machines&lt;/a&gt; in Cambridge, having read Danny Hillis's &lt;a href="http://en.wikipedia.org/wiki/Connection_Machine"&gt;PhD thesis&lt;/a&gt;. The premise of these machines was to make thousands of processors, individually fairly feeble, arranged in a broadcast architecture. The &lt;a href="http://en.wikipedia.org/wiki/Transputer"&gt;Transputer&lt;/a&gt; chip was another effort in a similar direction. One issue then was that people wanted compilers that would automatically parallelize code written for serial processors, but that turned out to be an intractable problem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://media.bestofmicro.com/Q/Z/111131/original/020.png"&gt;&lt;img style="margin: 0px 0px 10px 10px; float: right; width: 240px; height: 200px;" alt="" src="http://media.bestofmicro.com/Q/Z/111131/original/020.png" border="0" /&gt;&lt;/a&gt;Given the slowing of Moore's Law these days, it's good to be a GPU manufacturer. The GPU guys never claim to offer a parallelizing compiler -- one that can be applied to existing code written for a serial computer -- instead they just make it very easy to write new parallel code. Take a look at nVIDIA's &lt;a href="http://http.developer.nvidia.com/GPUGems/gpugems_part01.html"&gt;GPU Gems&lt;/a&gt;, and notice there's a lot of math and very little code. Because you write GPU code in plain old &lt;a href="http://en.wikipedia.org/wiki/C_programming_language"&gt;C&lt;/a&gt;, they don't need to spend a lot of ink explaining a lot of wierd syntax.&lt;br /&gt;&lt;br /&gt;Meanwhile the scientific community has &lt;a href="http://www.ks.uiuc.edu/Research/gpu/"&gt;realized&lt;/a&gt; over the last five years that despite the unsavory association with video games, GPUs are nowadays the most bang for your buck available in commodity computing hardware. &lt;a href="http://developer.download.nvidia.com/compute/cuda/2_0/docs/NVIDIA_CUDA_Programming_Guide_2.0.pdf"&gt;Reading&lt;/a&gt; about nVIDIA's &lt;a href="http://www.nvidia.com/object/cuda_home.html"&gt;CUDA&lt;/a&gt; &lt;a href="http://www.tomshardware.com/reviews/nvidia-cuda-gpu,1954-8.html"&gt;technology&lt;/a&gt; just makes me drool. The claims are that for scientific computation, an inexpensive GPU represents a speed-up of 20x to 100x over a typical CPU.&lt;br /&gt;&lt;br /&gt;When I set out to write this, GPUs seemed to me like the historically inevitable next step. Having now recalled some of the earlier pendulum swings between process technology and processor architecture, I see that would be an overstatement of the case. But certainly GPU architecture and development will be important for those of us whose retirements are yet a few years off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2772223866223220850?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2772223866223220850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2772223866223220850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2772223866223220850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2772223866223220850'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/07/moores-law-and-gpus.html' title='Moore&apos;s Law and GPUs'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4838586333312564023</id><published>2009-06-24T22:01:00.000-07:00</published><updated>2009-06-26T21:12:48.802-07:00</updated><title type='text'>Whole-cell simulation</title><content type='html'>&lt;img style="WIDTH: 283px; HEIGHT: 244px" height="212" src="http://upload.wikimedia.org/wikipedia/commons/a/ac/NIEHScell.jpg" width="367" align="right" /&gt;&lt;a href="http://e-cell.org/ecell/"&gt;E-Cell&lt;/a&gt; is a software model of a biological &lt;a href="http://en.wikipedia.org/wiki/Cell_(biology)"&gt;cell&lt;/a&gt;. To use E-Cell (as it existed in its initial incarnation), you define a set of DNA sequences and chemical reactions, and the program iterates them over time, tracking the concentrations of different proteins and other goings-on in the cell.&lt;br /&gt;&lt;br /&gt;That's very cool, but it does require you to tell it what kinds of reactions are possible, and their relative likelihoods. What you get out is concentrations, not information about individual protein molecules. That approach doesn't know the shapes of molecules, or anything detailed about how the molecules interact.&lt;br /&gt;&lt;br /&gt;E-Cell later evolved into an umbrella project that encompasses several different simulation subprojects, all with the goal of simulating an entire biological cell. So this isn't a limitation of E-Cell per se, just that particular simulation approach.&lt;br /&gt;&lt;br /&gt;At the extreme end, one could imagine a full-blown molecular dynamics simulation of every atom in the cell. That would be great but for two problems. First, it would require a horrendous amount of computation. Cells have something like 10&lt;sup&gt;15&lt;/sup&gt; atoms in them, and molecular dynamics simulations typically have time steps in the femtoseconds, where cellular activities frequently take place over tens of minutes.&lt;br /&gt;&lt;br /&gt;The second problem is making sense of the forest amid the trees. You're tracking every atom, but you're really curious about membranes and DNA and mitochondria and all those interesting little structures inside the cell. The computer needs to realize that this particular collection of atoms is a ribosome in this orientation, transcribing this particular base pair and grabbing that particular amino acid. So in addition to this monstrously impossible simulation, there are some tough problems in pattern recognition.&lt;br /&gt;&lt;br /&gt;Nevertheless I hold out hope that whole-cell simulation on a scale considerably more detailed than E-Cell is still a worthwhile goal. I suspect that there is some middle road of simulation detail. Perhaps molecules and cell structures can be represented with rigid body mechanics, with surface representations of electric charge and other attractive and repulsive forces. Some are fairly rigid, but the mooshier ones can be represented by &lt;a href="http://en.wikipedia.org/wiki/Finite_element_method_in_structural_mechanics"&gt;finite element models&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Why bother with whole-cell simulation? What can it do for humanity, or for you in particular? If a half-decent simulation could run on a single desktop computer (or maybe a small number of desktop computers) it would allow large numbers of researchers and hobbyists to perform biological experiments in silico. It might advance medical science quite rapidly. It might bring about cures for diseases that are currently untreatable. At the least it would provide a lot of educational opportunities that wouldn't otherwise exist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4838586333312564023?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4838586333312564023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4838586333312564023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4838586333312564023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4838586333312564023'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/06/whole-cell-simulation.html' title='Whole-cell simulation'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3759500804691009311</id><published>2009-06-24T09:00:00.000-07:00</published><updated>2009-06-24T21:13:43.509-07:00</updated><title type='text'>Cool robot videos</title><content type='html'>&lt;object height="340" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/47-H0R0OCA0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/47-H0R0OCA0&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0S2dc_B-6Kg&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/0S2dc_B-6Kg&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.willowgarage.com/"&gt;Willow Garage&lt;/a&gt; is a Bay area robot company working on a platform intended to make it easier to build little robots for research and household use. There's a &lt;a href="http://www.foresight.org/nanodot/?p=3121"&gt;nice writeup&lt;/a&gt; about them on Foresight's website. &lt;blockquote&gt;They are oriented to making an impact on the field of robotics rather than making an immediate profit. Cousins explained it in these terms: the average robotics PhD student spends 90% of his time building a robot and the remaining 10% extending the state of the art. If Willow Garage succeeds, those numbers will be reversed.&lt;/blockquote&gt;Neat. I'd love to get a chance to play with one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3759500804691009311?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3759500804691009311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3759500804691009311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3759500804691009311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3759500804691009311'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/06/cool-robot-videos.html' title='Cool robot videos'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6716189803845960580</id><published>2009-05-29T07:10:00.000-07:00</published><updated>2010-04-01T08:31:37.392-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPUs'/><category scheme='http://www.blogger.com/atom/ns#' term='molecular modeling'/><title type='text'>Molecular modeling with Hadoop?</title><content type='html'>&lt;a href="http://jennifersaylor.files.wordpress.com/2006/08/molecule.jpg"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 250px;" alt="" src="http://jennifersaylor.files.wordpress.com/2006/08/molecule.jpg" border="0" /&gt;&lt;/a&gt;&lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt; is Apache's implementation of the &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;MapReduce&lt;/a&gt; distributed computing scheme innovated by Google. Amazon &lt;a href="http://aws.amazon.com/elasticmapreduce/"&gt;rents out&lt;/a&gt; Hadoop services on their cluster. It's fairly straightforward to set up Hadoop on a cluster of Linux boxes. Having myself &lt;a href="http://www.islandone.org/Foresight/Conferences/MNT05/Papers/Ware/index.html"&gt;a long-standing interest&lt;/a&gt; in distributed computing approaches to molecular modeling, I have been trying to figure out how Hadoop could be applied to do very large-scale molecular simulations.&lt;br /&gt;&lt;br /&gt;MapReduce is great for problems where large chunks of computation can be done in isolation. The difficulty with molecular modeling is that every atom is pushing or pulling on every other atom on every single time step. The problem doesn't nicely partition into large isolated chunks. One could run a MapReduce cycle on each time step, but that would be horribly inefficient - on each time step, every map job needs as input the position and velocity of every atom in the entire simulation.&lt;br /&gt;&lt;br /&gt;There are existing solutions like &lt;a href="http://www.ks.uiuc.edu/Research/namd/"&gt;NAMD&lt;/a&gt;, which uses &lt;a href="http://people.ee.duke.edu/~wrankin/Dpmta/"&gt;DPMTA&lt;/a&gt; for the long-range forces between atoms. For a cluster of limited size these are the appropriate tools. For large clusters with hundreds or thousands of machines, the rate of hardware failures becomes a consideration that can't be ignored.&lt;br /&gt;&lt;br /&gt;MapReduce provides a few principles for working in the very-large-cluster domain:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Let your infrastructure handle hardware failures, just like the way the Internet invisibly routes around dead servers.&lt;/li&gt;&lt;li&gt;Individual machines are anonymous. You never write application code that directly addressses an individual machine.&lt;/li&gt;&lt;li&gt;Don't waste too much money trying to make the hardware more reliable. It won't pay off in the end.&lt;/li&gt;&lt;li&gt;Use a distributed file system that reliably retains the inputs to a task until that task has been successfully completed.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Could the tasks that NAMD assigns to each machine be anonymized with respect to which machine they run on, and the communications routed through a distributed filesystem like Hadoop's &lt;a href="http://hadoop.apache.org/core/docs/current/hdfs_design.html"&gt;HDFS&lt;/a&gt;? Certainly it's possible in principle. Whether I'll be able to make any reasonable progress on it in my abundant spare time is another matter.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6716189803845960580?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6716189803845960580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6716189803845960580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6716189803845960580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6716189803845960580'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/05/molecular-modeling-with-hadoop.html' title='Molecular modeling with Hadoop?'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8349801949419406079</id><published>2009-05-28T16:57:00.001-07:00</published><updated>2010-01-19T13:39:55.099-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='economics'/><category scheme='http://www.blogger.com/atom/ns#' term='compensation models'/><title type='text'>More thinking about compensation models</title><content type='html'>I've been watching some of &lt;a href="http://www.thehuntforgollum.com/updates.htm"&gt;The Hunt for Gollum&lt;/a&gt;. The quality is quite good, and some of the camera effects are surprisingly clever.&lt;br /&gt;&lt;br /&gt;I am interested in the question, how do you release a work so that it ultimately ends up in the public domain, but first make some money (perhaps a lot)? And how do you do this when your customer base is entirely aware that, in the long run, it will be available for free?&lt;br /&gt;&lt;br /&gt;Back in the Eighties, &lt;a href="http://en.wikipedia.org/wiki/Borland"&gt;Borland&lt;/a&gt; sold their &lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal"&gt;Turbo Pascal&lt;/a&gt; development system for only $30 when competing products sold for hundreds, and did nothing in hardware or software to implement any sort of copy protection, while their competitors scrambled for complicated but unsuccessful approaches to combat piracy. Borland's approach to copy protection was simply the honor system, and making the product cheap enough that nobody minded paying for it.&lt;br /&gt;&lt;br /&gt;The machinima &lt;a href="http://en.wikipedia.org/wiki/Red_vs._Blue"&gt;Red vs. Blue&lt;/a&gt; is released serially as episodes. Those guys have an interesting approach:&lt;br /&gt;&lt;blockquote&gt;Members of the official website can gain sponsor status for a fee of US$10 every six months. Sponsors can access videos a few days before the general public release, download higher-resolution versions of the episodes, and access special content released only to sponsors. For example, during &lt;a href="http://en.wikipedia.org/wiki/Red_vs._Blue_%28season_5%29" title="Red vs. Blue (season 5)"&gt;season 5&lt;/a&gt;, Rooster Teeth began to release directors' commentary to sponsors for download. Additionally, while the public archive is limited to rotating sets of videos, sponsors can access content from previous seasons at any time.&lt;br /&gt;&lt;/blockquote&gt;They are smart guys who have been doing this for years now, so it's likely they've hit upon as optimal a solution as is practical. Of course it helps that they have a great product that attracts a lot of interest. They are following the Borland approach: sponsorship is inexpensive and there is no attempt at copy protection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8349801949419406079?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8349801949419406079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8349801949419406079' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8349801949419406079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8349801949419406079'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/05/more-thinking-about-compensation-models.html' title='More thinking about compensation models'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5876162226477067021</id><published>2009-05-28T14:54:00.001-07:00</published><updated>2009-05-28T16:36:51.410-07:00</updated><title type='text'>Computer performance vibes</title><content type='html'>There are a number of topics pertaining to computer performance that I want to learn more about. As an ex-EE, I should be keeping up with this stuff better.&lt;br /&gt;&lt;br /&gt;Processors are fast, memory chips are slow. We put a &lt;a href="http://en.wikipedia.org/wiki/CPU_cache"&gt;cache&lt;/a&gt; between them so that the processor need not go out to memory on every read and write. There is a &lt;a href="http://en.wikipedia.org/wiki/Cache_algorithms"&gt;dense body of thought&lt;/a&gt; about cache design and optimization. I might blog about this stuff in future. It's a kinda heavy topic.&lt;br /&gt;&lt;br /&gt;One way to make processors run really fast is to arrange steps in a &lt;a href="http://en.wikipedia.org/wiki/Instruction_pipeline"&gt;pipeline&lt;/a&gt;. The CPU reads instruction one from instruction memory, and then it needs to read something from data memory, do an arithmetic operation on it, and put the result in a register. While reading from data memory, the CPU is simultaneously reading instruction two. While doing arithmetic, it's reading instruction three, and also doing the memory read for instruction two. And so forth, so that the processor is chopped up into a sequence of sub-processors, each busy all the time.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://developer.apple.com/hardwaredrivers/ve/images/full_pipeline.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;Apple has a nice, more detailed discussion, &lt;a href="http://developer.apple.com/hardwaredrivers/ve/software_pipelining.html"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div align="left"&gt; &lt;/div&gt;&lt;div align="left"&gt;But there is a complication with pipelining. Some of these instructions are branch instructions, which means that the next instruction could be either of two different ones. That's potentially a mess, because you've already got the pipeline full of stuff when you discover whether or not you're taking the branch, and you might find that the instructions you fetched were the wrong ones, so you have to go back and do all those same operations with a different sequence of instructions. Ick.&lt;/div&gt;&lt;div align="left"&gt; &lt;/div&gt;&lt;div align="left"&gt;The work-around is &lt;a href="http://en.wikipedia.org/wiki/Branch_predictor"&gt;branch prediction&lt;/a&gt;. The CPU tries to figure out, as accurately as it can, which sequence it will end up going down, and if all goes well, does that early enough to fill the pipeline correctly the first time. It doesn't have to be perfect, but it should try to guess correctly as often as possible.&lt;/div&gt;&lt;div align="left"&gt; &lt;/div&gt;&lt;div align="left"&gt;A couple more things they're doing these days. One is to perform &lt;a href="http://en.wikipedia.org/wiki/Quad_Data_Rate"&gt;several memory transfers per cycle&lt;/a&gt;. Another is something Intel calls &lt;a href="http://en.wikipedia.org/wiki/Hyper-threading"&gt;hyper-threading&lt;/a&gt;, where some of the CPU's registers are duplicated, allowing it to behave like two separate CPUs. This can be a win if one half is stalled waiting for a memory access; the other half just plows ahead.&lt;/div&gt;&lt;div align="left"&gt; &lt;/div&gt;&lt;div align="left"&gt;That's all the vaguely intelligent stuff I have to say on this topic at the moment. Maybe I'll go into more detail in future, no promises.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5876162226477067021?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5876162226477067021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5876162226477067021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5876162226477067021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5876162226477067021'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/05/computer-performance-vibes.html' title='Computer performance vibes'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8449669711422694341</id><published>2009-05-01T08:37:00.000-07:00</published><updated>2010-01-19T10:16:31.759-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compensation models'/><title type='text'>Fan-made movie: The Hunt for Gollum</title><content type='html'>&lt;img align="right" src="http://www.thehuntforgollum.com/downloads/stuff/banner16.jpg" /&gt;&lt;a href="http://www.thehuntforgollum.com/"&gt;The Hunt for Gollum&lt;/a&gt; is a 40-minute high-def movie made by fans of the Lord of the Rings trilogy in general, and the Peter Jackson movies in particular. The trailers look beautiful, the cinematography looks about as good as the three movies. This is being done on a purely non-profit basis and the entire movie will be released free to the Internet on Sunday, May 3rd.&lt;br /&gt;&lt;br /&gt;I kinda wish these guys had tried to make money with this, for a few reasons. First, they should be rewarded for such a monumental effort. No doubt many of the primary organizers will get their pick of sweet jobs, just as the primary developers of Apache, Linux, Python, etc. have gone on to sweet jobs after releasing useful free software, but other participants might have gotten some compensation for their time and effort.&lt;br /&gt;&lt;br /&gt;Second, there was an opportunity here to experiment with compensation models whose endgame is the release of a work into the public domain. I've often wondered if a big movie could be made by an independent group and released to the public domain, and still bring in significant money. My first idea for a &lt;a href="http://www.danielsolis.com/meatbot/ransom.html"&gt;ransom model&lt;/a&gt; where each frame of the movie would be encrypted and distributed, and encryption keys for frames or groups of frames would be published as various amounts of the total desired donation were reached. There would probably be a clause that the entire key set would be released unconditionally at some future date.&lt;br /&gt;&lt;br /&gt;I think I have a better idea on further reflection. Before the public-domain release, find some buyers who are willing to pay for the privilege of having the movie before the big release. The buyers need to be informed that a public-domain release will occur and on what date, so that they understand that the window to make any money off the movie will be limited.&lt;br /&gt;&lt;br /&gt;Another possibility is a ransom model with a linearly-decreasing donation threshold, with the public-domain release scheduled for when the donation threshold reaches zero. If the total donations cross the threshold before then, the release occurs at that time.&lt;br /&gt;&lt;br /&gt;Anyway, kudos to the people who made "Hunt for Gollum", thanks for your efforts, and I am eagerly looking forward to seeing the movie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8449669711422694341?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8449669711422694341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8449669711422694341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8449669711422694341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8449669711422694341'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/05/fan-made-movie-hunt-for-gollum.html' title='Fan-made movie: The Hunt for Gollum'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7216077784048540709</id><published>2009-04-22T13:02:00.000-07:00</published><updated>2010-02-24T06:46:38.274-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><title type='text'>Machines doing actual science, not just lab work</title><content type='html'>Here's the press release: &lt;a href="http://www.admin.cam.ac.uk/news/dp/2009040201"&gt;Robot scientist becomes first machine to discover new scientific knowledge&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In an earlier posting, I discussed the idea of computers participating in the reasoning process of the scientific method. There are, as far as I can see, two fields that are applicable to this. One is &lt;a href="http://en.wikipedia.org/wiki/Machine_learning"&gt;machine learning&lt;/a&gt;, where a computer studies a body of data to find patterns in it. When done with statistical methods, this is called &lt;a href="http://en.wikipedia.org/wiki/Data_mining"&gt;data mining&lt;/a&gt;. The other is &lt;a href="http://en.wikipedia.org/wiki/Semantic_reasoner"&gt;automated reasoning&lt;/a&gt; such as is done with &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;semantic web&lt;/a&gt; technology.&lt;br /&gt;&lt;br /&gt;So I was quite interested to see the news story linked above. Researchers in the UK have connected a computer to some lab robotics and developed a system that was able to generate new scientific hypotheses about yeast metabolism, and then design and perform experiments to confirm the hypotheses.&lt;br /&gt;&lt;br /&gt;This is important because there will always be limits to what human science can accomplish. Humans are limited in their ability to do research, requiring breaks, sleep, and vacations. Humans are limited in their ability to collaborate, because of personality conflicts, politics, and conflicting financial interests. Human talent and intelligence are limited; the Earth is not crawling with Einsteins and Feynmans.&lt;br /&gt;&lt;br /&gt;That's obviously not to say that computers would have an unlimited capacity to do science. But their limits would be different, and their areas of strength would be different, and science as a combined effort between humans and computers would be richer and more fruitful than either alone.&lt;br /&gt;&lt;br /&gt;I still think it's important to establish specifications for distributing this effort geographically. I would imagine it makes sense to build this stuff on top of semantic web protocols.&lt;br /&gt;&lt;br /&gt;I like the idea that with computer assistance, scientific and medical progress might greatly accelerate, curing diseases (hopefully including aging) and offering solutions to perennial social problems like boom-and-bust economic cycles. Then we could all live in a sci-fi paradise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7216077784048540709?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7216077784048540709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7216077784048540709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7216077784048540709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7216077784048540709'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/04/machines-doing-actual-science-not-just.html' title='Machines doing actual science, not just lab work'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7009435818691911359</id><published>2009-04-21T06:50:00.000-07:00</published><updated>2009-04-21T07:29:33.403-07:00</updated><title type='text'>Obama talks about trains</title><content type='html'>I voted for Obama. It's great that he's the first black president, but it's not the most important thing to me. It's gratifying that he represents a big change from the previous administration. But for me, the real thing with Obama is, every time I hear him talk, he sounds like &lt;i&gt;he's actually thinking&lt;/i&gt;. You sometimes see him pausing to think during press conferences. It's been so long overdue to have somebody in the White House who can sustain a thought process. So every time I hear him talk, I get another little bump of good feeling about him. Thank goodness he shares so many of my values; in the other camp he'd be a significant danger.&lt;br /&gt;&lt;br /&gt;I don't know whether his economic policies will succeed. I hope so. &lt;blockquote&gt;The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood; who strives valiantly; who errs, who comes short again and again, because there is no effort without error and shortcoming; but who does actually strive to do the deeds; who knows great enthusiasms, the great devotions; who spends himself in a worthy cause; who at the best knows in the end the triumph of high achievement, and who at the worst, if he fails, at least fails while daring greatly, so that his place shall never be with those cold and timid souls who neither know victory nor defeat.&lt;br /&gt;— Theodore Roosevelt&lt;/blockquote&gt;Alright, enough gushing. But I really do love having this guy as my president.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-0gpaVwcKyI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/-0gpaVwcKyI&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A few days ago, Obama and Biden presented &lt;a href="http://www.whitehouse.gov/blog/09/04/16/A-Vision-for-High-Speed-Rail/"&gt;a vision of the future of railroads in America&lt;/a&gt;. I think it's pretty damn cool. I live in the Northeast Corridor where train service is the best in the country, and I haven't taken the train anywhere since college thirty-mumble years ago. I'm not a big train enthusiast. But I think this is the kind of thing that can stimulate national enthusiasm, not in a trivial meaningless way, but toward a goal that creates jobs and opportunities for new businesses that create more jobs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7009435818691911359?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7009435818691911359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7009435818691911359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7009435818691911359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7009435818691911359'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/04/obama-talks-about-trains.html' title='Obama talks about trains'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7625836923332797191</id><published>2009-02-11T07:50:00.000-08:00</published><updated>2010-01-17T16:08:33.455-08:00</updated><title type='text'>Dr. Drexler's blog</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nanoengineer-1.com/content/images/stories/gallery/machinery_filmstrip.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: left; cursor: pointer; width: 394px; height: 79px;" src="http://nanoengineer-1.com/content/images/stories/gallery/machinery_filmstrip.png" alt="" border="0" /&gt;&lt;/a&gt;Dr. Eric Drexler founded the field of advanced nanotechnology with a &lt;a href="http://www.imm.org/publications/pnas/"&gt;1981 paper&lt;/a&gt; in the &lt;cite&gt;Proceedings of the National Academy of Sciences&lt;/cite&gt;, and his book &lt;a href="http://e-drexler.com/p/06/00/EOC_Cover.html"&gt;&lt;cite&gt;Engines of Creation&lt;/cite&gt;&lt;/a&gt; published in 1986. These two publications laid the intellectual foundation for a complete revision of human manufacturing technology. Like any major shift in technology, there are risks to be aware of, but the promise of advanced nanotechnology is vast: clean cheap manufacturing processes for just about anything you can imagine, products that seem nearly magical by today's standards, medical instruments and treatments far more advanced than today's medicine.&lt;br /&gt;&lt;br /&gt;Dr. Drexler has continued to work in the field for over twenty years, promoting research into developmental pathways and awareness of the potential risks. His thoughts on nanotechnology (and technology in general) are unique. With the publication of his &lt;a href="http://metamodern.com/"&gt;&lt;cite&gt;Metamodern&lt;/cite&gt;&lt;/a&gt; blog, these are now publicly available. His postings cover a broad range of topics, ranging from the books he's been reading lately to common and misleading errors in molecular animations to his most recent observations and insights on developmental pathways to advanced technologies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7625836923332797191?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7625836923332797191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7625836923332797191' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7625836923332797191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7625836923332797191'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/02/dr-drexler-blog.html' title='Dr. Drexler&amp;#39;s blog'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8591572256911019294</id><published>2009-01-14T08:05:00.000-08:00</published><updated>2010-02-24T06:47:43.329-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='automation of science'/><title type='text'>Can computers do scientific investigation?</title><content type='html'>I came across &lt;a href="http://www.sciencemag.org/cgi/content/abstract/293/5537/2051"&gt;a 2001 paper&lt;/a&gt; in Science recently that lines up with some thinking I'd been doing myself. The web is full of futuristic literature that envisions man's intellectual legacy being carried forward by computers at a greatly increased pace; this is one of the ideas covered under the umbrella term &lt;a href="http://en.wikipedia.org/wiki/Technological_singularity"&gt;"technological singularity"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://en.wikipedia.org/wiki/Machine_learning"&gt;machine learning&lt;/a&gt; there are lots of approaches and algorithms that are relevant to the &lt;a href="http://en.wikipedia.org/wiki/Scientific_method"&gt;scientific method&lt;/a&gt;. The ML folks have long been working on the problem of taking a bunch of data and searching it for organizing structure. This is an important part of how you would formulate a &lt;a href="http://en.wikipedia.org/wiki/Hypothesis"&gt;hypothesis&lt;/a&gt; when looking at the bunch of data. You would then design &lt;a href="http://en.wikipedia.org/wiki/Experiment"&gt;experiments&lt;/a&gt; to test the hypothesis. If you wanted to automate everything completely, you'd run the experiment in a robotic lab. Conceivably, science could be done by computers and robots without any human participation, and that's what the futurists envision.&lt;br /&gt;&lt;br /&gt;The Science paper goes into pretty deep detail about the range and applicability of machine learning methods, as things stood in 2001. I find ML an interesting topic, but I can't claim any real knowledge about it. I'll assume that somebody somewhere can write code to do the things claimed by the paper's authors. It would be fascinating to try that myself some day.&lt;br /&gt;&lt;br /&gt;To bring this idea closer to reality, what we need is a widely accepted machine-readable representation for hypotheses, experiments, and experimental results. Since inevitably humans would also participate in this process, we need representations for researchers (human, and possibly machine) and ratings (researcher X thinks hypothesis Y is important, or unimportant, or likely to be true, or likely to be false). So I have been puttering a little bit with some ideas for an XML specification for this sort of ontology.&lt;br /&gt;&lt;br /&gt;Specifying experiments isn't that tricky: explain what equipment and conditions and procedure are required, and explain where to look for what outcome, and say which hypotheses are supported or invalidated depending on the outcome. Experimental results are likewise pretty simple. Results should refer to the experiments under test, identifying them in semantic web style with a unique permanently-assigned URI.&lt;br /&gt;&lt;br /&gt;The tricky part is an ontology for scientific hypotheses. But you then need a machine-readable language flexible enough to express complex scientific ideas, and that's potentially challenging. Besides, some of these ideas are naturally expressible in ways humans can easily get, but in ways difficult for machines, for instance almost anything involving images.&lt;br /&gt;&lt;br /&gt;Nevertheless an XML specification for describing hypotheses, experiments and results in a machine-readable way would be very interesting. I'm inclined to do some tinkering with all that, in my ridiculously abundant free time. Maybe I'll manage it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8591572256911019294?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8591572256911019294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8591572256911019294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8591572256911019294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8591572256911019294'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2009/01/can-computers-do-scientific.html' title='Can computers do scientific investigation?'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4660705169772763653</id><published>2008-12-29T14:26:00.000-08:00</published><updated>2010-01-17T16:08:33.477-08:00</updated><title type='text'>Graphene memory device at Rice University</title><content type='html'>James Tour and colleagues at Rice University have &lt;a href="http://www.media.rice.edu/media/NewsBot.asp?MODE=VIEW&amp;amp;ID=11823&amp;amp;SnID=1934660019"&gt;demonstrated&lt;/a&gt; a switch (&lt;a href="http://www.nature.com/nmat/journal/v7/n12/abs/nmat2331.html"&gt;described&lt;/a&gt; in Nature Materials) composed of a layer of graphite about ten atoms thick. An array of such switches can be built in three dimensions, offering very high densities of storage volume, far exceeding what we now see in hard disks and flash memory USB widgets. The switch has been tested over 20,000 switching cycles with no apparent degradation. The abstract of the Nature Materials article reads:&lt;blockquote&gt;Transistors are the basis for electronic switching and memory devices as they exhibit extreme reliabilities with on/off ratios of 10&lt;sup&gt;4&lt;/sup&gt;–10&lt;sup&gt;5&lt;/sup&gt;, and billions of these three-terminal devices can be fabricated on single planar substrates. On the other hand, two-terminal devices coupled with a nonlinear current–voltage response can be considered as alternatives provided they have large and reliable on/off ratios and that they can be fabricated on a large scale using conventional or easily accessible methods. Here, we report that two-terminal devices consisting of discontinuous 5–10 nm thin films of graphitic sheets grown by chemical vapour deposition on either nanowires or atop planar silicon oxide exhibit enormous and sharp room-temperature bistable current–voltage behaviour possessing stable, rewritable, non-volatile and non-destructive read memories with on/off ratios of up to 10&lt;sup&gt;7&lt;/sup&gt; and switching times of up to 1 μs (tested limit). A nanoelectromechanical mechanism is proposed for the unusually pronounced switching behaviour in the devices.&lt;/blockquote&gt;It will be several years before memories based on these switches are available for laptops and desktops, but it's a cool thing. To my knowledge, the mechanism is not yet known, so there may be some interesting new science involved as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4660705169772763653?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4660705169772763653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4660705169772763653' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4660705169772763653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4660705169772763653'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/12/graphene-memory-device-at-rice.html' title='Graphene memory device at Rice University'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5332542821366669920</id><published>2008-12-29T11:13:00.000-08:00</published><updated>2008-12-29T21:36:59.343-08:00</updated><title type='text'>Picasa images in blog posts</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_Wq8BeMor5IQ/SVhFkzHai5I/AAAAAAAAACs/bnOuWjpyhIw/s640/SilicateGlueIngredients.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 267px; height: 200px;" src="http://lh6.ggpht.com/_Wq8BeMor5IQ/SVhFkzHai5I/AAAAAAAAACs/bnOuWjpyhIw/s640/SilicateGlueIngredients.jpg" alt="" border="0" /&gt;&lt;/a&gt;Here is an example of embedding a Picasa image in a Blogspot posting. I am including this to assist another blogger who is doing some interesting RepRap-related work but who's had a bit of trouble with Blogspot. To do this, I got the URL for the Picasa image by right-clicking on "View image" in Firefox so that I only had the image in the browser, and I used that in the "Add Image" thing in the "New post" top bar menu.&lt;br /&gt;&lt;br /&gt;The HTML for this post (in part) looks like this:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;&amp;lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_Wq8BeMor5IQ/SVhFkzHai5I/AAAAAAAAACs/bnOuWjpyhIw/s640/SilicateGlueIngredients.jpg"&amp;gt;&amp;lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 267px; height: 200px;" src="http://lh6.ggpht.com/_Wq8BeMor5IQ/SVhFkzHai5I/AAAAAAAAACs/bnOuWjpyhIw/s640/SilicateGlueIngredients.jpg" alt="" border="0" /&amp;gt;&amp;lt;/a&amp;gt;Here is an example of embedding a Picasa image...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hope this helps. It shouldn't be necessary to study the HTML. If the Blogspot controls are cooperative, it should be generated automatically. If they don't cooperate, the HTML could be cut and pasted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5332542821366669920?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5332542821366669920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5332542821366669920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5332542821366669920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5332542821366669920'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/12/picasa-images-in-blog-posts.html' title='Picasa images in blog posts'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_Wq8BeMor5IQ/SVhFkzHai5I/AAAAAAAAACs/bnOuWjpyhIw/s72-c/SilicateGlueIngredients.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-709584882021844038</id><published>2008-12-23T15:29:00.000-08:00</published><updated>2010-01-17T16:08:33.486-08:00</updated><title type='text'>Encouraging news about mechanosynthesis</title><content type='html'>Yesterday there was a very encouraging &lt;a href="http://crnano.typepad.com/crnblog/2008/12/nanos-big-kick-coming-soon.html"&gt;posting&lt;/a&gt; (by guest blogger &lt;a href="http://www.islandone.org/MMSG/ttf/tihamer.htm"&gt;Tihamer Toth-Fejel&lt;/a&gt;) on the &lt;a href="http://crnano.typepad.com/crnblog/"&gt;Responsible Nanotechnology blog&lt;/a&gt;, regarding recent goings-on with mechanosynthesis. What the heck is mechanosynthesis? It is the idea that we will build molecules by putting atoms specifically where we want, rather than leaving them adrift in a sea of Brownian motion and random diffusion. Maybe not atoms per se, maybe instead small molecules or bits of molecules (a CH&lt;sub&gt;3&lt;/sub&gt; group here, an OH group there) with the result that we will build the molecules we really want, with little or no waste. The precise details about how we will do this are up for a certain amount of debate. We used to talk about assemblers, now we talk about nanofactories, but the idea of intentional design and manufacture of specific molecules remains.&lt;br /&gt;&lt;br /&gt;The two items of real interest in the CRN blog posting are these.&lt;br /&gt;&lt;br /&gt;First, Philip Moriarty, a scientist in the UK, has secured a healthy chunk of funding to do experimental work to validate the theoretical work done by Ralph Merkle and Rob Freitas in designing tooltips and processes for carbon-hydrogen mechanosynthesis, with the goal of being able to fabricate bits of diamondoid that have been specified at an atomic level. If all goes well, writes Toth-Fejel:&lt;br /&gt;&lt;blockquote&gt;Four years from now, the Zyvex-led DARPA Tip-Based Nanofabrication project expects to be able to put down about ten million atoms per hour in atomically perfect nanostructures, though only in silicon (additional elements will undoubtedly follow; probably taking six months each).&lt;/blockquote&gt;Second is that people are now starting to use &lt;a href="http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04433024"&gt;small machines&lt;/a&gt; to build other small machines, and to do so at interesting throughputs. &lt;a href="http://www.smalltimes.com/display_article/281844/109/ARTCL/none/none/1/Mirkin-group-unveils-55k-pen-DPN-array"&gt;An article&lt;/a&gt; at &lt;a href="http://www.smalltimes.com/home.cfm"&gt;Small Times&lt;/a&gt; reports:&lt;br /&gt;&lt;blockquote&gt;Dip-pen nanolithography (DPN) uses atomic force microscope (AFM) tips as pens and dips them into inks containing anything from DNA to semiconductors. The new array from Chad Mirkin’s group at Northwestern University in Evanston, Ill., has 55,000 pens - far more than the previous largest array, which had 250 pens.&lt;/blockquote&gt;So there are two take-home messages here. First, researchers are getting ready to work with the large numbers of atoms needed to build anything of reasonable size in a reasonable amount of time. Second, this stuff is actually happening rather than remaining a point of academic discussion.&lt;br /&gt;&lt;br /&gt;Toth-Fejel writes: &lt;blockquote&gt;What happens when we use probe-based nanofabrication to build more probes? ...What happens when productive nanosystems get built, and are used to build better productive nanosystems? The exponential increase in atomically precise manufacturing capability will make Moore’s law look like it’s standing still.&lt;/blockquote&gt;Interesting stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-709584882021844038?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/709584882021844038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=709584882021844038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/709584882021844038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/709584882021844038'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/12/encouraging-news-about-mechanosynthesis.html' title='Encouraging news about mechanosynthesis'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4332588438035809078</id><published>2008-12-08T08:17:00.000-08:00</published><updated>2010-01-17T16:10:31.776-08:00</updated><title type='text'>Cui's work on cancer with granulocytes</title><content type='html'>&lt;object height="327" width="400"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1650186&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=1650186&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="327"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Granulocyte"&gt;Granulocytes&lt;/a&gt; are a particular sort of white blood cell. Read the original New Scientist &lt;a href="http://www.newscientist.com/article/mg19526224.800"&gt;article&lt;/a&gt; or a &lt;a href="http://www.sciencedaily.com/releases/2008/06/080628155300.htm"&gt;related article&lt;/a&gt; in Science Daily. See a &lt;a href="http://www.youtube.com/watch?v=nJEFcNbEWQs"&gt;video&lt;/a&gt; of granulocytes attacking cancer cells. The &lt;a href="http://www.vimeo.com/1650186"&gt;video&lt;/a&gt; above is a talk by the primary investigator, Zheng Cui. I learned about this in stumbling across the fact that &lt;a href="http://www.facebook.com/note.php?note_id=33488382415"&gt;Chris Heward&lt;/a&gt; is seeking granulocyte donors.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www1.wfubmc.edu/tumorbio/faculty/cui.htm"&gt;Zheng Cui&lt;/a&gt; at Wake Forest University of Medicine in Winston-Salem, North Carolina, took blood samples from more than 100 people and mixed their granulocytes with cervical cancer cells. While granulocytes from one individual killed around 97 per cent of cancer cells within 24 hours, those from another healthy individual only killed around 2 per cent of cancer cells. Average cancer-killing ability appeared to be lower in adults over the age of 50 and even lower in people with cancer. It also fell when people were stressed, and at certain times of the year. "Nobody seems to have any cancer-killing ability during the winter months from November to April," says Cui.&lt;br /&gt;&lt;br /&gt;Elsewhere, Cui &lt;a href="http://www.methuselahfoundation.org/UABBA/presenting/abstracts/cui/"&gt;wrote&lt;/a&gt;: "In 1999, we encountered a unique mouse that refused to succumb to repeated challenges with lethal cancer cells that uniformly killed all other laboratory mice, even at much lower doses. Further studies of this phenotype reveal that this unusual cancer resistance is inheritable and entirely mediated by the macrophages and neutrophils of the innate immunity. Transfer of leukocytes with this high level of cancer-killing activity (CKA) from these cancer-resistant mice cures the most aggressive advanced cancers in other mice without any side effect. Most surpisingly, a similar activity of killing cancer cells was discovered in the granulocytes and monocytes of some healthy people." When applied clinically, this is called LIFT, or "leukocyte infusion therapy". &lt;p&gt;&lt;/p&gt;&lt;p&gt;Cui readily admits that he has not yet done much to explore the precise mechanisms involved. For the present, he is more interested in getting the treatment through clinical trials and into clinical practice. So he has gotten very little support from the medical community, and it's been difficult to secure funding for clinical trials.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4332588438035809078?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4332588438035809078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4332588438035809078' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4332588438035809078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4332588438035809078'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/12/cui-work-on-cancer-with-granulocytes.html' title='Cui&amp;#39;s work on cancer with granulocytes'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2612933128456451148</id><published>2008-12-05T15:36:00.000-08:00</published><updated>2010-01-17T16:08:33.493-08:00</updated><title type='text'>Adventures in protein engineering</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Protein"&gt;Proteins&lt;/a&gt; are a good material to consider for an early form of rationally designed &lt;a href="http://en.wikipedia.org/wiki/Molecular_nanotechnology"&gt;nanotechnology&lt;/a&gt;. They are cheap and easy to manufacture, thoroughly studied, and they can do a lot of different things. Proteins are responsible for the construction of all the structures in your body, the trees outside your window, and most of your breakfast.&lt;br /&gt;&lt;br /&gt;Why don't we already have a busy protein-based &lt;a href="http://en.wikipedia.org/wiki/Manufacturing"&gt;manufacturing base&lt;/a&gt;? Because the necessary technologies have arisen only in the last couple of decades, and because older technologies already have a solid hold on the various markets that might otherwise be interested in protein-based manufacturing. Finally, most researchers working with proteins aren't thinking about creating a new manufacturing base. But people in the nanotech community are &lt;a href="http://metamodern.com/2008/11/10/modular-molecular-composite-nanosystems/"&gt;thinking&lt;/a&gt; about it.&lt;br /&gt;&lt;br /&gt;One of the classical scientific problems involving proteins is the "&lt;a href="http://en.wikipedia.org/wiki/Protein_folding"&gt;protein folding&lt;/a&gt; problem". Every protein is a sequence of &lt;a href="http://en.wikipedia.org/wiki/Amino_acid"&gt;amino acids&lt;/a&gt;. There are 20 different amino acids, which are strung together by a ribosome to create the protein. As the amino acids are strung together, the protein starts folding up into a compact structure. The "problem" with folding is that for any possible sequence of amino acids, it's not always possible to predict how it will fold up, or even whether it will always fold up &lt;a href="http://en.wikipedia.org/wiki/Prion"&gt;the same way each time&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But maybe you don't need a solution for all possible sequences. Maybe you can limit yourself to just the sequences that are easy to predict. People have been studying proteins for a long time and it's easy to put together a much shorter list of proteins whose foldings are known. Discard any proteins that sometimes fold differently, to arrive at a subset of proteins whose foldings are well known and reliable.&lt;br /&gt;&lt;br /&gt;The next issue is extensibility. Having identified a set of proteins whose foldings are easily predictable, would it be possible to use that knowledge to predict the foldings of larger novel amino acid sequences? A trivial analogy would be that if I know how to pronounce "ham" and I know how to pronounce "burger", then I should should know how to pronounce "hamburger". A better analogy would be &lt;a href="http://en.wikipedia.org/wiki/Lego"&gt;Lego bricks&lt;/a&gt; or an &lt;a href="http://en.wikipedia.org/wiki/Erector_Set"&gt;Erector&lt;/a&gt; set, where a small alphabet of basic units can be used to construct a vast diversity of larger structures.&lt;br /&gt;&lt;br /&gt;If we can build a large diversity of big proteins and predict their foldings correctly, we're on to something. Then we can design things with parts that move in predictable ways. Some proteins (like the &lt;a href="http://en.wikipedia.org/wiki/Keratin"&gt;keratin&lt;/a&gt; in your fingernails or a horse's hooves) have a good deal of rigidity, and we can think about designing with gears, cams, transmissions, and &lt;a href="http://en.wikipedia.org/wiki/Category:Mechanical_engineering"&gt;other such stuff&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2612933128456451148?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2612933128456451148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2612933128456451148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2612933128456451148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2612933128456451148'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/12/adventures-in-protein-engineering.html' title='Adventures in protein engineering'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-2670615048834163307</id><published>2008-11-20T11:40:00.000-08:00</published><updated>2010-01-23T10:43:55.927-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Gustav Mahler's Symphony No. 4 in G major</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Symphony_No._4_%28Mahler%29"&gt;http://en.wikipedia.org/wiki/Symphony_No._4_(Mahler)&lt;/a&gt;&lt;br /&gt;performed by the Vienna Philharmonic Orchestra (Wiener Philharmoniker), conducted by Leonard Bernstein&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1st movement (&lt;a href="http://www.youtube.com/watch?v=nslBGQ2Ij40"&gt;1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=Ri4JU6W-Kro"&gt;2&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;2nd movement (&lt;a href="http://www.youtube.com/watch?v=r86BBMrlUfc"&gt;1&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;3rd movement (&lt;a href="http://www.youtube.com/watch?v=Zyw7bMYoqDI"&gt;1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=iUlAWItz_U0"&gt;2&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=X0uxQmnBhxk"&gt;3&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;4th movement (&lt;a href="http://www.youtube.com/watch?v=pCsnpVYetMg"&gt;1&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-2670615048834163307?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/2670615048834163307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=2670615048834163307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2670615048834163307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/2670615048834163307'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/11/gustav-mahlers-symphony-no-4-in-g-major.html' title='Gustav Mahler&apos;s Symphony No. 4 in G major'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8473295850781102311</id><published>2008-11-07T05:54:00.000-08:00</published><updated>2010-01-17T16:10:31.765-08:00</updated><title type='text'>Cell-level simulation and hobbyist participation</title><content type='html'>These are a few simulators for biological cells and processes.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.e-cell.org/ecell/"&gt;http://www.e-cell.org/ecell/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vcell.org/"&gt;http://www.vcell.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://synbioss.sourceforge.net/"&gt;http://synbioss.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;A lot of the important things that happen in medicine are happening at the cellular level. Cell-level simulators might provide a way for large numbers of hobbyist medical researchers to construct and test hypotheses. The most promising hypotheses might be testable in real biology laboratories, and the results could be fed back to improve the accuracy of the simulators.&lt;br /&gt;&lt;br /&gt;I'm not sure this would be an effective strategy for hastening the pace of medical progress. My intuition is biased because I've spent the last fifteen years working with open-source software (Linux, Apache, etc). I recognize that competition and profit are also powerful forces driving the rate of innovation, and that these seem to work best when people aren't sharing information so readily. The software/internet world has seen lots of progress in the last ten or twenty years, and it seems that a mixed environment with both open-source and closed-source approaches has pushed things along well.&lt;br /&gt;&lt;br /&gt;Software is difficult but biology is much more difficult. At least it looks that way from my software engineer's point of view. The depth of expertise required for meaningful contribution to medical knowledge will likely exclude most would-be contributors. I don't know what to do about that. Perhaps cell simulators and on-line information can make that expertise more accessible.&lt;br /&gt;&lt;br /&gt;Participation by hobbyists has become a very big part of the astronomy community. Maybe there is a legitimate place for hobbyists in the field of medical research.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8473295850781102311?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8473295850781102311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8473295850781102311' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8473295850781102311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8473295850781102311'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/11/cell-level-simulation-and-hobbyist.html' title='Cell-level simulation and hobbyist participation'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-1422072669355242113</id><published>2008-11-06T15:38:00.000-08:00</published><updated>2010-01-17T16:10:31.785-08:00</updated><title type='text'>First post</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mednews.wustl.edu/pub/libs/images/usr/7655.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 223px; height: 167px;" src="http://mednews.wustl.edu/pub/libs/images/usr/7655.jpg" alt="" border="0" /&gt;&lt;/a&gt;Here is &lt;a href="http://mednews.wustl.edu/news/page/normal/12873.html"&gt;today's nifty piece of medical progress&lt;/a&gt;, an advance in the fight against cancer. A couple years ago, an unfortunate woman died of acute myelogenous leukemia, leaving behind samples of her cells, some healthy and some cancerous. A team at Washington University in St. Louis was able to sequence the DNA from the cells and compare her healthy DNA to her cancerous DNA. This became possible because the price of DNA sequencing equipment has come down by a very large factor in recent years.&lt;br /&gt;&lt;br /&gt;They identified ten point mutations that differentiated the sick cells from the healthy ones. Two of the mutations were already known from earlier research, the other eight mutations were previously unknown. The team is continuing to study differences in the non-coding DNA as well, and they are also preparing to apply the same sequencing methodology to other cancers.&lt;br /&gt;&lt;br /&gt;Because they were using DNA samples all from the same person, there would be very few differences among the healthy cells, just the infrequent cell-to-cell mutations that might occur in an average healthy person's body. So they had a good solid statistical baseline that made the ten cancer-related mutations really clear.&lt;br /&gt;&lt;br /&gt;It may be years before this translates into clinical practice that saves lives. But it's nevertheless an important advance. It's something that has never been done before, and it does bring to light a few new facts. It looks strongly like point mutations are the cause of at least some, possibly all, cancers. We strongly suspected that before but this almost proves it. One of the ten mutations was present in only a fraction of the cancerous cells, suggesting that the mutations typically occur in a particular sequence, with the last one finally making the cell dangerous.&lt;br /&gt;&lt;br /&gt;I'm interested in what social and economic factors could most hasten the rate of medical progress. My reason for this interest is simple: I'm not young any more. I'm curious about whether the development model that has been so successful for open-source software could somehow be applied to quicken the pace of medical progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-1422072669355242113?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/1422072669355242113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=1422072669355242113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1422072669355242113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1422072669355242113'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/11/first-post.html' title='First post'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-899893113600946391</id><published>2008-09-03T09:05:00.000-07:00</published><updated>2010-01-23T10:44:43.574-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Beethoven on Youtube</title><content type='html'>I've long been a fan of Beethoven's Violin Concerto (&lt;a href="http://www.youtube.com/watch?v=2Z5a-tLV7IY"&gt;1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=S9gZ-mzJ0QY"&gt;2&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=xSu8yFiwzJE"&gt;3&lt;/a&gt;). Here it is played by &lt;a href="http://en.wikipedia.org/wiki/Yehudi_Menuhin"&gt;Yehudi Menuhin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I also like some of the symphonies. Here's Herbert von Karajan conducting the &lt;a href="http://www.youtube.com/watch?v=s8eigkwmMEo"&gt;Seventh Symphony&lt;/a&gt;, which I think doesn't get enough attention by comparison to the Third (&lt;a href="http://www.youtube.com/watch?v=FFltqVS8d9I"&gt;1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=GVQtcd0clu4"&gt;2&lt;/a&gt;, 3? 4?) or the &lt;a href="http://www.youtube.com/watch?v=zhcR1ZS2hVo"&gt;Fifth&lt;/a&gt; or the Ninth (&lt;a href="http://www.youtube.com/watch?v=O2AEaQJuKDY"&gt;1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=cSEqQsAXbJw"&gt;2&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=LKRM4VYEuuQ"&gt;3a&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=9UYVJOeT-jo"&gt;3b&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=5ruaFfSZ9g4"&gt;4&lt;/a&gt;). Why is it the only even-numbered Beethoven symphony you ever hear is the &lt;a href="http://www.youtube.com/watch?v=HZGb-Kjy0S0"&gt;Sixth&lt;/a&gt;? In fact, none of Beethoven's power-of-two symphonies (numbers 1, 2, 4 and 8) get much airplay. Wierd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-899893113600946391?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/899893113600946391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=899893113600946391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/899893113600946391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/899893113600946391'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/09/beethoven-on-youtube.html' title='Beethoven on Youtube'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8770626705359791841</id><published>2008-08-25T11:40:00.000-07:00</published><updated>2010-01-23T10:44:20.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Bach on YouTube</title><content type='html'>&lt;a href="http://www.virtualsheetmusic.com/images/first_pages/BIG/Bach/Brandenburg3OfferFirst_BIG.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://www.virtualsheetmusic.com/images/first_pages/BIG/Bach/Brandenburg3OfferFirst_BIG.gif" style="cursor: pointer; float: right; height: 261px; margin: 0pt 0pt 10px 10px; width: 185px;" /&gt;&lt;/a&gt;Brandenburg Concerto number 3, probably my favorite: &lt;a href="http://jp.youtube.com/watch?v=hZ9qWpa2rIg"&gt;first movement&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=vuosfi94fCw"&gt;second movement&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=hXBmygI-N3M"&gt;third movement&lt;/a&gt;. For the third Brandenburg, Bach didn't really write a second movement. He just wrote a couple of chords and allowed the musicians to improvise whatever they wanted within that minimal harmonic constraint. Different groups do different things with that freedom. The first time I heard this concerto was Walter Carlos's rendition on the &lt;a href="http://en.wikipedia.org/wiki/Switched-On_Bach"&gt;Switched-on Bach&lt;/a&gt; album back in the seventies, which included a lot of interesting sounds that people now associate with old bad sci-fi movies. But at the time, Carlos was one of the first explorers of electronic music and there wasn't yet an esthetic for it. In a &lt;a href="http://en.wikipedia.org/wiki/Switched-On_Brandenburgs"&gt;later recording&lt;/a&gt; Carlos did something a bit more conventional, a minimal expansion on Bach's two chords with just a few flourishes.&lt;br /&gt;&lt;br /&gt;One thing I never quite got about the first Brandenburg (&lt;a href="http://jp.youtube.com/watch?v=Zpf38dQpMzk"&gt;first&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=LCnJ1Rk93_g"&gt;second&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=SDZAnOPcmX4"&gt;third&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=zppz1metlVQ"&gt;fourth&lt;/a&gt; movements) is some funny work in the horns in the first movement. There are points where they just seem off-tempo with everybody else. When I first heard this I assumed the musicians had gotten lost. But now I'm hearing it in this second recording, so I have to conclude that Bach wrote it that way. Maybe he was trying to make sure the listener was awake? Perplexing.&lt;br /&gt;&lt;br /&gt;I once read a review of the sixth Brandenburg (&lt;a href="http://jp.youtube.com/watch?v=KFrwDNzdTnE"&gt;first&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=eXdO_xrPVCs"&gt;second&lt;/a&gt;, &lt;a href="http://jp.youtube.com/watch?v=EmIHESHE3EM"&gt;third&lt;/a&gt; movements) suggesting that it was a musical description of goings-on in the Bach household. Bach had lots of kids, all presumably running and bouncing about as kids will do, and this is a very busy concerto with a lot happening. So that might be what Bach had in mind, and it especially sounds that way in the third movement which has a real bounce to it. In this recording the cellos (maybe basses? I'm never sure) at the right end seem to have many more than four strings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8770626705359791841?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8770626705359791841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8770626705359791841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8770626705359791841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8770626705359791841'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/08/bach-on-youtube.html' title='Bach on YouTube'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-1788905103656191627</id><published>2008-08-12T05:00:00.000-07:00</published><updated>2010-01-17T16:12:16.410-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><title type='text'>Multimachine</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://opensourcemachine.org/wp-content/uploads/2008/10/2abb-219x300.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 219px; height: 300px;" src="http://opensourcemachine.org/wp-content/uploads/2008/10/2abb-219x300.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://opensourcemachine.org/"&gt;Multimachine&lt;/a&gt;, built by Pat Delany of Palestine, Texas, is an inspiring project. It is...&lt;br /&gt;&lt;blockquote&gt;a humanitarian, open source machine tool project for developing countries... The MultiMachine all-purpose machine tool can be built by a semi-skilled mechanic with just common hand tools. For machine construction, electricity can be replaced with "elbow grease" and the necessary material can come from discarded vehicle parts. What can the MultiMachine be used for in developing countries?&lt;br /&gt;AGRICULTURE...&lt;br /&gt;WATER SUPPLIES...&lt;br /&gt;FOOD SUPPLIES: Building steel-rolling-and-bending machines for making fuel efficient cook stoves and other cooking equipment...&lt;br /&gt;TRANSPORTATION...&lt;br /&gt;EDUCATION...&lt;br /&gt;JOB CREATION...&lt;/blockquote&gt;The project is open source and &lt;a href="http://opensourcemachine.org/files/How_to_build_a_multimachine.pdf"&gt;thoroughly documented&lt;/a&gt;. It uses commonly available pieces. It seeks explicitly to address the needs of the developing world. It recognizes the work people did in this area (&lt;a href="http://opensourcemachine.org/files/Farm%20Blacksmithing%20-%20J.%20Drew%20%281901%29%20WW.pdf"&gt;1&lt;/a&gt;, &lt;a href="http://www.opensourcemachine.org/files/Farm%20Shop%20Practice%20-%20M.%20Jones%20%281939%29%20WW.pdf"&gt;2&lt;/a&gt;) in years past. Cool stuff. We have all kinds of Industrial Revolution era mill buildings in the greater Boston area and this would fit right in.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.tcinternet.net/users/brian_schmalz/frostbot/pics/FrostBotCompleteSm.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 234px; height: 318px;" src="http://www.tcinternet.net/users/brian_schmalz/frostbot/pics/FrostBotCompleteSm.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://greta.dhs.org/FrostBot/"&gt;Frostbot&lt;/a&gt;, the work of Brian Schmalz, is another food fabber. It's designed to frost cookies. The CNC mechanism is from &lt;a href="http://www.fireballcnc.com/"&gt;Fireball CNC&lt;/a&gt;. Brian's other tinkerings include a cool &lt;a href="http://schmalzhaus.com/UBW/"&gt;USB bit-whacking board&lt;/a&gt; available at &lt;a href="http://www.sparkfun.com/"&gt;Sparkfun&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-1788905103656191627?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/1788905103656191627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=1788905103656191627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1788905103656191627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1788905103656191627'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/08/multimachine.html' title='Multimachine'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3628435803969067487</id><published>2008-07-21T08:54:00.000-07:00</published><updated>2011-10-02T20:10:11.714-07:00</updated><title type='text'>3d printer project at Victoria University of Wellington School of Design</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/3/3c/EB1711_Armillary_Sphere.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://upload.wikimedia.org/wikipedia/commons/3/3c/EB1711_Armillary_Sphere.png" width="216" /&gt;&lt;/a&gt;There was recently a &lt;a href="http://blog.ponoko.com/2008/06/26/vuw-students-create-3d-printers/"&gt;design contest&lt;/a&gt; at &lt;a href="http://www.vuw.ac.nz/design/index.php"&gt;VUW School of Design&lt;/a&gt; to create inexpensive 3d printers. Apparently &lt;a href="http://www.ponoko.com/"&gt;Ponoko&lt;/a&gt; had some involvment, possibly a sponsorship. I found the prettiest printer to be the &lt;a href="http://www.enviro-choice.org.nz/news/3DPrinter.html"&gt;Equinox&lt;/a&gt;, which also was designed to be environmentally friendly, using a lens to focus sunlight to dry recycled paint as a printing process. I was going to say the printer itself looks like an &lt;a href="http://en.wikipedia.org/wiki/Astrolabe"&gt;astrolabe&lt;/a&gt;, but it really looks like an &lt;a href="http://en.wikipedia.org/wiki/Armillary_sphere"&gt;armillary sphere&lt;/a&gt;, a sort of 3D astrolabe.&lt;br /&gt;&lt;div style="margin-bottom: 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;There's a &lt;a href="http://will.ware.googlepages.com/DSC01136.JPG"&gt;high-res photo&lt;/a&gt; (low-res version below) that shows some of the mechanics, which were laser-cut on Ponoko. I am very much hoping that the university and/or students will publish the plans for the Equinox. It's very cool that people can use a service like Ponoko to build their own printers.&lt;br /&gt;&lt;a href="http://will.ware.googlepages.com/DSC01136.JPG"&gt;&lt;img src="http://will.ware.googlepages.com/DSC01136.JPG" style="height: 400px; width: 300px;" /&gt;&lt;/a&gt;&lt;br /&gt;Very slow progress on my CNC mill. I finally purchased the 3-axis Xylotex controller. It is my hope to connect it this evening and conceivably mill a piece of wood. So I need to move a PC to where the mill is, run a network cable, load the PC with &lt;a href="http://www.linuxcnc.org/"&gt;EMC&lt;/a&gt; and &lt;a href="http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Configuring_EMC2"&gt;configure&lt;/a&gt; it, and set up the shop-vac to collect sawdust. I'll mount the Xylotex board and power supply and fan on the side of the mill, but that's for later.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3628435803969067487?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3628435803969067487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3628435803969067487' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3628435803969067487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3628435803969067487'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/07/3d-printer-project-at-victoria.html' title='3d printer project at Victoria University of Wellington School of Design'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7733591998096253210</id><published>2008-07-02T08:51:00.000-07:00</published><updated>2010-01-17T16:12:16.458-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><title type='text'>Penny wise, pound foolish</title><content type='html'>I got the idea that I should try to design and build my own electronics. I've done electronics design before, including microcontrollers and FPGAs and the like, but I have little experience with power electronics. That, and I'm impatient. The upshot is that after wasting about three weeks and a few hundred dollars in trying to control stepper motors, I'm not much further ahead. Here is the affordable pre-packaged solution (which had been recommended by the guy who sold me the mechanics) which I should have used from the start:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xylotex.com/3AxWPS.htm"&gt;Xylotex three-axis controller with power supply&lt;/a&gt;&lt;br /&gt;$205 plus shipping&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xylotex.com/4AxWPS.htm"&gt;Xylotex four-axis controller with power supply&lt;/a&gt;&lt;br /&gt;$235 plus shipping&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xylotex.com/FAQ.htm"&gt;Xylotex FAQ&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;So I'll plan to pick up a 3-axis controller and run it with &lt;a href="http://www.linuxcnc.org/"&gt;LinuxCNC&lt;/a&gt;. Apparently &lt;a href="http://www.dakeng.com/"&gt;TurboCNC&lt;/a&gt; is also very popular but I'm not about to run DOS on any machine that could be running Linux.&lt;br /&gt;&lt;br /&gt;The mechanics cost about $300 including shipping. The steppers cost $75 (I got them from &lt;a href="http://www.rrrf.org/"&gt;RRRF&lt;/a&gt;). This stepper controller will run maybe $225 with shipping, so the whole thing is $600. That's reasonable. Obviously it doesn't include waste.&lt;br /&gt;&lt;br /&gt;I'm thinking it would be fun to fool with Python code that generates G code and sends it to the CNC. I could develop a repertoire of programmatically defined shapes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7733591998096253210?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7733591998096253210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7733591998096253210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7733591998096253210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7733591998096253210'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/07/penny-wise-pound-foolish.html' title='Penny wise, pound foolish'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4039448725130863502</id><published>2008-06-06T13:27:00.000-07:00</published><updated>2010-01-17T16:12:16.465-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='replication'/><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><title type='text'>RepRap replicates, and Will gets a New Toy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.reprap.org/pub/Main/WebHome/pc-va.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.reprap.org/pub/Main/WebHome/pc-va-small.jpg" alt="" border="0" /&gt;&lt;/a&gt;On the left is Adrian Bowyer, the University of Bath professor who started &lt;a href="http://reprap.org/bin/view/Main/WebHome"&gt;the RepRap project&lt;/a&gt;. On the right is Vik Olliver, the most active RepRap builder on the planet. The two machines marked "parent" and "child" are RepRap 3D printers with the interesting relationship that the "child" was mostly built by the "parent". This is a HUGE STEP toward Bowyer's vision wherein RepRaps make more RepRaps and humans benefit. This will do for physical goods what the GPL and Linux and Apache have done for software.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://will.ware.googlepages.com/my_cnc_mill.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 227px; height: 170px;" src="http://will.ware.googlepages.com/my_cnc_mill.jpg" alt="" border="0" /&gt;&lt;/a&gt;My own news is, at least locally, equally exciting. My &lt;a href="http://www.modularcnc.com/?p=detail&amp;amp;pid=3&amp;amp;cat_id=0"&gt;CNC mill&lt;/a&gt; has finally arrived! And I also got an &lt;a href="http://arduino.cc/en/"&gt;Arduino&lt;/a&gt; controller. I've got my stepper motors from &lt;a href="http://www.rrrf.org/"&gt;RRRF&lt;/a&gt;, and a &lt;a href="http://www.harborfreight.com/cpi/ctaf/displayitem.taf?Itemnumber=44914"&gt;Harbor Freight router&lt;/a&gt; is on the way. It's going to take time to put everything together, and of course there's very little spare time in the life of a modern adult.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.arduino.cc/en/uploads/Main/ArduinoDiecimila400.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 223px; height: 155px;" src="http://www.arduino.cc/en/uploads/Main/ArduinoDiecimila400.jpg" alt="" border="0" /&gt;&lt;/a&gt;Once the CNC mill is up and running, I plan to work on a scheme for swapping out the router and swapping in an extruder for thermoplastic. By that time the RepRap guys will be doing even better than they're doing today, so I will benefit from their stuff. Maybe I'll end up making an actual RepRap before I'm through.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4039448725130863502?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4039448725130863502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4039448725130863502' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4039448725130863502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4039448725130863502'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/06/reprap-replicates-and-will-gets-new-toy.html' title='RepRap replicates, and Will gets a New Toy'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-891131940704151147</id><published>2008-05-29T09:36:00.000-07:00</published><updated>2010-01-17T16:12:16.443-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><title type='text'>RepRap: Big step up in print quality!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_fbJJp9o1UbA/SDwmWbSyu7I/AAAAAAAAAIw/Th-33hT1OaM/s400/handles.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 274px; height: 304px;" src="http://bp1.blogger.com/_fbJJp9o1UbA/SDwmWbSyu7I/AAAAAAAAAIw/Th-33hT1OaM/s400/handles.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://blog.reprap.org/2008/05/quality-development.html"&gt;This posting&lt;/a&gt; on the RepRap blog shows the massive progress these guys have made recently in their printing quality. The progression is clearly visible in this photo of some door handles. The most recent incarnation is &lt;a href="http://blog.reprap.org/2008/05/abs-door-handle.html"&gt;the work&lt;/a&gt; of a guy known as "Nophead", with his own &lt;a href="http://hydraraptor.blogspot.com/"&gt;blog&lt;/a&gt; describing his work. His machine uses a RepRap extruder on a purchased CNC table rather than the RepRap 3D platform, which made me think that the RepRap platform must be the reason for the less-than-commercial-grade print quality. I asked him about this in a comment, and he replied that the improvements were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;his extruder has a shaft encoder to control the speed precisely&lt;/li&gt;&lt;li&gt;he has temperature control to +/- 3C&lt;/li&gt;&lt;li&gt;he doesn't have any comms delays (I don't know the architecture well enough to know exactly what he means here)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;he runs his head faster so as to stretch the filament down to 0.5mm.&lt;/li&gt;&lt;li&gt;careful choice of printing material&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To conclude, he says "All these things can be sorted out on Darwin [the current RepRap prototype] so I expect its prints to be this good in a month or two." That's a very cool thing. It's wonderful to see such progress.&lt;br /&gt;&lt;br /&gt;Within just a year or two, RepRap will be much further along in terms of both quality and ease of use, and it will be affordable for small clubs in high schools and colleges all over the world, and large numbers of individual hobbyists. By then it will probably print multiple materials including conductive ones, so you'll be able to embed circuitry in a widget. Today one of the big killer apps for 3D printers is little action figures based on &lt;a href="http://www.fabjectory.com/secondlife/"&gt;avatars from Second Life&lt;/a&gt; and similar games, but when 3D printers really are ubiquitous, people will move on to far more interesting apps that I can hardly imagine.&lt;br /&gt;&lt;br /&gt;Let me not forget &lt;a href="http://timpickup.wordpress.com/2008/05/29/14_3d-printers/"&gt;this very nice list&lt;/a&gt; of a lot of different commercial and hobbyist 3D printers.&lt;br /&gt;&lt;br /&gt;Still waiting for my CNC mill platform, the eBay fellow has been getting a huge volume of business and his shop is a bit swamped. I've been getting a bit more organized with the electronics, including resuscitating an old &lt;a href="http://en.wikipedia.org/wiki/User:WillWare/Electronics#The_USB.2FFPGA_board.2C_October-December_2006"&gt;FX2 board&lt;/a&gt; design, and I've ordered some stepper motor driver parts that should arrive soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-891131940704151147?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/891131940704151147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=891131940704151147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/891131940704151147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/891131940704151147'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/05/reprap-big-step-up-in-print-quality.html' title='RepRap: Big step up in print quality!'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_fbJJp9o1UbA/SDwmWbSyu7I/AAAAAAAAAIw/Th-33hT1OaM/s72-c/handles.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7456798479111818767</id><published>2008-05-07T19:29:00.000-07:00</published><updated>2010-04-12T07:56:28.097-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><title type='text'>Affordable CNC gadgets</title><content type='html'>&lt;a href="http://modularcnc.flyingcart.com/images/100_2478d3c04.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://modularcnc.flyingcart.com/images/100_2478d3c04.JPG" style="cursor: pointer; float: right; height: 154px; margin: 0pt 0pt 10px 10px; width: 175px;" /&gt;&lt;/a&gt;CNC has existed as a hobbyist pursuit much longer than 3D printers have been. I finally broke down and purchased one of these on eBay. It will take a couple weeks to arrive, and the one I got did not include stepper motors, couplers, or motor drive electronics. Those are things I'd enjoy doing myself anyway, so no problem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bluumax.com/Drill/RT2.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://www.bluumax.com/Drill/RT2.jpg" style="cursor: pointer; float: left; margin: 0pt 10px 10px 0pt; width: 200px;" /&gt;&lt;/a&gt;I like &lt;a href="http://www.bluumax.com/PCB_Drill.html"&gt;this project&lt;/a&gt; which is along similar lines.&lt;br /&gt;&lt;br /&gt;For my own gadget, I need to order stepper motors, think about couplers, and start planning how the electronics will go together. I'm thinking about being lazy and &lt;a href="http://parapin.sourceforge.net/"&gt;using the parallel port&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7456798479111818767?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7456798479111818767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7456798479111818767' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7456798479111818767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7456798479111818767'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/05/affordable-cnc-gadgets.html' title='Affordable CNC gadgets'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7954554736847730145</id><published>2008-05-07T18:25:00.000-07:00</published><updated>2010-01-17T16:12:16.472-08:00</updated><title type='text'>I got to see a real RepRap up close!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2194/2475315789_81cc4bb9b8_o.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 296px; height: 222px;" src="http://farm3.static.flickr.com/2194/2475315789_81cc4bb9b8_o.jpg" alt="" border="0" /&gt;&lt;/a&gt;This evening I went to a &lt;a href="http://dc401.org/site/2008/04/may-meeting-reprap-maker-bruce.html"&gt;presentation and demonstration&lt;/a&gt; of a real live RepRap by &lt;a href="http://repstrapping.blogspot.com/"&gt;Bruce Wattendorf&lt;/a&gt; and his son. It was very cool to meet somebody who's built a real one and is totally up to speed on every aspect of the project. I asked some questions about the long-term future of the RepRap project.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Can they get much better spatial resolution without compromising the social goal of serving the developing world? Yes: better spatial resolutions can be gotten with finer nozzles, which would print slower. You could build a duel-nozzle gadget with a wide nozzle for fast clumsy printing, and a narrow fine nozzle for slow elegant finishing.&lt;/li&gt;&lt;li&gt;Will they bump into patent problems as they move toward the state of the art currently occupied by commercial 3D printers? A number of patents will expire in about three years and the RepRap guys will then be much freer in this area.&lt;/li&gt;&lt;/ul&gt;&lt;img style="width: 264px; height: 201px;" src="http://crnano.typepad.com/photos/uncategorized/nanotool.JPG" align="right" /&gt;He wrapped up his presentation by showing the &lt;a href="http://video.google.com/videoplay?docid=-3554296725379875160"&gt;nanofactory video&lt;/a&gt;, "&lt;em&gt;&lt;a href="http://www.lizardfire.com/html_nano/themovies.html"&gt;Productive Nanosystems: from Molecules to Superproducts&lt;/a&gt;&lt;/em&gt;". I came to 3D printers from an interest in nanotech, and he came to nanotech from working on 3D printers. It was gratifying to see that the similarity is clear to people on the other side of the fence.&lt;br /&gt;&lt;br /&gt;It was a heck of a lot of fun. I took &lt;a href="http://www.flickr.com/photos/28098191@N00/sets/72157604950382425/"&gt;some pictures&lt;/a&gt;. Bruce also has &lt;a href="http://repstrapping.blogspot.com/2007/11/what-machine-looks-like.html"&gt;many more&lt;/a&gt; pictures on his blog. Interestingly, the parts that are normally plastic in a RepRap are made of wood in Bruce's machine, and he's in the process of printing a set of plastic parts.&lt;br /&gt;&lt;br /&gt;Bruce's talk was sponsored by a group called &lt;a href="http://dc401.org/site/"&gt;DC401&lt;/a&gt;, a bunch of Rhode Island folks who enjoy going to &lt;a href="http://en.wikipedia.org/wiki/DEF_CON"&gt;DefCon&lt;/a&gt;. They are working with a woman in real estate to arrange a lab space in a building in downtown Providence where they can do electronic and mechanical tinkering. It was fascinating to hear her talk about how she's making it all work by using the other floors for businesses and residential space. This reminds me a lot of &lt;a href="http://miters.mit.edu/"&gt;MITERS&lt;/a&gt;, and it warms my heart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7954554736847730145?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7954554736847730145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7954554736847730145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7954554736847730145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7954554736847730145'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/05/i-got-to-see-real-reprap-up-close.html' title='I got to see a real RepRap up close!'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-1010119270009377342</id><published>2008-05-06T19:43:00.000-07:00</published><updated>2010-01-17T16:08:33.508-08:00</updated><title type='text'>More developments in cancer treatment</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.technologyreview.com/files/11438/cancer_nanoparticle_R2_x220.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 173px; height: 196px;" src="http://www.technologyreview.com/files/11438/cancer_nanoparticle_R2_x220.jpg" alt="" border="0" /&gt;&lt;/a&gt;Here are some more new cancer therapies under development. Many of these involve some flavor of nanoparticle (a fancy word for a molecule), and a few involve nanomachines (a molecule that does something more interesting than just sitting there).&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.technologyreview.com/Nanotech/18999/"&gt;http://www.technologyreview.com/Nanotech/18999/&lt;/a&gt; -- The new nanoengineered system, designed by physician and researcher &lt;a href="http://nano.med.umich.edu/members/baker.html" target="_blank"&gt;James Baker&lt;/a&gt; and his colleagues at the University of Michigan, contains gold nanoparticles with branching polymers called dendrimers that sprout off the nanoparticle's surface.  The particles could be used to launch a multiprong attack against tumors. The dendrimer arms can carry a number of different molecules, including molecules that target cancer cells, fluorescent imaging agents, and drugs that slow down or kill the cells. Once enough of the nanoparticles have gathered inside cancer cells, researchers could kill the tumors by using lasers or infrared light to heat up the gold nestled inside the dendrimers.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.technologyreview.com/NanoTech/wtr_16690,319,p1.html"&gt;http://www.technologyreview.com/NanoTech/wtr_16690,319,p1.html&lt;/a&gt; -- A single treatment of drug-bearing nanoparticles effectively destroys prostate cancer tumors in mice ...the researchers mix together a prostate cancer drug (docetaxel) and polymers that are already FDA-approved... The polymer formed spheres with the drugs trapped within. The researchers then chemically attach pieces of RNA, called aptamers, to the surface of the spheres. The RNA folds into shapes that fit into complementary structures on the surface of prostate-cancer cells... [In placebo groups] almost all the mice died during the experiment. In contrast, all of the mice injected with the targeted nanoparticles survived, and in most cases (five out of seven) the tumors disappeared.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rsc.org/publishing/journals/CC/article.asp?doi=b800528a"&gt;http://www.rsc.org/publishing/journals/CC/article.asp?doi=b800528a&lt;/a&gt; -- We present experimental data that demonstrate the potential of synthetic crown ether modified peptide nanostructures to act as selective and efficient chemotherapeutic agents that operate by attacking and destroying cell membranes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eurekalert.org/pub_releases/2008-03/uoc--urd033108.php"&gt;http://www.eurekalert.org/pub_releases/2008-03/uoc--urd033108.php&lt;/a&gt; -- Researchers from the Nano Machine Center at the California NanoSystems Institute at UCLA have developed a novel type of nanomachine that can capture and store anticancer drugs inside tiny pores and release them into cancer cells in response to light... the device is the first light-powered nanomachine that operates inside a living cell... [reported on] March 31 in the online edition of the nanoscience journal Small.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mednews.wustl.edu/news/page/normal/11449.html"&gt;http://mednews.wustl.edu/news/page/normal/11449.html&lt;/a&gt; -- The nanoparticles are extremely tiny beads of an inert, oily compound that can be coated with a wide variety of active substances. In an article published online in The FASEB Journal, the researchers describe a significant reduction of tumor growth in rabbits that were treated with nanoparticles coated with a fungal toxin called fumagillin. Human clinical trials have shown that fumagillin can be an effective cancer treatment in combination with other anticancer drugs... the nanoparticles' surfaces held molecules designed to stick to proteins found primarily on the cells of growing blood vessels. So the nanoparticles latched on to sites of blood vessel proliferation and released their fumagillin load into blood vessel cells. Fumagillin blocks multiplication of blood vessel cells, so it inhibited tumors from expanding their blood supply and slowed their growth.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nano.cancer.gov/news_center/2008/feb/nanotech_news_2008-02-15c.asp"&gt;http://nano.cancer.gov/news_center/2008/feb/nanotech_news_2008-02-15c.asp&lt;/a&gt; -- ...Regulators and drug developers are concerned that these delivery systems may prove difficult to manufacture on a consistent basis... A new study from James Baker, Jr., M.D., PI, Cancer Nanotechnology Platform Partnership at the University of Michigan, and colleagues provides data showing that such concerns can be overcome... the investigators present the results of studies designed to show that they could achieve consistent and specific targeting and cell-killing activity across multiple manufacturing batches of a dendrimer-based therapeutic agent.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.physorg.com/news82653370.html"&gt;http://www.physorg.com/news82653370.html&lt;/a&gt; -- A team of investigators has designed a nanoscale, polymeric drug delivery vehicle that when loaded with a widely used anticancer agent cures colon cancer in mice with a single dose...  To create their drug delivery vehicle, the investigators used a highly branched polymer, known as a dendrimer, that naturally forms nanoparticles with myriad sites for drug loading. In this particular case, the researchers created what they call a bow-tie polyester dendrimer, whose molecular structure somewhat resembles a bow-tie with two discrete halves...  On one half of the dendrimer, the researchers attached a second polymer, poly(ethylene glycol) (PEG), in order to make the dendrimer water soluble... Next, the investigators attached the anticancer drug doxorubicin to the other half of the dendrimer using a chemical linkage designed to break when exposed to acidic conditions. Not coincidentally, the inside of tumor cells is acidic, while the bloodstream has a neutral pH. Results presented in this paper show that the resulting drug-dendrimer formulation releases virtually all of its drug within 48 hours in acidic conditions but less than 10 percent of its payload at neutral pH.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.azonano.com/news.asp?newsID=4087"&gt;http://www.azonano.com/news.asp?newsID=4087&lt;/a&gt; -- A new type of cancer detector... the simple and inexpensive system, which can be built from off-the-shelf components, can rapidly detect the presence of cancer biomarkers – telltale proteins in body fluids that can signal the presence of malignant tumors – at very low levels... “With this technology, a future scenario might be that you go to the doctor every year for an annual checkup; he draws about 10 cc’s of your blood and runs it through our machine,” said Soman. “The machine is equipped to detect the biomarkers for all the common types of cancer. Half an hour later it produces a list of the biomarkers that it has found. And then either a software program or the physician examines this list to determine whether you have any cancers that need treating.”&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nanotechwire.com/news.asp?nid=4703"&gt;http://nanotechwire.com/news.asp?nid=4703&lt;/a&gt; -- There is a growing recognition among cancer researchers that the most accurate methods for detecting early-stage cancer will require the development of sensitive assays that can identify simultaneously multiple biomarkers associated with malignant cells. Now, using sets of nanoparticles designed to aggregate in response to finding more cancer biomarkers, a team of researchers funded by the Alliance for Nanotechnology in Cancer has developed a multiplexed analytical system that could detect cancer using standard magnetic resonance imaging (MRI).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.forbes.com/claytonchristensen/2008/02/22/cancer-nanotechnology-therapies-lead-clayton-in_jw_0222claytonchristensen_inl.html"&gt;http://www.forbes.com/claytonchristensen/2008/02/22/cancer-nanotechnology-therapies-lead-clayton-in_jw_0222claytonchristensen_inl.html&lt;/a&gt; -- A survey of several different developments, but not much deep discussion of any of them. More of a businessman's-eye view of things, not too surprising for Forbes.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-1010119270009377342?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/1010119270009377342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=1010119270009377342' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1010119270009377342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/1010119270009377342'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/05/more-developments-in-cancer-treatment.html' title='More developments in cancer treatment'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-172263151633769183</id><published>2008-04-27T06:22:00.000-07:00</published><updated>2010-01-17T16:08:33.516-08:00</updated><title type='text'>TAT variant with magnetic particles</title><content type='html'>&lt;img style="width: 264px; height: 199px;" src="http://www.endomagnetics.com/images/SentiMAG_clinical.jpg" align="right" /&gt;My &lt;a href="http://wills-nanotech.blogspot.com/2008/04/targeted-alpha-therapy.html"&gt;last posting about targeted alpha therapy&lt;/a&gt; discussed the expense of preparing a sample of radioactive actinium, aside from which, targeted alpha therapy should be a very effective and specific and hopefully affordable cancer therapy. &lt;a href="http://www.london-nano.com/content/lcndirectory/quentin/"&gt;Quentin Pankhurst&lt;/a&gt; of the &lt;a href="http://www.london-nano.com/"&gt;London Centre for Nanotechnology&lt;/a&gt; has been working with particles of &lt;a href="http://en.wikipedia.org/wiki/Iron_oxide"&gt;iron oxide&lt;/a&gt;, which has very low toxicity and can be attached to antibodies just like the actinium atoms in cages. Iron oxide can be magnetized so each particle can be a permanent &lt;a href="http://en.wikipedia.org/wiki/Magnet"&gt;magnet&lt;/a&gt;. A magnetized particle can then be detected from outside the body using a weak &lt;a href="http://en.wikipedia.org/wiki/Electromagnetic_radiation"&gt;EM field&lt;/a&gt; generated by a hand-held device, or it can be heated with a strong EM field, to the point of destroying the cancer cell .&lt;br /&gt;&lt;br /&gt;By combining the iron oxide particle with an antibody for the &lt;a href="http://en.wikipedia.org/wiki/HER2/neu"&gt;HER2&lt;/a&gt; protein found in breast cancer cells, Pankhurst should be able to achieve the same specificity and effectiveness that Sloan-Kettering has gotten with radioactive actinium, at vastly lesser cost. In order to commercialize this and related applications, Pankhurst has founded &lt;a href="http://www.endomagnetics.com/"&gt;Endomagnetics&lt;/a&gt;, a start-up based in Houston, Texas.&lt;br /&gt;&lt;br /&gt;Why should iron oxide be so much less expensive than radioactive &lt;a href="http://en.wikipedia.org/wiki/Actinium"&gt;actinium&lt;/a&gt;? "Iron oxide" is the chemical name for &lt;a href="http://en.wikipedia.org/wiki/Rust"&gt;rusty metal&lt;/a&gt;, which is easy to make and store, and readily available in auto scrap yards everywhere. Actinium-225, the isotope used for TAT, has a &lt;a href="http://en.wikipedia.org/wiki/Half-life"&gt;half-life&lt;/a&gt; of ten days, so you can't make a big batch and store some for later use. According to &lt;a href="http://www.ornl.gov/sci/nuclear_science_technology/nu_med/programd.htm"&gt;this website&lt;/a&gt; at the &lt;a href="http://www.ornl.gov/"&gt;Oak Ridge National Laboratory&lt;/a&gt;: "&lt;span style="font-style: italic;font-family:Arial;font-size:100%;"  &gt;The actinium-225 is formed     from radioactive decay of radium-225, the decay product of thorium-229, which is obtained     from decay of uranium-233.&lt;span style=""&gt; &lt;/span&gt;The National     depository of uranium-233 is at ORNL, and we have developed effective methods for     obtaining thorium-229 (half-life 7340 years) as our feed material to routinely obtain     actinium-225.&lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:times new roman;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-172263151633769183?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/172263151633769183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=172263151633769183' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/172263151633769183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/172263151633769183'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/04/tat-variant-with-magnetic-particles.html' title='TAT variant with magnetic particles'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6799861467008941030</id><published>2008-04-23T20:03:00.000-07:00</published><updated>2010-01-17T16:12:16.480-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='replication'/><title type='text'>RepRap replicates 100%</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_w0pYYVNavoE/R_qvOEF28eI/AAAAAAAAAe8/AJcTIah9N4Q/s1600/dsc03811.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 258px; height: 193px;" src="http://bp2.blogger.com/_w0pYYVNavoE/R_qvOEF28eI/AAAAAAAAAe8/AJcTIah9N4Q/s1600/dsc03811.jpg" alt="" border="0" /&gt;&lt;/a&gt;This &lt;a href="http://computerworld.co.nz/news.nsf/tech/2F5C3C5D68A380EDCC257423006E71CD"&gt;story in Computerworld&lt;/a&gt; is a couple weeks old, and I should be working harder to keep up. &lt;a href="http://reprap.org/bin/view/Main/VikOlliver"&gt;Vik Olliver&lt;/a&gt;, a RepRap hacker in New Zealand (and probably the hardest-working RepRap hacker in the world), has now fabricated all the parts of the RepRap except the Z flag, which can be cut out of the side of a beer can. This includes only the parts that it makes sense to print on a RepRap, so it doesn't include stepper motors, nuts and bolts, pieces of metal and wood (e.g. threaded rods). But it's an important step.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.modularcnc.com/images/________0fcdc.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 255px; height: 170px;" src="http://www.modularcnc.com/images/________0fcdc.JPG" alt="" border="0" /&gt;&lt;/a&gt;I myself am still drooling a bit over some of the hobbyist CNC stuff. There's a &lt;a href="http://www.modularcnc.com/"&gt;guy in New Mexico&lt;/a&gt; who sells these things on eBay. He sells aluminum ones (like this) and ones made of MDF, which I believe is a sort of particle board. Many low-end CNC machines are in the $2000 to $5000 ballpark, whereas he sells these in the $300 to $600 ballpark. It should be pretty easy to swap out that orange router and swap in an extruder.&lt;br /&gt;&lt;br /&gt;I was thinking a bit last night about how to drive those steppers, since the offerings on eBay don't include the drive electronics. Digikey sells a stepper motor sequencer chip, the &lt;a href="http://parts.digikey.com/1/parts/576961-ic-stepper-motor-ctrlr-20-dip-l297-1.html"&gt;L297&lt;/a&gt;, which would be used to drive some &lt;a href="http://parts.digikey.com/1/parts/1022841-mosfet-n-ch-100v-28a-220ab-irl540.html"&gt;power MOSFETs&lt;/a&gt;. The L297 just needs an input to choose clockwise or counter-clockwise, and a clock pulse to advance a step in that direction, so you need six &lt;a href="http://en.wikipedia.org/wiki/GPIO"&gt;GPIO&lt;/a&gt; lines to control the three motors, and one more to turn on/off the router or squirt goop out of the extruder. There's some very good information on stepper motors and driver circuits &lt;a href="http://www.cs.uiowa.edu/%7Ejones/step/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It occurs to me that I've never posted the &lt;a href="https://sourceforge.net/project/showfiles.php?group_id=159590"&gt;Sourceforge download page&lt;/a&gt; for the RepRap design files. A shocking oversight, given that I want to see the project succeed and proliferate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6799861467008941030?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6799861467008941030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6799861467008941030' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6799861467008941030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6799861467008941030'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/04/reprap-replicates-100.html' title='RepRap replicates 100%'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_w0pYYVNavoE/R_qvOEF28eI/AAAAAAAAAe8/AJcTIah9N4Q/s72-c/dsc03811.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5746760635753710261</id><published>2008-04-21T12:10:00.000-07:00</published><updated>2010-01-17T16:08:33.522-08:00</updated><title type='text'>Targeted alpha therapy</title><content type='html'>This is something I read about in 2001, and it still seems to be one of the most promising ideas in cancer therapy. The treatment involves two molecular objects bound together. One is an &lt;a href="http://en.wikipedia.org/wiki/Antibody"&gt;antibody&lt;/a&gt; that gets taken into a cancer cell. The other is a radioactive actinium-255 atom which has a ten-day &lt;a href="http://en.wikipedia.org/wiki/Half-life"&gt;half-life&lt;/a&gt;, and then &lt;a href="http://en.wikipedia.org/wiki/Alpha_decay"&gt;decays&lt;/a&gt; through a few different products, releasing four &lt;a href="http://en.wikipedia.org/wiki/Alpha_particle"&gt;alpha particles&lt;/a&gt;, which rip through the cancer cell and kill it. Luckily alpha particles have only enough energy to destroy one cell, and then they run out of steam and become inert helium nuclei.&lt;br /&gt;&lt;br /&gt;At Sloan-Kettering where this work was done, they applied for a &lt;a href="http://www.freepatentsonline.com/6683162.html"&gt;patent&lt;/a&gt;. A &lt;a href="http://bloodjournal.hematologylibrary.org/cgi/content/abstract/100/4/1233"&gt;clinical trial&lt;/a&gt; was conducted in 2002 with favorable results. There have also been some clinical trials in Australia, I believe.&lt;br /&gt;&lt;br /&gt;As far as I am aware, this is a fantastic treatment, due to its being extremely specific, and is applicable to a wide range of cancers, but it's not used much. I would imagine the actinium-255 must be prepared through some process that would probably be very expensive. It would be great if some more affordable alternative could be found. It seems to me that were advanced nanotech available today, some suitable replacement for the radioactive actinium nucleus might be possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5746760635753710261?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5746760635753710261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5746760635753710261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5746760635753710261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5746760635753710261'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/04/targeted-alpha-therapy.html' title='Targeted alpha therapy'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-7126125348472026264</id><published>2008-04-21T09:29:00.000-07:00</published><updated>2010-01-17T16:08:33.499-08:00</updated><title type='text'>Nifty stuff over at Machine Phase blog</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3LVTG0JLzts/R_LDr0Xml7I/AAAAAAAAAbY/VN3Cb71Sayw/s320/dna_and_carbon_buckyball.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 234px; height: 229px;" src="http://2.bp.blogspot.com/_3LVTG0JLzts/R_LDr0Xml7I/AAAAAAAAAbY/VN3Cb71Sayw/s320/dna_and_carbon_buckyball.png" alt="" border="0" /&gt;&lt;/a&gt;A couple of interesting things from Tom Moore's &lt;a href="http://machine-phase.blogspot.com/"&gt;Machine Phase&lt;/a&gt; blog. One is a &lt;a href="http://machine-phase.blogspot.com/2008/04/dna-and-carbon-buckyball-for-comparison.html"&gt;comparison&lt;/a&gt; between a carbon buckyball and a geometrically similar structure made from DNA using (what appears to be) Paul Rothemund's &lt;a href="http://www.dna.caltech.edu/%7Epwkr/"&gt;DNA origami&lt;/a&gt; technique. Note the teeny dot in the middle, that's the carbon buckytube.&lt;br /&gt;&lt;br /&gt;The other is very interesting because it combines nanotech with my interest in &lt;a href="http://wills-fabber-blog.blogspot.com/"&gt;3d printers&lt;/a&gt; in an unexpected way. Specifically it's about using a 3d printer to &lt;a href="http://www.nanowerk.com/spotlight/spotid=2304.php"&gt;print parts&lt;/a&gt; for an atomic-force microscope, using &lt;a href="http://en.wikipedia.org/wiki/Selective_laser_sintering"&gt;selective laser sintering&lt;/a&gt;. These microscopes typically cost hundreds of thousands of dollars. Hopefully this approach will make them much more affordable for universities, and perhaps high schools and even individual hobbyists.&lt;br /&gt;&lt;img style="width: 197px; height: 147px;" src="http://will.ware.googlepages.com/id2304_1.jpg" /&gt;    &lt;img style="width: 193px; height: 146px;" src="http://will.ware.googlepages.com/id2304_2.jpg" /&gt;&lt;br /&gt;The white plastic pieces were the things printed with the 3d printer. I always thought of SLS as something done with metal, but I guess it works with plastic too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-7126125348472026264?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/7126125348472026264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=7126125348472026264' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7126125348472026264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/7126125348472026264'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/04/nifty-stuff-over-at-machine-phase-blog.html' title='Nifty stuff over at Machine Phase blog'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3LVTG0JLzts/R_LDr0Xml7I/AAAAAAAAAbY/VN3Cb71Sayw/s72-c/dna_and_carbon_buckyball.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-6079974818618795713</id><published>2008-03-26T12:26:00.000-07:00</published><updated>2008-03-26T13:24:05.626-07:00</updated><title type='text'>My trip to Munich, 20-25 March 2008</title><content type='html'>My brother Bob and his wife Anja have been spending a year living in Munich. Bob is in the Air Force reserves and is working at the &lt;a href="http://maps.google.com/maps?hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official&amp;amp;hs=J2v&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;q=%22air+force%22&amp;amp;near=Munich,+Germany&amp;amp;fb=1&amp;amp;cid=0,0,5873885381371051146&amp;amp;sa=X&amp;amp;oi=local_result&amp;amp;resnum=1&amp;amp;ct=image"&gt;Air Force base&lt;/a&gt; there. Here are my &lt;a href="http://www.flickr.com/photos/28098191@N00/sets/72157604263305119/"&gt;photos&lt;/a&gt; from the trip.&lt;br /&gt;&lt;br /&gt;For the moment this blog entry is only a placeholder, later I'll fill in more details. The itinerary was roughly as follows. Wednesday night, took a red-eye from Boston to &lt;a href="http://maps.google.com/maps?hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official&amp;amp;hs=J2v&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;q=%22air+force%22&amp;amp;near=Munich,+Germany&amp;amp;fb=1&amp;amp;cid=0,0,5873885381371051146&amp;amp;sa=X&amp;amp;oi=local_result&amp;amp;resnum=1&amp;amp;ct=image"&gt;London Heathrow&lt;/a&gt;, landing at 6 AM local time and spending six hours learning about unreasonable exchange rates. Then a two hour flight to the Munich airport near &lt;a href="http://www.erdinger.com/"&gt;Erding&lt;/a&gt; where Bob lives and works.&lt;br /&gt;&lt;iframe marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=l&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=&amp;amp;near=&amp;amp;sll=48.34621,11.804466&amp;amp;sspn=0.093326,0.233459&amp;amp;ie=UTF8&amp;amp;ll=48.350545,11.80275&amp;amp;spn=0.093318,0.233459&amp;amp;z=12&amp;amp;output=embed&amp;amp;s=AARTsJq2CrVXC6heT4nlx7r68XCQQ9nyZA" frameborder="0" height="350" scrolling="no" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=l&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=&amp;amp;near=&amp;amp;sll=48.34621,11.804466&amp;amp;sspn=0.093326,0.233459&amp;amp;ie=UTF8&amp;amp;ll=48.350545,11.80275&amp;amp;spn=0.093318,0.233459&amp;amp;z=12&amp;amp;source=embed" style="color: rgb(0, 0, 255); text-align: left;"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;On Friday we went to the &lt;a href="http://www.musmn.de/start.htm"&gt;Museum Mensch und Natur&lt;/a&gt; (&lt;a href="http://maps.google.com/maps?hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official&amp;amp;hs=J2v&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;q=%22air+force%22&amp;amp;near=Munich,+Germany&amp;amp;fb=1&amp;amp;cid=0,0,5873885381371051146&amp;amp;sa=X&amp;amp;oi=local_result&amp;amp;resnum=1&amp;amp;ct=image"&gt;map&lt;/a&gt;) in downtown Munich. On Saturday we went to &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=herrenchiemsee&amp;amp;sll=47.875483,12.394295&amp;amp;sspn=0.047093,0.11673&amp;amp;ie=UTF8&amp;amp;ll=47.861348,12.40129&amp;amp;spn=0.012583,0.029182&amp;amp;t=h&amp;amp;z=15"&gt;Herrenchiemsee&lt;/a&gt;, a palace on an island in the middle of a lake, modeled after &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=versailles&amp;amp;ie=UTF8&amp;amp;ll=48.801436,2.127056&amp;amp;spn=0.024705,0.047379&amp;amp;t=h&amp;amp;z=14"&gt;Versailles&lt;/a&gt; in France. On Sunday we went to the &lt;a href="http://www.deutsches-museum.de/en"&gt;Deutsches Museum&lt;/a&gt; (&lt;a href="http://www.flickr.com/photos/28098191@N00/sets/72157604259198090/"&gt;photos&lt;/a&gt;, &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Deutsches+Museum&amp;amp;sll=48.127601,11.578217&amp;amp;sspn=0.100142,0.189514&amp;amp;ie=UTF8&amp;amp;ll=48.131783,11.584718&amp;amp;spn=0.006258,0.011845&amp;amp;z=16&amp;amp;iwloc=addr"&gt;map&lt;/a&gt;) in Munich, and I've got to say, it's the best science and technology museum I have ever seen in my life. On Monday we went to the &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;sll=48.172497,12.835121&amp;amp;sspn=0.100055,0.189514&amp;amp;ie=UTF8&amp;amp;ll=48.156195,12.829403&amp;amp;spn=0.001564,0.002961&amp;amp;t=h&amp;amp;z=18"&gt;castle complex&lt;/a&gt; at Burghausen, on the Austrian border. On Tuesday I was too frantic catching my plane for any interesting adventures, although Bob and I did bike into town to get strawberries and fresh croissants.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-6079974818618795713?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/6079974818618795713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=6079974818618795713' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6079974818618795713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/6079974818618795713'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/03/my-trip-to-munich-20-25-march-2008.html' title='My trip to Munich, 20-25 March 2008'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-443831132331064217</id><published>2008-03-13T07:36:00.000-07:00</published><updated>2010-01-17T16:08:33.528-08:00</updated><title type='text'>Nanotube radio antenna work at U.C. Berkeley</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.technologyreview.com/files/14609/0308-Nanoradio_x600.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 251px; height: 285px;" src="http://www.technologyreview.com/files/14609/0308-Nanoradio_x600.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.physics.berkeley.edu/research/zettl/"&gt;Alex Zettl&lt;/a&gt; at the &lt;a href="http://www.berkeley.edu/"&gt;University of California at Berkeley&lt;/a&gt; has &lt;a href="http://www.physics.berkeley.edu/research/zettl/projects/nanoradio/radio.html"&gt;invented&lt;/a&gt; an interesting radio antenna made from a single conductive carbon nanotube (less than a   micron long and ten nanometers wide) positioned between two conductive plates. He has used the antenna to receive songs transmitted by radio, and has &lt;a href="http://physics.berkeley.edu/research/zettl/projects/nanoradio/Media/nanoradio-good%20vibrations.mov"&gt;posted the results&lt;/a&gt; for your listening pleasure. There is a gap between one plate and a free end of the nanotube, across which electrons tunnel. When a voltage is placed across the two plates, the nanotube's free end becomes electrically charged oppositely from the nearby plate, and the electrostatic attraction keeps the nanotube under mechanical tension.&lt;br /&gt;&lt;br /&gt;The nanotube's electrically charged free end moves in response to an ambient radio frequency electric field. This changes the gap size, and therefore the measured tunneling current across the gap, just as with a &lt;a href="http://en.wikipedia.org/wiki/Scanning_tunneling_microscope"&gt;scanning tunneling microscope&lt;/a&gt;. The resonant frequency of the antenna is simply the mechanical resonant frequency of the nanotube under tension. The tension can be changed by changing the voltage across the two conducting plates, and in this way the radio can be tuned. The bandwidth of the antenna is determined by the nanotube's stiffness, and (I think) would depend primarily on the length of the nanotube. The space between the two plates should be a vacuum so the nanotube can move freely, and so that Brownian motion does not detune the radio.&lt;br /&gt;&lt;br /&gt;The value of a radio antenna this size is that one can communicate with and control nanorobots, for instance in the human body. One could use these nanorobots for diagnostics, reading out blood chemistry or information about various kinds of cell damage, and could send them instructions to intervene.&lt;br /&gt;&lt;br /&gt;There are lots of interesting things happening in the area of nanofabrication, such as Andrew Turberfield's tetrahedra discussed in the previous posting. Presently such things are "controlled" by adding solutions of different DNA sequences to the liquid the structure is sitting in, and the new sequence interacts mechanically with the structure to alter it, by binding selectively with some part of the structure already in place. But each step takes tens of minutes as molecules diffuse through water and position themselves to bind correctly. A signal received by a radio antenna might make things happen much quicker.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-443831132331064217?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/443831132331064217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=443831132331064217' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/443831132331064217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/443831132331064217'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/03/nanotube-radio-antenna-work-at-uc.html' title='Nanotube radio antenna work at U.C. Berkeley'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8223247076858022200</id><published>2008-03-06T07:39:00.000-08:00</published><updated>2010-01-17T16:12:16.490-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='polylactic acid'/><category scheme='http://www.blogger.com/atom/ns#' term='multiple materials'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded circuitry'/><title type='text'>Adrian Bowyer interview, Computerworld</title><content type='html'>&lt;a href="http://www.computerworld.com.au/index.php/id;1996480704"&gt;Here&lt;/a&gt; is the start of the four-page interview. Much of this is stuff that's been published before. Two parts I found interesting appeared on the &lt;a href="http://www.computerworld.com.au/index.php/id;1996480704;pp;3"&gt;third page&lt;/a&gt;.&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Are there plans to modify the current design to replace non-reproducible parts such as bolts with parts that can be manufactured on the machine itself, bringing the overall RepRap design closer to 100 per cent self-reproduction? &lt;/b&gt; &lt;/p&gt;&lt;p&gt;Yes - that is definitely one of the evolutionary paths to greater reproductive success. For the immediate future I will be concentrating on widening the list of materials that RepRap can build with (starting with electrical conductors). That widening will implicitly raise the proportion of parts that it can make for itself, of course. &lt;/p&gt;&lt;/blockquote&gt;The Fab@Home people have already done a few &lt;a href="http://fabathome.org/wiki/index.php?title=Fab%40Home:Embedded_Circuits"&gt;embedded circuits&lt;/a&gt; by printing with conductive silicone. Making circuitry will be a very important ability for these machines.&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;b&gt; Can the RepRap recycle what it manufactures?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Yes, recycling has been built in from the start... The main plastic we are using is &lt;a href="http://en.wikipedia.org/wiki/Polylactic_acid"&gt;polylactic acid&lt;/a&gt;...&lt;/p&gt;&lt;p class="storybody"&gt;But I want to move to using a non-biodegradable resin. This too is sourced from biomass, but is stable in the ground. That means that the more reprapped goods that get made from it and  thrown in landfill, the more carbon is taken out of the atmosphere and locked away for good. And, in 200 years when we have taken so much carbon out of the air to make stuff that anthropogenic global cooling is starting to be a problem, the landfill sites become our strip coal mines to save us.&lt;/p&gt;&lt;/blockquote&gt;This is the first time I've ever heard anybody advocate for putting stuff INTO landfills as an environmental measure. An interesting approach to &lt;a href="http://cdiac2.esd.ornl.gov/"&gt;carbon sequestration&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8223247076858022200?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8223247076858022200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8223247076858022200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8223247076858022200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8223247076858022200'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/03/adrian-bowyer-interview-computerworld.html' title='Adrian Bowyer interview, Computerworld'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-3925008084520643803</id><published>2008-03-02T16:15:00.000-08:00</published><updated>2010-01-17T16:12:16.500-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><category scheme='http://www.blogger.com/atom/ns#' term='fabber revolution'/><title type='text'>Coming soon: a complete RepRap kit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bitsfrombytes.com/images/stories/ian-moulded-reprap.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 220px; height: 214px;" src="http://www.bitsfrombytes.com/images/stories/ian-moulded-reprap.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.bitsfrombytes.com/"&gt;BitsFromBytes.com&lt;/a&gt; is an on-line store based in the UK which will be offering a complete set of parts for the RepRap for UK£299, or somewhere around US$600 given current exchange rates. They will offer both hardware and software.&lt;br /&gt;&lt;br /&gt;I wish I could claim to be so ambitious that I would take a more active approach than simply ordering all the parts in a kit. But I'm as lazy and tired as the next guy, so a kit is really the only practical way I'm likely to do this. And the price is just about right. Months ago, Adrian Bowyer was talking about $400 as a target price for the long term, after lots of self-replicating machines had brought the price of parts down to a minimum. To get so close to the long-term price so quickly is fantastic.&lt;br /&gt;&lt;br /&gt;With this kind of head start, the scenario where RepRaps bootstrap themselves to microeconomic ubiquity looks very plausible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-3925008084520643803?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/3925008084520643803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=3925008084520643803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3925008084520643803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/3925008084520643803'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/03/coming-soon-complete-reprap-kit.html' title='Coming soon: a complete RepRap kit'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-8411141576901403088</id><published>2008-02-28T18:39:00.000-08:00</published><updated>2010-01-17T16:12:16.516-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='laser cutting'/><title type='text'>More service bureaus</title><content type='html'>In a couple of recent postings I have talked about the Ponoko laser-cutting service. Another very interesting online service bureau is &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.emachineshop.com/"&gt;Emachineshop.com&lt;/a&gt; which is a machine shop to which you send design files created with their downloadable CAD software. They have &lt;a href="http://www.emachineshop.com/users/index.htm"&gt;some&lt;/a&gt; &lt;a href="http://www.emachineshop.com/users/personal.htm"&gt;examples&lt;/a&gt; of the things people have made. Just poking around their website really makes me drool a little bit. I can't believe I'm not doing something with this.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bigbluesaw.com/"&gt;Big Blue Saw&lt;/a&gt; is a service bureau that does waterjet cutting of metal and plastic. They cut very thick pieces of metal, which surprises me, I didn't know you could do that.&lt;br /&gt;&lt;br /&gt;A couple more: &lt;a href="http://www.fabjectory.com/"&gt;Fabjectory.com&lt;/a&gt; specializes primarily in making physical copies of avatars from games like SecondLife. &lt;a href="http://fluid-forms.com/start/index.php"&gt;FluidForms&lt;/a&gt; makes pretty flowing shapes for things like vases and pitchers. I haven't read about these yet, and as of this writing I don't know what technology they use, or what design software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-8411141576901403088?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/8411141576901403088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=8411141576901403088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8411141576901403088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/8411141576901403088'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/02/more-service-bureaus.html' title='More service bureaus'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4017400634142192120</id><published>2008-02-28T13:48:00.000-08:00</published><updated>2010-01-17T16:12:16.507-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CNC'/><category scheme='http://www.blogger.com/atom/ns#' term='laser cutting'/><title type='text'>Broadening the definition of "fabber"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_D8UbavaesGg/R8czy1q-v1I/AAAAAAAAAEs/PnuaUkO60iY/s1600-h/CNC_milling_machine.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 281px; height: 214px;" src="http://bp2.blogger.com/_D8UbavaesGg/R8czy1q-v1I/AAAAAAAAAEs/PnuaUkO60iY/s320/CNC_milling_machine.png" alt="" id="BLOGGER_PHOTO_ID_5172159645552131922" border="0" /&gt;&lt;/a&gt;I want to broaden the scope of this blog a bit. The word "fabber" is generally accepted as synonymous with &lt;a href="http://en.wikipedia.org/wiki/3D_printing"&gt;"3D printer"&lt;/a&gt; but a 3D printer has a lot in common with both &lt;a href="http://en.wikipedia.org/wiki/CNC"&gt;CNC machines&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/CNC_wood_router"&gt;routers&lt;/a&gt; for wood or &lt;a href="http://en.wikipedia.org/wiki/Milling_machine"&gt;milling machines&lt;/a&gt; for metal) and &lt;a href="http://en.wikipedia.org/wiki/Laser_cutting"&gt;laser cutters&lt;/a&gt;. There are hobbyists building all of these. All of them make a 2D or 3D shape under computer control with relatively little human intervention, and minimal need for human skill.&lt;br /&gt;&lt;br /&gt;How many of these gadgets could be self-replicative in the RepRap sense? For example, could one use a laser cutter&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_D8UbavaesGg/R8c1IFq-v2I/AAAAAAAAAE0/Zp-JS2UvcIs/s1600-h/laser-cutting.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_D8UbavaesGg/R8c1IFq-v2I/AAAAAAAAAE0/Zp-JS2UvcIs/s200/laser-cutting.jpg" alt="" id="BLOGGER_PHOTO_ID_5172161110135979874" border="0" /&gt;&lt;/a&gt; (or a laser-cutting service like &lt;a href="http://www.ponoko.com/"&gt;Ponoko&lt;/a&gt;) to cut out pieces and use those pieces to build another laser cutter, thereby driving down the cost of laser cutters? As with RepRap there will inevitably be complicated pieces that can't be made that way. &lt;a href="http://en.wikipedia.org/wiki/Carbon_dioxide_laser"&gt;CO&lt;sub&gt;2&lt;/sub&gt; lasers&lt;/a&gt; are dangerous and expensive, so I don't think this could make the kind of impact in the developing world that RepRap hopes to make. A replicating CNC machine might be a better bet, as &lt;a href="http://en.wikipedia.org/wiki/Dremel"&gt;Dremel tools&lt;/a&gt; are much cheaper and safer than lasers.&lt;br /&gt;&lt;br /&gt;That &lt;a href="http://en.wikipedia.org/wiki/Self-replication"&gt;self-replicative&lt;/a&gt; idea does fascinate me a good deal. It will, over time, drive down the price of the self-replicating thing. That doesn't mean we'll enter a microeconomic paradise, but it promises at least to be interesting and possibly to raise the quality of life noticeably.&lt;br /&gt;&lt;br /&gt;I've haven't blogged too much about commercial machines. I want to do more of that. I admire the hobbyists and their perseverance in the face of difficulties, but the technology appearing in commercial machines will gradually trickle down into the hobbyist arena as patents expire.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4017400634142192120?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4017400634142192120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4017400634142192120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4017400634142192120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4017400634142192120'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/02/broadening-definition-of.html' title='Broadening the definition of &amp;quot;fabber&amp;quot;'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_D8UbavaesGg/R8czy1q-v1I/AAAAAAAAAEs/PnuaUkO60iY/s72-c/CNC_milling_machine.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4415232921922736997</id><published>2008-02-27T06:06:00.000-08:00</published><updated>2010-01-17T16:12:16.523-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='getting started'/><category scheme='http://www.blogger.com/atom/ns#' term='laser cutting'/><title type='text'>RepRap parts available via Ponoko</title><content type='html'>&lt;a href="http://www.ponoko.com/"&gt;Ponoko&lt;/a&gt; is a very cool on-line &lt;a href="http://en.wikipedia.org/wiki/Laser_cutting"&gt;laser cutter&lt;/a&gt; fabrication service with a wide range of available &lt;a href="http://www.ponoko.com/makeandsell/materials"&gt;materials&lt;/a&gt;. The idea is that you create a &lt;a href="http://en.wikipedia.org/wiki/Encapsulated_PostScript"&gt;EPS file&lt;/a&gt; for the laser cutter to follow, specify the material, and they cut out the pieces and ship them to you. The laser can also engrave lines on the material. EPS files can be generated with &lt;a href="http://en.wikipedia.org/wiki/Adobe_Illustrator"&gt;Adobe Illustrator&lt;/a&gt; or various other similar 2D artwork programs. If you want to make a 3D project (like &lt;a href="http://www.ponoko.com/showroom/rudo/226"&gt;this table&lt;/a&gt;), you make it out of 2D pieces that fit together with slots and grooves. When you upload your EPS file and choice of materials, they figure out how much the laser cutting fee will cost.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1427/1468070315_83111fd676_m_d.jpg" align="right"/&gt;Toby Borland (of &lt;a href="http://www.smartlab.uk.com/2projects/magicbox.htm"&gt;SMARTlab&lt;/a&gt; in the U.K.) has designed a set of laser-cut plywood RepRap parts and made the EPS files &lt;a href="http://www.ponoko.com/showroom/reprap/670#"&gt;available&lt;/a&gt; on the Ponoko website. There is a &lt;a href="http://www.flickr.com/photos/foam/sets/72157602227593113/"&gt;Flickr photo set&lt;/a&gt; showing laser-cut RepRap parts and the process of assembling them; I am not sure that's the same Ponoko files and process, or another laser-cutting effort, but it gives you a sense of what's involved, and the level of complexity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4415232921922736997?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4415232921922736997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4415232921922736997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4415232921922736997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4415232921922736997'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/02/reprap-parts-available-via-ponoko.html' title='RepRap parts available via Ponoko'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-5184355121449991781</id><published>2008-02-22T09:28:00.000-08:00</published><updated>2010-01-17T16:08:33.547-08:00</updated><title type='text'>Too-brief overview of DNA nanotechnology</title><content type='html'>&lt;img src="http://seemanlab4.chem.nyu.edu/cube.gif" alt="cube.gif" width=300 align=right&gt;A lot of interesting work has been done with DNA nanotechnology, much of it starting with &lt;a href="http://seemanlab4.chem.nyu.edu/Nanotech.html"&gt;Nadrian Seeman's work&lt;/a&gt; on DNA polyhedra in the mid-90s (&lt;a href="http://seemanlab4.chem.nyu.edu/nano-cube.html"&gt;1&lt;/a&gt;, &lt;a href="http://seemanlab4.chem.nyu.edu/nano-oct.html"&gt;2&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Around 2000, &lt;a href="http://www.physics.ox.ac.uk/cm/people/turberfield.htm"&gt;Andrew Turberfield&lt;/a&gt; (Oxford University's Department of Physics) used DNA to make &lt;a href="http://news.bbc.co.uk/1/hi/sci/tech/873097.stm"&gt;tweezers&lt;/a&gt;, with arms 7 nanometers long.&lt;br /&gt;&lt;blockquote&gt;"Of course it's all very speculative," said Dr Turberfield, "but you can imagine, for instance, little factories on chips doing chemistry or simple assembly. You can think of production lines made up of little motors with different reactants being passed from one place to the next."&lt;/blockquote&gt;&lt;img src="http://www.dna.caltech.edu/~pwkr/i/twosmileys-topo-tilted2.jpg" align=left height=150&gt;Things got really interesting in March 2006 with &lt;a href="http://www.dna.caltech.edu/~pwkr/"&gt;Paul Rothemund&lt;/a&gt;'s DNA origami technique. Here is &lt;a href="http://www.dna.caltech.edu/Papers/DNAorigami-nature.pdf"&gt;the publication&lt;/a&gt;. I was working at Nanorex at that time, and we were all &lt;a href="http://nanoengineer-1.com/content/index.php?option=com_content&amp;amp;task=view&amp;amp;id=53&amp;amp;Itemid=2"&gt;quite excited&lt;/a&gt; about it.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://nanoengineer-1.com/content/images/stories/gallery/sdn/dna_tetrahedron1_256.png" alt="dna_tetrahedron1_256.png" align=right /&gt;In 2005 Turberfield and colleagues described a family of DNA tetrahedra consisting of triangles of DNA helices covalently joined at the vertices to form a mechanically rigid 3D structure. This image of a reduced model of one structure, which is less than 10 nanometers on a side, was created using NanoEngineer-1 Alpha 9. The bowing of the DNA helices is pronounced in this rendering and is the result of electrostatic potential terms included in the customized molecular-mechanics-like force field developed by Dr. K. Eric Drexler specifically for DNA structures. Regarding Turberfield's work, &lt;a href="http://technology.newscientist.com/article/dn13277-remotecontrol-dna-pistons-could-power-tiny-robots.html"&gt;New Scientist&lt;/a&gt; wrote:&lt;blockquote&gt;Now Andrew Turberfield [et al] have shown how carefully crafted DNA structures can be made to self assemble and change shape when sent specific DNA signals. The researchers built tetrahedrons ... using four short DNA "struts" that join at each end. The process exploits the way DNA is held together by complementary bases that form the rungs of a ladder-like structure ... the researchers made cages with two extendible struts that could be independently controlled using different DNA sequences. In theory, it should be possible to create cages in which every strut can be controlled independently, Tuberfield says.&lt;/blockquote&gt;These cages are a combination of support material and linear motor, and with the many other DNA tricks being done, they should allow people to build large, complicated, reasonably rigid 3D structures that have controllable moving parts. So this is a very promising development.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.nanowerk.com/news/id4493.jpg" align=right&gt;A very recent announcement of &lt;a href="http://www.nanowerk.com/news/newsid=4493.php"&gt;work&lt;/a&gt; by &lt;a href="http://chemgroups.northwestern.edu/mirkingroup/"&gt;Chad Mirkin&lt;/a&gt; and colleagues. They have &lt;a href="http://www.nature.com/nature/journal/v451/n7178/abs/nature06508.html"&gt;found a way&lt;/a&gt; to use DNA to glue together arbitrary arrangements of teeny gold spheres. People have known for some time now how to make DNA stick to gold spheres, and by careful selection of DNA sequences, Mirkin et al can position groups of spheres in almost any 3D configuration they want.&lt;br /&gt;&lt;br /&gt;In light of these developments, &lt;a href="http://nanoengineer-1.com/content/"&gt;Nanorex&lt;/a&gt; has narrowed its focus from "general" nanotechnology (anything one might build from common small molecules) to structural DNA nanotechnology. This is likely to be where much progress will occur in the next five years or so. I hope Nanorex will still be around after that, and will be in a good position to shift gears as we move beyond DNA to more general chemistry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-5184355121449991781?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/5184355121449991781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=5184355121449991781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5184355121449991781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/5184355121449991781'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/02/too-brief-overview-of-dna.html' title='Too-brief overview of DNA nanotechnology'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9667563.post-4574239971057102698</id><published>2008-02-17T14:26:00.000-08:00</published><updated>2010-01-17T16:12:16.530-08:00</updated><title type='text'>Those commercial 3D printers sure are gittin' purty</title><content type='html'>Some commercial 3D printers are very pretty. This one prints in colored plastic and is intended to create prototypes in a few hours that can be shown to managers or customers. The claimed resolution of this thing (presumably in all three dimensions) is 450 dots per inch. Drool.&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yyZtBYG0QOg&amp;rel=0&amp;border=0"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yyZtBYG0QOg&amp;rel=0&amp;border=0" type="application/x-shockwave-flash" wmode="transparent"width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;In twenty years, all the patents for this printer will have expired, and it will be possible for hobbyists to make such pretty stuff at such high resolution. Hmm, thinking more about that inclines me to start an &lt;a href="http://wills-economics.blogspot.com/"&gt;economics blog&lt;/a&gt;, since I blog about economics a lot elsewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9667563-4574239971057102698?l=willware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://willware.blogspot.com/feeds/4574239971057102698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9667563&amp;postID=4574239971057102698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4574239971057102698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9667563/posts/default/4574239971057102698'/><link rel='alternate' type='text/html' href='http://willware.blogspot.com/2008/02/those-commercial-3d-printers-sure-are.html' title='Those commercial 3D printers sure are gittin&amp;#39; purty'/><author><name>Will Ware</name><uri>https://profiles.google.com/117500577383561624782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Dhyy8ulIpWg/AAAAAAAAAAI/AAAAAAAAAAA/ATBCNfEldjo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
