<?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-9126034661413250795</id><updated>2011-12-15T10:37:51.019-07:00</updated><title type='text'>The Other Details</title><subtitle type='html'>Any sufficiently complex system is hackable.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-9104082318027849073</id><published>2011-09-28T10:09:00.000-07:00</published><updated>2011-09-28T10:09:15.469-07:00</updated><title type='text'>Whichclasses should I take?</title><content type='html'>A project of mine got featured in the &lt;a href="http://www.wildcat.arizona.edu/index.php/article/2011/09/which_classes_website_offers_alternative_to_ratemyprofessors"&gt;school newspaper&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Backstory: my roommate and I were looking for which classes to take for our technical electives. The University of Arizona site for reading course reviews is not very easy to use and makes it difficult to answer questions like "which class is the best in my department?". We scraped their data and made a better interface, it's currently at &lt;a href="http://whichclasses.com/"&gt;whichclasses.com&lt;/a&gt;&amp;nbsp;so anyone can use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-9104082318027849073?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/9104082318027849073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/09/whichclasses-should-i-take.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/9104082318027849073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/9104082318027849073'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/09/whichclasses-should-i-take.html' title='Whichclasses should I take?'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8448083881360344854</id><published>2011-06-10T23:37:00.001-07:00</published><updated>2011-06-10T23:37:18.649-07:00</updated><title type='text'>Normal Office Things</title><content type='html'>&lt;iframe allowfullscreen="" frameborder="0" height="314" src="http://www.youtube.com/embed/nHDEyAd2Nng" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8448083881360344854?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8448083881360344854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/06/normal-office-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8448083881360344854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8448083881360344854'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/06/normal-office-things.html' title='Normal Office Things'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/nHDEyAd2Nng/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2794421076329468075</id><published>2011-06-01T21:06:00.004-07:00</published><updated>2011-06-18T18:37:04.442-07:00</updated><title type='text'>San Francisco</title><content type='html'>So, I got hired by Google for a summer internship. I'm working with the site&amp;nbsp;reliability&amp;nbsp;engineers on Gmail's spam, abuse, and delivery team.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-l8g-c3_DtSo/TecPPcoQnvI/AAAAAAAAAFI/C7tyMpAgGck/s1600/IMG_4043.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-l8g-c3_DtSo/TecPPcoQnvI/AAAAAAAAAFI/C7tyMpAgGck/s400/IMG_4043.JPG" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: center;"&gt;Me in my Noogler hat.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-k6vW3KIiCHc/TecM7jNODvI/AAAAAAAAAE8/AWN56a7nldA/s1600/IMG_3991.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://2.bp.blogspot.com/-k6vW3KIiCHc/TecM7jNODvI/AAAAAAAAAE8/AWN56a7nldA/s400/IMG_3991.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Me in front of building 44's Android statue&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gwRh3HdPMnY/TecMpqYPIkI/AAAAAAAAAE0/Kdq3f1AOCMk/s1600/2011-05-24_08-08-40_492.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-gwRh3HdPMnY/TecMpqYPIkI/AAAAAAAAAE0/Kdq3f1AOCMk/s400/2011-05-24_08-08-40_492.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;The mountain view bowling alley&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-p2LJaStXLpg/TecMu_wZrZI/AAAAAAAAAE4/Biwc7N9Ln-4/s1600/IMG_3973.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-p2LJaStXLpg/TecMu_wZrZI/AAAAAAAAAE4/Biwc7N9Ln-4/s400/IMG_3973.JPG" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;The bikes for getting between buildings&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZaDdGseeS6Q/TecN6CvZImI/AAAAAAAAAFA/vTyLp0394DE/s1600/IMG_4110.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-ZaDdGseeS6Q/TecN6CvZImI/AAAAAAAAAFA/vTyLp0394DE/s400/IMG_4110.JPG" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;My desk (ergonomic keyboard is great, massive monitor is beyond great)&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vA3rapWdCEE/TecN_WiaIyI/AAAAAAAAAFE/2YiYy_HZI9g/s1600/IMG_4112.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/-vA3rapWdCEE/TecN_WiaIyI/AAAAAAAAAFE/2YiYy_HZI9g/s400/IMG_4112.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;The San Francisco office slide&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kY3kEaFFwLE/TecPxKxhXaI/AAAAAAAAAFM/TSqlwGOahKk/s1600/IMG_4072.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/-kY3kEaFFwLE/TecPxKxhXaI/AAAAAAAAAFM/TSqlwGOahKk/s400/IMG_4072.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;My cousin is working relatively nearby and I got a chance to hang out with him.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2794421076329468075?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2794421076329468075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/06/san-francisco.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2794421076329468075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2794421076329468075'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/06/san-francisco.html' title='San Francisco'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-l8g-c3_DtSo/TecPPcoQnvI/AAAAAAAAAFI/C7tyMpAgGck/s72-c/IMG_4043.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7817861282773527587</id><published>2011-03-27T21:00:00.002-07:00</published><updated>2011-03-27T21:50:34.181-07:00</updated><title type='text'>The Simplest Timer I Could Think Up</title><content type='html'>Most of the projects I post up here are pretty software heavy, but I'm proud of this one mostly because I &lt;i&gt;didn't&lt;/i&gt;&amp;nbsp;write any code. On Friday, I walked into the shop for the race team I'm a part of and was informed that the timing system I was supposed to make was to be operational on Saturday morning, not Saturday night as I had expected. This made any plans of making complicated things with an embedded microcontroller completely unfeasible.&lt;br /&gt;&lt;br /&gt;I did the only reasonable thing and&amp;nbsp;immediately&amp;nbsp;left the shop and went to Radio Shack (I was pretty desperate) and then to Walmart.&lt;br /&gt;&lt;br /&gt;My goals for this were to make it as quickly as possible and keep it cheap and robust above all else, so it uses extension cords to communicate across the 150' run, a modified stopwatch to keep time, and the switches are mild steel boxes with aluminum levers.&lt;br /&gt;&lt;br /&gt;This is my kitchen table at 3:00:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-o8BHVJmk5V8/TY_3O-1K_mI/AAAAAAAAAD0/qMDT-XJP-tU/s1600/2011-03-25_15-37-06_942.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-o8BHVJmk5V8/TY_3O-1K_mI/AAAAAAAAAD0/qMDT-XJP-tU/s400/2011-03-25_15-37-06_942.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;After some screwdriver time:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-W6n30vbJ4BY/TY_3QNl0fnI/AAAAAAAAAD4/avJ-MLbs2pE/s1600/2011-03-25_15-46-34_398.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://3.bp.blogspot.com/-W6n30vbJ4BY/TY_3QNl0fnI/AAAAAAAAAD4/avJ-MLbs2pE/s400/2011-03-25_15-46-34_398.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Added some leads to the switches on the inside:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-V6bi1wZnoGA/TY_3Q_4ZXyI/AAAAAAAAAD8/-0c0u73BYEE/s1600/2011-03-25_16-41-14_168.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-V6bi1wZnoGA/TY_3Q_4ZXyI/AAAAAAAAAD8/-0c0u73BYEE/s400/2011-03-25_16-41-14_168.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Designing the switch pads for the car:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-eBdsumgPF_g/TY_3SJRO-mI/AAAAAAAAAEA/HXU3y57BXi8/s1600/2011-03-25_17-27-17_535.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/-eBdsumgPF_g/TY_3SJRO-mI/AAAAAAAAAEA/HXU3y57BXi8/s400/2011-03-25_17-27-17_535.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Welding up the first switch box:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-5x4WxjeHjXs/TY_3TkxT2lI/AAAAAAAAAEE/EpoXtMbiV2s/s1600/2011-03-25_18-03-21_544.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/-5x4WxjeHjXs/TY_3TkxT2lI/AAAAAAAAAEE/EpoXtMbiV2s/s400/2011-03-25_18-03-21_544.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Second switch box:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-oOgdwVg6C3I/TY_3Ug0dayI/AAAAAAAAAEI/DF6BjubpllM/s1600/2011-03-25_18-31-33_412.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-oOgdwVg6C3I/TY_3Ug0dayI/AAAAAAAAAEI/DF6BjubpllM/s400/2011-03-25_18-31-33_412.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Adding some ramps:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-AfhqbxWqGQ4/TY_3VSvbS9I/AAAAAAAAAEM/W8x9sM5Ukj0/s1600/2011-03-25_22-39-04_892.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-AfhqbxWqGQ4/TY_3VSvbS9I/AAAAAAAAAEM/W8x9sM5Ukj0/s400/2011-03-25_22-39-04_892.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Ramp reinforcement:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-_jldkynXo78/TY_3Wzooj6I/AAAAAAAAAEQ/R8cwpq93ovk/s1600/2011-03-25_22-57-16_338.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-_jldkynXo78/TY_3Wzooj6I/AAAAAAAAAEQ/R8cwpq93ovk/s400/2011-03-25_22-57-16_338.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Two boxes done:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-rQFn95Wffmo/TY_3YIAG_tI/AAAAAAAAAEU/KY0RpntqmMU/s1600/2011-03-25_23-27-11_787.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-rQFn95Wffmo/TY_3YIAG_tI/AAAAAAAAAEU/KY0RpntqmMU/s400/2011-03-25_23-27-11_787.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;First switch done:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-qB5cMtXjYVI/TY_3ZPLcXRI/AAAAAAAAAEY/n8AevVbymZQ/s1600/2011-03-26_00-00-03_345.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-qB5cMtXjYVI/TY_3ZPLcXRI/AAAAAAAAAEY/n8AevVbymZQ/s400/2011-03-26_00-00-03_345.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Both switches done:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-KJxSw0rO458/TY_3bGXfZ0I/AAAAAAAAAEg/39zmMdua2Yg/s1600/2011-03-26_00-18-59_437.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/-KJxSw0rO458/TY_3bGXfZ0I/AAAAAAAAAEg/39zmMdua2Yg/s400/2011-03-26_00-18-59_437.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;Quick demo Friday night:&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="311" src="http://www.youtube.com/embed/GvOud-2IVzM" title="YouTube video player" width="500"&gt;&lt;/iframe&gt;&lt;br /&gt;In action on Saturday:&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="311" src="http://www.youtube.com/embed/pKzbKjnwUyY" title="YouTube video player" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7817861282773527587?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7817861282773527587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/03/simplest-timer-i-could-think-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7817861282773527587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7817861282773527587'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/03/simplest-timer-i-could-think-up.html' title='The Simplest Timer I Could Think Up'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-o8BHVJmk5V8/TY_3O-1K_mI/AAAAAAAAAD0/qMDT-XJP-tU/s72-c/2011-03-25_15-37-06_942.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3861926023204440367</id><published>2011-02-21T22:57:00.008-07:00</published><updated>2011-02-22T00:08:42.722-07:00</updated><title type='text'>The Multitouch Project</title><content type='html'>I recently completed building a multitouch surface using&amp;nbsp;&lt;a href="http://ccv.nuigroup.com/"&gt;CCV&lt;/a&gt;&amp;nbsp;to track touches and provide a&amp;nbsp;&lt;a href="http://www.tuio.org/"&gt;TUIO&lt;/a&gt;&amp;nbsp;server and&amp;nbsp;&lt;a href="http://pymt.eu/"&gt;PyMT&lt;/a&gt;&amp;nbsp;to provide a higher level GUI toolkit and Python bindings. It works using&amp;nbsp;&lt;a href="http://wiki.nuigroup.com/FTIR"&gt;frustrated total internal reflection&lt;/a&gt;&amp;nbsp;and I'm pretty happy with it.&lt;br /&gt;&lt;br /&gt;The only thing written for it is a touch chasing game (video below) that I wrote with&amp;nbsp;&lt;a href="http://kevinluikens.com/"&gt;Kevin Luikens&lt;/a&gt;. It's probably going to stay like this for a while because the developers who wrote PyMT have moved on to project called&amp;nbsp;&lt;a href="http://kivy.org/"&gt;Kivy&lt;/a&gt;&amp;nbsp;which seems super cool, but is still in alpha. &amp;nbsp;We don't really like PyMT and Kivy looks a lot better, so we'll probably start work up again as it gets more stable.&lt;br /&gt;&lt;br /&gt;If there is something specific you would like a pic or video of, ask in the comments. On to the main event:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ENGR6P8iwKs/TWNGO_zYpTI/AAAAAAAAADk/MRYYYdo6daw/s1600/IMG_3294.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="333" src="http://4.bp.blogspot.com/-ENGR6P8iwKs/TWNGO_zYpTI/AAAAAAAAADk/MRYYYdo6daw/s400/IMG_3294.JPG" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xLWn9C0LOC0/TWNHkGaeneI/AAAAAAAAADo/8r9CS8ZF_d0/s1600/IMG_3219.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="333" src="http://3.bp.blogspot.com/-xLWn9C0LOC0/TWNHkGaeneI/AAAAAAAAADo/8r9CS8ZF_d0/s400/IMG_3219.JPG" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="311" src="http://www.youtube.com/embed/f0d_Bq-OSsM" title="YouTube video player" width="500"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="311" src="http://www.youtube.com/embed/LeHjb7haM9E" title="YouTube video player" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3861926023204440367?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3861926023204440367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/02/multitouch-project.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3861926023204440367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3861926023204440367'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/02/multitouch-project.html' title='The Multitouch Project'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ENGR6P8iwKs/TWNGO_zYpTI/AAAAAAAAADk/MRYYYdo6daw/s72-c/IMG_3294.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5567306179689376702</id><published>2011-02-07T21:53:00.000-07:00</published><updated>2011-02-07T21:53:59.877-07:00</updated><title type='text'>The Principles of Computation</title><content type='html'>&lt;a href="http://software-carpentry.org/4_0/softeng/principles/"&gt;These&lt;/a&gt; ideas changed (and are changing) the way we think about everything and are why computing is beautiful to me. This is the best explanation I have seen of them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5567306179689376702?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5567306179689376702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/02/principles-of-computation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5567306179689376702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5567306179689376702'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/02/principles-of-computation.html' title='The Principles of Computation'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-741332943670390541</id><published>2011-01-14T00:39:00.004-07:00</published><updated>2011-01-14T00:41:51.237-07:00</updated><title type='text'>A Brief Look At My AST Visualizer</title><content type='html'>I have been working on visualization tool for Python's abstract syntax tree as a way to learn my way around the &lt;a href="http://docs.python.org/library/ast.html#module-ast"&gt;ast module&lt;/a&gt;.&amp;nbsp;&amp;nbsp;I needed to parse Python code to implement more context aware tracing in what I worked on over the summer with GSoC, and decided on using Python's actual internal representation of itself, instead of reinventing the wheel. &lt;br /&gt;&lt;br /&gt;Making a visualizer which gets across the semantics of the program in a way understood by humans without knowledge of Python's internals has proven more difficult than I originally thought. It's pretty darn easy to get the project mostly working, but getting the little details right has led me to scrapping the two previous versions of what I had. Previously I had used recursive dictionaries and lists of various types to represent the AST because they are readily at hand in Python and writing transversal methods for them was pretty easy. They are too restrictive for graph rewriting though, which is essentially all this project is. I now have a version that uses a tree class I wrote for the project, which has proven more flexible but a little more quirky. &lt;br /&gt;&lt;br /&gt;Non of this is important without pics, so I'll get on with it. I have been using the following program for my trivial examples:&lt;br /&gt;&lt;code&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from math import sqrt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c = 2&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def f(x, y):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f( a + b, sqrt(c+1))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;It uses the trickiest bits of Python semantics to get across, where the other representations had broken, in the minimal context to show them. The visualizer produces this right now:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_WznSVe2VLy8/TS_8K7ci7zI/AAAAAAAAADY/qP323eR1Do4/s1600/blog_example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_WznSVe2VLy8/TS_8K7ci7zI/AAAAAAAAADY/qP323eR1Do4/s400/blog_example.png" width="330" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;This is far from perfect, but going in the right direction. There are still some&amp;nbsp;awkward self-reference arrows (which are an artifact of my processing right now) and I should be able to cut out some of the nodes such as every instance of Name. I also need to differentiate between objects which are shared in memory but distinct in the program, such as the Add and None nodes. I'm looking forward to getting back on this and making it a usable teaching tool about how Python looks at itself. Making this so far has taught me how Python's grammar works very well and I am confident in building a block aware tracer when this is done.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-741332943670390541?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/741332943670390541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/01/brief-look-at-my-ast-visualizer.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/741332943670390541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/741332943670390541'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/01/brief-look-at-my-ast-visualizer.html' title='A Brief Look At My AST Visualizer'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WznSVe2VLy8/TS_8K7ci7zI/AAAAAAAAADY/qP323eR1Do4/s72-c/blog_example.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8900006361807531358</id><published>2011-01-13T01:32:00.004-07:00</published><updated>2011-02-21T23:14:50.123-07:00</updated><title type='text'>Break Only Exists in Imperative Languages</title><content type='html'>Perl: "Easy things are easy, hard things are possible"&lt;br /&gt;Haskell: "Hard things are easy, the impossible just happened"&lt;br /&gt;&lt;br /&gt;This break I had some pretty serious plans about finishing up by AST visualizer for Python. They were very quickly thrown out the window when I realized I didn't really want to think about school for a month and&amp;nbsp;sleeping a lot was also a viable plan. However,&amp;nbsp;I'm really bad at being completely non-productive. I ended up working through two fantastic guides for languages I've wanted to play with for a while. I worked through&amp;nbsp;&lt;a href="http://learnyouahaskell.com/"&gt;Learn You a Haskell For Great Good&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.amazon.com/Learning-Perl-5th-Randal-Schwartz/dp/0596520107/ref=dp_ob_title_bk"&gt;Learning Perl&lt;/a&gt;, pretty thoroughly covering the spectrum of programming language practicality. I can highly recommend both resources, and plan on getting a review of Learning Perl up in the near future. &lt;br /&gt;&lt;br /&gt;Haskell is beyond incredible. I love the feeling of grasping entirely different ways of looking at problems and I got it almost every chapter of Learn You a Haskell. I enjoy the functional aspects of Python (especially closures) but working fully in that paradigm takes a bit of getting used to.&lt;br /&gt;&lt;br /&gt;The breadth of features is difficult to describe succinctly. Full power lambdas (anonymous functions) are really nice to have and language support for partial application makes working with higher level functions really easy and often makes&amp;nbsp;lambdas unnecessary. Folds are in &lt;a href="http://docs.python.org/library/functions.html#reduce"&gt;Python&lt;/a&gt;&amp;nbsp;but I really didn't get the point of them as an abstraction of the basic data-structure transversing recursion pattern until seeing their widespread use in Haskell. Typeclasses (most similar to interfaces or abstract classes in OO languages) make some really awesome abstraction possible across a wide range of data types. Trees are foldable just like lists, minBound and maxBound can work on days of the week, all sorts of things can be mapped across like lists, and any user-defined data type that implement the right functions can work with the built in functionality just fine. &lt;br /&gt;&lt;br /&gt;I&amp;nbsp;feel about monads right now exactly the same way I felt about pointers in C when I was learning to program. I'm surprised they aren't as scary as everyone makes them out to be, I see they are incredibly powerful and useful across a huge domain of problems, and I don't really see everywhere they are useful or how to make them and work with them outside the confines of tutorials and canned problems. &amp;nbsp;They are, however, an incredibly interesting approach to a pattern seen throughout programming.&lt;br /&gt;&lt;br /&gt;On the whole Haskell is the most strongly typed language I have ever used, but the typing and compiler checking don't feel tedious or draconian, they help me both think about the problem I am solving and implement the solution. I haven't written any non-trivial programs in Haskell yet, but I very happy to have spent time playing with it. &amp;nbsp;Python is no longer the most expressive language I have used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8900006361807531358?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8900006361807531358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/01/break-only-exists-in-imperative.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8900006361807531358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8900006361807531358'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/01/break-only-exists-in-imperative.html' title='Break Only Exists in Imperative Languages'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7105336085403901478</id><published>2011-01-03T10:47:00.001-07:00</published><updated>2011-01-04T12:38:12.479-07:00</updated><title type='text'>Weird Things Happening</title><content type='html'>I accidentally rebooted my computer yesterday and the battery charged overnight, when I woke up today both the acpi command and htop are really fast at all things battery. I'm going to talk about something else for a while, because it seems like I don't have a complete understanding of what influences /proc access speed.&lt;br /&gt;&lt;br /&gt;Edit: As of the day after this post, everything is really slow again. I need to do some more research to figure out what is going on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7105336085403901478?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7105336085403901478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/01/weird-things-happening.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7105336085403901478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7105336085403901478'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/01/weird-things-happening.html' title='Weird Things Happening'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2319170295247217347</id><published>2011-01-03T03:12:00.001-07:00</published><updated>2011-01-04T12:46:56.624-07:00</updated><title type='text'>Into htop's Source</title><content type='html'>I poked around in htop's source today and found the following incriminating lines in BatteryMeter.c:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; double percent = getProcBatData();&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (percent == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; percent = getSysBatData();&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (percent == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; snprintf(buffer, len, "n/a");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;That looks like my theory is confirmed. getProcBatData(), the only one of those functions that should be getting called on my system, opens at least two directories and two files every time through the main loop. This blocks the switch statement that processes character input, thus making htop sluggish.&amp;nbsp; I didn't think that file operations were that slow, especially in C, but maybe things are different in /proc and /sys due to their unique relationship with the kernel.&amp;nbsp; I'm going to poke around a little bit more tomorrow to get a good handle on how everything is behaving before I send anything to the developers. My first instinct is to try to keep open the correct directory and only reopen the needed files.&amp;nbsp; I don't know how this will affect things and should probably run gprof before concluding anything. An alternate solution that seems pretty clean to me is running a helper thread that reads the data from the special file systems so if it takes a while to read, the battery data just updates slowly, rather than blocking the user interface. I don't know if that would fly with the developers though, I don't see any other thread usage in the program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2319170295247217347?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2319170295247217347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/01/into-htops-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2319170295247217347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2319170295247217347'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/01/into-htops-source.html' title='Into htop&apos;s Source'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-673039396468418652</id><published>2011-01-02T02:09:00.000-07:00</published><updated>2011-01-02T02:09:12.809-07:00</updated><title type='text'>Problems With htop: Fixed.</title><content type='html'>I really like the command line activity manager&amp;nbsp;&lt;a href="http://htop.sourceforge.net/"&gt;htop&lt;/a&gt;&amp;nbsp;because it is super light-weight and much more useful than top or ps. I started using it last year, but it suddenly got&amp;nbsp;unbelievably&amp;nbsp;sluggish to startup and respond to key commands about six months ago. &amp;nbsp;A tool like htop needs to be responsive because I use it primarily when something has gone wrong and is leaking memory or I overloaded everything and need to lighten up the load, so replacing it with the GUI activity manager supplied with the system isn't a great idea. &amp;nbsp;I tried to use&amp;nbsp;my&amp;nbsp;&lt;a href="http://www.google.com/"&gt;favorite troubleshooting tool&lt;/a&gt;&amp;nbsp;to see what was slowing it down, to no avail.&lt;br /&gt;&lt;br /&gt;Today, I grabbed another user's config file today on a whim and lo and behold; htop was snappy. I diff'd that config with mine and applied the changes one at a time until it sped up, finding the problem in an unlikely place. &amp;nbsp;What ended up triggering it was the option to display battery state. &amp;nbsp;I think the problem comes from checking /proc/acpi/battery every time through the main loop. &amp;nbsp;I don't know exactly how those files are generated, but they take forever to read and htop runs in a single thread so the file operations block the user interface. &amp;nbsp;I am going to see if I can confirm my theory with the source code tomorrow and possible drop a line on the developer's mailing list. &amp;nbsp;For now, I just removed the battery from what htop reports.&lt;br /&gt;&lt;br /&gt;I like having command-line access to my battery state (the icon in Gnome is pretty buggy), so I replaced it with a tool aptly named acpi, from the Ubuntu repositories. It also takes forever to read out state, but it only does it once and doesn't tie up an entire useful tool doing so. &amp;nbsp;If you really want to, you could probably throw something together with the watch command to make it run continuously, but I really don't need to see how my battery is doing that much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-673039396468418652?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/673039396468418652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2011/01/problems-with-htop-fixed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/673039396468418652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/673039396468418652'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2011/01/problems-with-htop-fixed.html' title='Problems With htop: Fixed.'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5925218732616311937</id><published>2010-12-03T01:42:00.002-07:00</published><updated>2010-12-03T01:46:08.459-07:00</updated><title type='text'>Blinky-Flashy Time</title><content type='html'>&lt;object height="306" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3X34EVRXjME?fs=1&amp;amp;hl=en_US"&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/3X34EVRXjME?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="306"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;One of my friends picked up a strand of &lt;a href="http://www.adafruit.com/index.php?main_page=product_info&amp;amp;cPath=37&amp;amp;products_id=307"&gt;these&lt;/a&gt; and brought it in to the IEEE lab/hackerspace for us to play with. This is what happened with five minutes of collaboration after I messed around with the capabilities for a while. I really like the colorful LEDs and the &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt; makes coding for them really fast and easy.&amp;nbsp; It's the same feeling I get from programming in Python, but for microcontrollers.&amp;nbsp; We have some more ambitious projects planned for those parts bins, I'll keep everyone updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5925218732616311937?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5925218732616311937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/12/blinky-flashy-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5925218732616311937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5925218732616311937'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/12/blinky-flashy-time.html' title='Blinky-Flashy Time'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8177900141671127443</id><published>2010-10-23T18:31:00.003-07:00</published><updated>2010-10-23T18:33:26.379-07:00</updated><title type='text'>I'm really feeling this right now.</title><content type='html'>&lt;object width="500" height="306"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zDZFcDGpL4U?fs=1&amp;amp;hl=en_US"&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/zDZFcDGpL4U?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="306"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8177900141671127443?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8177900141671127443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/10/im-really-feeling-this-right-now.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8177900141671127443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8177900141671127443'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/10/im-really-feeling-this-right-now.html' title='I&apos;m really feeling this right now.'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6762077104166813434</id><published>2010-09-09T23:55:00.000-07:00</published><updated>2010-09-09T23:55:21.541-07:00</updated><title type='text'>Summitted the Code To Google</title><content type='html'>I just submitted my sample code to Google.&amp;nbsp; I have a lot of work right now, but will have a longer post describing my feelings on the project a month after I finished coding and get some updates on my current work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6762077104166813434?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6762077104166813434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/09/summitted-code-to-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6762077104166813434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6762077104166813434'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/09/summitted-code-to-google.html' title='Summitted the Code To Google'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3825708743109682372</id><published>2010-08-17T16:51:00.000-07:00</published><updated>2010-08-17T16:51:18.501-07:00</updated><title type='text'>Parrot 0.1.0 Released!</title><content type='html'>Yesterday I buttoned up my work and put my pencil down. I finished up its exception handling abilities and added some more examples. You can download the release archives &lt;a href="http://code.google.com/p/idlecarpentry/downloads/list" linkindex="36"&gt;here&lt;/a&gt;. I'm laying pretty low this week, as I prepare to go back to school next week, but I will be sure to get a post up reflecting on the project within the week. I have another big project (or two) right around the bend and will continue to post updates when they get going. This has been an incredible experience and I am really grateful that Greg and Google supported me in working on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3825708743109682372?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3825708743109682372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/parrot-010-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3825708743109682372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3825708743109682372'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/parrot-010-released.html' title='Parrot 0.1.0 Released!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-4834690548169793793</id><published>2010-08-16T00:18:00.000-07:00</published><updated>2010-08-16T00:18:21.904-07:00</updated><title type='text'>I Have Name</title><content type='html'>With the help of a lot of advice and brainstorming, I have decided to call the project Parrot. Tomorrow I will button up the project, tag a release in the hg repo, and produce a tarbell.&amp;nbsp; This has been an incredible experience and I will get a more in depth reflection up soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-4834690548169793793?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/4834690548169793793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/i-have-name.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4834690548169793793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4834690548169793793'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/i-have-name.html' title='I Have Name'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3352141102701023430</id><published>2010-08-12T23:29:00.000-07:00</published><updated>2010-08-12T23:29:50.430-07:00</updated><title type='text'>Redoing The Examples</title><content type='html'>I'm going to keep this short, I've been typing a lot today, but I wanted to get an update in. I reordered the buttons to make them more natural and am making some more comprehensive examples. I have one last issue I would like to fix; I want the syntax checker to be triggered when a trace is created. I should get all of this buttoned up by tomorrow or shortly after and be able to make a release of it after I go over the code and refactor it with a fine tooth comb one last time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3352141102701023430?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3352141102701023430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/redoing-examples.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3352141102701023430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3352141102701023430'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/redoing-examples.html' title='Redoing The Examples'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8883432896355489478</id><published>2010-08-11T00:05:00.000-07:00</published><updated>2010-08-11T00:05:29.551-07:00</updated><title type='text'>My Wrist Feels Better, In Theory</title><content type='html'>My wrist surgery went really well today, so I think I will be able to put in some work tomorrow. I really don't have much left to do besides make some more comprehensive examples and refine the way the Create Trace command interacts with the user. Today, I really didn't do a lot because I spent most of work time in the day munching pain pills and taking a pretty serious nap. However, I did get something fixed in the difference highlighter for the variables fixed. Before it would only highlight the last variable which changed, instead of all the variables which changed because the general purpose highlighter function I wrote cleared all highlighting before highlighting the line (I defined it primarily to work on the source, at first). Now I added a parameter to the function so it will not clear the highlighting if that is specified false, which solves my problem.&amp;nbsp; Now when a context changes (such as entering or leaving a block with its own local variables) all of the variables are highlighted and when multiple values change it is visible that they all changed instead of just the last one which changed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8883432896355489478?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8883432896355489478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/my-wrist-feels-better-in-theory.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8883432896355489478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8883432896355489478'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/my-wrist-feels-better-in-theory.html' title='My Wrist Feels Better, In Theory'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7609301671499380029</id><published>2010-08-08T19:26:00.000-07:00</published><updated>2010-08-08T19:26:54.719-07:00</updated><title type='text'>Final Tweaks For A While</title><content type='html'>Today I got a lot done and mostly finished off my list of things which bother me about the software. I cleaned up unused code in the trace module, which was just sitting around and I hadn't noticed. This lead me to finding an old TODO comment I had left for myself, reminding myself to fix an issue which lead to the trace window appearing to hang briefly every function return. So I fixed that. I also noticed the globals and locals display windows weren't working properly, which was related to some code shuffling which I hadn't noticed. I fixed that too. I also got the font and size configuration to work across the whole system. &lt;br /&gt;&lt;br /&gt;Tomorrow I will be traveling back to Arizona for most of the day, so I don't expect to get a lot of code done, but I will be working on some examples as I need a lot more. I'm going to have surgery on my wrist on the 10th, so I'll be out of commission for a while. I will spend that time thinking of a name so I can have a snappy title for the first release I put up on Google code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7609301671499380029?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7609301671499380029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/final-tweaks-for-while.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7609301671499380029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7609301671499380029'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/final-tweaks-for-while.html' title='Final Tweaks For A While'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7171376773344967249</id><published>2010-08-07T19:15:00.000-07:00</published><updated>2010-08-07T19:15:24.061-07:00</updated><title type='text'>Almost Done</title><content type='html'>After today, I only have one major and one minor issue left until I can package everything up and release it as completed. I need to make the menus more applicable for the trace display window and I need to make my code read the configuration files instead of having hard-coded values.&amp;nbsp; Nothing I don't know how to do.&lt;br /&gt;&lt;br /&gt;Today I went through my code and documented a lot of it (though I would love some tips on making good docstrings) and cleaned up the cruft.&amp;nbsp; I found a couple of places where I didn't use the functions I made for accessing the Text boxes in the trace windows. This made the code more complicated and fragile than it needed to be. I also found some places where I almost duplicated code, so I combined those areas with some minor logic changes. In the process I found a minor bug which was hurting the user experience and fixed it, streamlining a couple of other sticking points along the way. (Take home lesson: code duplication is evil.)&lt;br /&gt;&lt;br /&gt;I also added a couple of minor features to address some things I found user testing. The titles of the windows are much more descriptive for someone who isn't already a programmer, stderr now prints in red to my output window, and variables are highlighted when they are changed in the local and global variables windows.&amp;nbsp; All are things which I think will make for a much better experience.&lt;br /&gt;&lt;br /&gt;Tomorrow should be very productive, hopefully I will get everything done soon enough to take a good look at the module which actually does the tracing. I inherited some of the code from Geoff Salmon, who worked on a related project before me, and I fiddled with it quite a bit, making it not as polished as I would like it to be. If that gets all done, I will make more examples to show the new users what can be done with this project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7171376773344967249?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7171376773344967249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/almost-done.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7171376773344967249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7171376773344967249'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/almost-done.html' title='Almost Done'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3949584579384436603</id><published>2010-08-06T20:44:00.000-07:00</published><updated>2010-08-06T20:44:00.408-07:00</updated><title type='text'>Fixing Bugs, Finding Bugs</title><content type='html'>Today was really productive. I got the class integration completely finished and everything works much better than when I started. I did find, however, that the incomplete integration I was previously working with masked some issues such as the fact that every time a new PyShellEditorWindow (the is the standard editor window which the IDE is based on) is opened my changes to the menus are reapplied, this gets awkward after a few windows are opened. I spent the rest of my work tracking down and squashing a couple of UI bugs which I have been unhappy with for a while, but didn't want to devote time to until I had a more mature product.&lt;br /&gt;&lt;br /&gt;I've been repeatedly running into a problem working on this; I have a difficult time deciding in which methods to put the logic governing the alternate work flow I've created. I don't know if this is just an issue with my immaturity as a software architect or if IDLE is just very strongly structured towards one idea of how it should be used and modified.&amp;nbsp; I can see in many places where I think the design is awkward or obscure the designers were fighting with the limits imposed on them by Tkinter so it might be caused by something else all together.&lt;br /&gt;&lt;br /&gt;In other news, I was shown &lt;a href="http://packages.python.org/spyder/" linkindex="147"&gt;Spyder&lt;/a&gt; by Robert Erdmann, a professor of materials science and engineering at the University of Arizona, and I really like it.&amp;nbsp; I haven't had a chance to look at the code yet, but it seems like an excellent tool for beginners (who may be turned off by the command-line orientation of Python) and one of the better Python IDEs I have seen in a long time.&amp;nbsp; I will be continuing work on this project in the fall as an independent study advised by Dr. Erdmann so I can extend the capabilities of the tracer and its markup and study how the beginning programmers in &lt;a href="http://www.u.arizona.edu/%7Eerdmann/mse350/" linkindex="148"&gt;MSE 350&lt;/a&gt; respond to it as a learning tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3949584579384436603?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3949584579384436603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/fixing-bugs-finding-bugs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3949584579384436603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3949584579384436603'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/fixing-bugs-finding-bugs.html' title='Fixing Bugs, Finding Bugs'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2663988517346292782</id><published>2010-08-05T21:09:00.000-07:00</published><updated>2010-08-05T21:09:00.200-07:00</updated><title type='text'>OO Gets It Done With Less</title><content type='html'>Right now I am midway through transitioning my work into the natural class hierarchy of the program. I think that basing my new window class off of the existing interface useful, despite the fact that I don't need all of the features it provides.&amp;nbsp; The actual GUI is very different, in fact using a completely different geometry manager, but the input and output still need to be managed and configured by the rest of the system. By subclassing the base class of all of the major windows, I got relatively easy access to the file I/O subsystem and the existing configuration system and no longer have any extraneous exceptions coming from class mismatch problems.&amp;nbsp; I got around the GUI problems by unpacking the old GUI and reassembling it using the grid manager with the other components (which the base class doesn't know exists) after calling the __init__ method of the base class. This isn't the completely optimal solution but it is much, much better than what I was previously doing.&amp;nbsp; I still have some work to do to get everything back to the way it was, but the take home message is I removed almost 600 lines of redundant code today by using a subclass instead of rolling my own class.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2663988517346292782?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2663988517346292782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/oo-gets-it-done-with-less.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2663988517346292782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2663988517346292782'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/oo-gets-it-done-with-less.html' title='OO Gets It Done With Less'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5249267346357675334</id><published>2010-08-05T08:09:00.001-07:00</published><updated>2010-08-05T08:12:12.268-07:00</updated><title type='text'>On The Home Stretch</title><content type='html'>I forgot to post last night, so here's what's happening: I have four days of coding time left to polish up the project and get everything presentable. There are a few issues which are still bugging me which I will be concentrating on.&amp;nbsp; Most importantly, I just duplicated a class and modified it for my own needs to make part of my system. That class needs to get integrated in with rest of the IDLE so there is less grating at the interface and less duplication of code, thus making it easier to accomplish the next goals. The menus need to be redone for the window which displays traces so they actually correspond with what is being done in that window.&amp;nbsp; I need to make opening files happen in unified, coherent manner. Finally, I need more examples which demonstrate the capabilities of the system.&lt;br /&gt;&lt;br /&gt;As my work goes on, I'll post what I have refactored, what I changed, and why I changed it that way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5249267346357675334?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5249267346357675334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/on-home-stretch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5249267346357675334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5249267346357675334'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/on-home-stretch.html' title='On The Home Stretch'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-1336623983811965748</id><published>2010-08-03T19:01:00.003-07:00</published><updated>2010-08-03T19:02:33.806-07:00</updated><title type='text'>New Screencast!</title><content type='html'>&lt;object width="500" height="306"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZiS4MZF5eDQ&amp;amp;hl=en_US&amp;amp;fs=1"&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/ZiS4MZF5eDQ&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="306"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Please click through to see it full size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-1336623983811965748?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/1336623983811965748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/new-screencast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1336623983811965748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1336623983811965748'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/new-screencast.html' title='New Screencast!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3868226497581507344</id><published>2010-08-02T21:22:00.001-07:00</published><updated>2010-08-02T21:22:48.215-07:00</updated><title type='text'>Refactor to Refactor</title><content type='html'>Today I reworked my GUI to use Tkinter's grid geometry manager rather than using the packer. I ran into some issues when I was user testing and was working on fixing them when I realized how incredibly complicated my fix was to implement. Refactoring time it was.&amp;nbsp; I spent the day playing with the grid manager trying to replicate my previous work.&amp;nbsp; I don't have it all working yet but I made a mock-up to get everything working without dealing with my existing code. Here it is:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_WznSVe2VLy8/TFeZcHzuoqI/AAAAAAAAADE/ERSmU9ZdF4Q/s1600/grid_proto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_WznSVe2VLy8/TFeZcHzuoqI/AAAAAAAAADE/ERSmU9ZdF4Q/s400/grid_proto.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Also, why do I think not taking to the time to do something the quality way isn't just a waste of effort? Every time I let my code quality slip in the name of efficiency and "it's just a little one-off to figure things out",&amp;nbsp; I end up reworking all of it so it is modifiable and understandable.&amp;nbsp; Best practices got that way for a reason, so no more shoddy work for me, even if I'm the only one who will see it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3868226497581507344?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3868226497581507344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/refactor-to-refactor.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3868226497581507344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3868226497581507344'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/refactor-to-refactor.html' title='Refactor to Refactor'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WznSVe2VLy8/TFeZcHzuoqI/AAAAAAAAADE/ERSmU9ZdF4Q/s72-c/grid_proto.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-4989242447386947517</id><published>2010-08-01T20:14:00.001-07:00</published><updated>2010-08-01T20:15:09.198-07:00</updated><title type='text'>Interesting Feature in Python</title><content type='html'>I've been reading the documentation of Python's internals, trying to get a better feel for how it works and compilers are implemented in general and I found these lines in the grammar: "while_stmt: 'while' test ':' suite ['else' ':' suite]" and "for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]". These say that&lt;br /&gt;&lt;br /&gt;for i in range(4):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print i&lt;br /&gt;else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "this isn't a syntax error"&lt;br /&gt;&lt;br /&gt;and this&lt;br /&gt;&lt;br /&gt;x = 4&lt;br /&gt;while x &amp;gt; 0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i -= 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print i&lt;br /&gt;else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "this isn't a syntax error"&lt;br /&gt;&lt;br /&gt;are a perfectly legal bits of python code. They behave a little differently than I first expected. The else block executes in all cases except a break statement within the looping construct. I understand why I never heard of&amp;nbsp; these when I was learning Python and I probably will never use these constructs, but now you know about them, so you can continue not using them as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-4989242447386947517?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/4989242447386947517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/08/interesting-feature-in-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4989242447386947517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4989242447386947517'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/08/interesting-feature-in-python.html' title='Interesting Feature in Python'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3921150643698386618</id><published>2010-07-27T19:40:00.002-07:00</published><updated>2010-07-27T19:40:28.960-07:00</updated><title type='text'>SCREENCAST!</title><content type='html'>&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_-_aX32r8gE&amp;amp;hl=en_US&amp;amp;fs=1"&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/_-_aX32r8gE&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3921150643698386618?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3921150643698386618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/screencast.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3921150643698386618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3921150643698386618'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/screencast.html' title='SCREENCAST!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2570424566991312840</id><published>2010-07-27T12:21:00.001-07:00</published><updated>2010-07-27T12:21:41.221-07:00</updated><title type='text'>Fixed The Big Bug</title><content type='html'>It took four days of education and two lines of code, but it's fixed.&amp;nbsp; Cool examples to come using my new tracing files with locals imports skills.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2570424566991312840?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2570424566991312840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/fixed-big-bug.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2570424566991312840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2570424566991312840'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/fixed-big-bug.html' title='Fixed The Big Bug'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-4924842278685091012</id><published>2010-07-26T21:57:00.002-07:00</published><updated>2010-07-26T21:57:54.486-07:00</updated><title type='text'>This Exists</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:No_climbing_the_Reichstag_dressed_as_Spider-Man" linkindex="17"&gt;I really like Wikipedia&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-4924842278685091012?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/4924842278685091012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/this-exists.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4924842278685091012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4924842278685091012'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/this-exists.html' title='This Exists'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7962974637277773075</id><published>2010-07-26T20:32:00.001-07:00</published><updated>2010-07-26T20:32:51.328-07:00</updated><title type='text'>Very Good Day</title><content type='html'>Today I got all most of the usability problems fixed, got some working examples committed, and a screencast recorded. I found a pretty good tool for screencasting, but it only outputs flash files. I'm downloading tools to fix them, but I will be asleep before they are done. The screencast will be online before I go to bed tomorrow.&amp;nbsp; Furthermore, I have the program in a place where I am comfortable with people testing it, as I feel most problems they have will be the result of design problems, not execution problems.&amp;nbsp; I have also finally contacted the IDLE developers about how they see my project fitting into IDLE.&lt;br /&gt;&lt;br /&gt;At this point, the only major outstanding bug (that I know of) is the issue with tracing into included source files, but I will be attacking it full bore again tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7962974637277773075?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7962974637277773075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/very-good-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7962974637277773075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7962974637277773075'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/very-good-day.html' title='Very Good Day'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5683340988128368374</id><published>2010-07-24T20:40:00.001-07:00</published><updated>2010-07-26T18:17:12.759-07:00</updated><title type='text'>I found a gem.</title><content type='html'>&lt;a href="http://bpython-interpreter.org/" linkindex="15"&gt;This is really cool and everyone should install it immediately.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(Edit: If you alias that to Python, make sure to unalias it before you start playing with sys.settrace or it will trace the mainloop which is way too much information and doesn't end well.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5683340988128368374?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5683340988128368374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/i-found-gem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5683340988128368374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5683340988128368374'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/i-found-gem.html' title='I found a gem.'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7247771696673342895</id><published>2010-07-23T22:02:00.000-07:00</published><updated>2010-07-23T22:02:17.950-07:00</updated><title type='text'>What's Been Going On</title><content type='html'>The last post on here was very optimistic, however I have gotten very derailed. Since my last post, I have been wrestling with a very frustrating bug.&amp;nbsp; The tracer I have been using chokes when it imports certain types of modules, such as the ones Dive Into Python uses for it's non-trivial examples.&amp;nbsp; It seems to be fine with small modules and all of builtins I have tested, but it really freaks out and starts acting very strangely when a large local module is imported.&amp;nbsp; My hypothesis right now is that it is tracing into imported modules (though I don't know what is causing this) and this is chewing up a lot of memory.&amp;nbsp; The first cause is simply the wrong behavior, the second is a serious program issue.&amp;nbsp; Hopefully fixing the first will cure the second.&amp;nbsp; I have put off a couple of things which I was planning on doing, because this seems to be a much higher priority problem.&amp;nbsp; I'm going to hit it really hard this weekend (along with minor usability issues which I have been documenting) and have been collecting symptoms to try to get what is causing this worked out. More details as this unfolds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7247771696673342895?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7247771696673342895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/whats-been-going-on.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7247771696673342895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7247771696673342895'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/whats-been-going-on.html' title='What&apos;s Been Going On'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-38582119703566941</id><published>2010-07-22T00:00:00.001-07:00</published><updated>2010-07-22T00:02:23.795-07:00</updated><title type='text'>Moving Forward</title><content type='html'>Today was pretty slow, but a lot of things are ready to move forward. I attempted to make a screencast this morning, but ran out of ram, which kept my program from executing at all, making the screencast really pointless.&amp;nbsp; I will try to get a machine with more resources tomorrow so I can finally get a screencast up and show the world what I have been up too. I started working on examples and noticed some usability issues, starting my list of things to tweak.&amp;nbsp; I worked on translating the &lt;a href="http://diveintopython.org/" linkindex="15"&gt;Dive Into Python&lt;/a&gt; code which is going really fast, I should have the first round committed by tomorrow.&amp;nbsp; Also, I got a great response from some of Greg's grad students today to help me with testing, which I really appreciate.&amp;nbsp; My planned activities got cut a little short today, because I stopped working around 3 to go to DC and meet up with my Dad, who I haven't seen in a couple of months.&amp;nbsp; I enjoyed myself a lot; it was really great catching up with him in person.&amp;nbsp; Tomorrow, I get cracking again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-38582119703566941?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/38582119703566941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/moving-forward.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/38582119703566941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/38582119703566941'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/moving-forward.html' title='Moving Forward'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7311547397336659383</id><published>2010-07-20T21:05:00.000-07:00</published><updated>2010-07-20T21:05:52.464-07:00</updated><title type='text'>Major Prototype Work is Done</title><content type='html'>I just finished all of the major features of my prototype and should have a screencast up tomorrow morning.&amp;nbsp; I've spent the last couple of days reading a lot of code and writing a bit of code, but deleting most of it as I tried to figure out a decent mechanism for getting around the limitations imposed by the subclass-superclass relationships in IDLE.&amp;nbsp; I've learned some cool tricks in the process, about what sort of things can be done with Python classes, which is a decent upside.&amp;nbsp; There are a few little tweaks that still need to be done, but as soon as I get a screencast up, I am going to contact the IDLE-dev mailing list about how this should be incorporated into IDLE and what it's role is.&amp;nbsp; I really, really need some UI test participants at this point.&amp;nbsp; Hopefully I can find some soon, or I will have to resort to wandering around the Hopkins CS department ambushing anyone who might know Python.&amp;nbsp; Please, dear readers, don't let this happen. If you are anywhere near Baltimore or know someone who is, who would be interesting in playing with my software for half an hour, send them my way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7311547397336659383?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7311547397336659383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/major-prototype-work-is-done.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7311547397336659383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7311547397336659383'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/major-prototype-work-is-done.html' title='Major Prototype Work is Done'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6294302645976830580</id><published>2010-07-20T10:51:00.001-07:00</published><updated>2010-07-20T10:52:15.430-07:00</updated><title type='text'>Happiness is a Warm Internet</title><content type='html'>I had an awesome weekend, but a frustrating couple of days since then. However, the frustrating stuff is starting to clear up. (a little)&lt;br /&gt;&lt;br /&gt;First frustration, I haven't had internet access at home for the last couple weeks and because I am subletting, I had to depend on other people to get it working again. It was supposed to be up by yesterday at 5:00 p.m., but as I right this it is still not up.&amp;nbsp; A serviceperson was just out from Verizon and got the connection working, however I need to successfully navigate their installer before I can actually use it.&amp;nbsp; The Verizon high speed internet installer is a thinly wrapped javascript-in-a-webpage application which will only run on Windows or OS X (it gave me a .exe, on Ubuntu) despite executing entirely in a web browser.&amp;nbsp; It relies on the name of the executable for verification (exploits here anyone?) and is a shining example of the importance of UI testing. Namely, large companies should really invest in it before they foist a terrible product on their customers and put a huge barrier between their users and their actual product (an internet connection).&amp;nbsp; Furthermore, they have the gall to ask if I want to install the 'In-Home Agent' to help with getting computers connected, setting up my network, and getting the motivation to slam my head through a wall at the name 'Verizon'. I have faith that the helper agent is just as worthlessly unusable as their installer.&amp;nbsp; When I decline to install the extra-helpful additional software, they hit me with poorly punctuated popup boxes/sales pitches, which is just lovely.&amp;nbsp; Finally, the program crashes, and prints out what appears to be a traceback because a JS function got called with too few arguments and a cryptic error code. Then when I close the window, it opens another popup box asking why I quit. (I choose technical issues.) Right now, my girlfriend is listening to loud fuzzy fusion jazz while the Verizon help line tries to get around their own software bugs.&amp;nbsp; Hopefully this will be done by tonight so I will not have to go for a hike every time I want to connect to the internet and can stop this wild goose chase. (We just got everything working and the Verizon Download Manager is continually crashing my girlfriend's web browser, sweet.)&lt;br /&gt;&lt;br /&gt;The other frustrations are actually related to work--that thing I'm supposed to be doing when I'm not on the phone with Verizon--but it will have to wait for another post, because that rant was enough for one post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6294302645976830580?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6294302645976830580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/happiness-is-warm-internet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6294302645976830580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6294302645976830580'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/happiness-is-warm-internet.html' title='Happiness is a Warm Internet'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6534975123847007635</id><published>2010-07-15T18:10:00.000-07:00</published><updated>2010-07-15T18:10:19.562-07:00</updated><title type='text'>I'm Silly</title><content type='html'>So... I forgot to push my work to the google code repo before I left. So now I can't do any work on the computer I brought. Oops.&lt;br /&gt;&lt;br /&gt;Good stuff come Monday, I promise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6534975123847007635?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6534975123847007635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/im-silly.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6534975123847007635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6534975123847007635'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/im-silly.html' title='I&apos;m Silly'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6836148720321716761</id><published>2010-07-15T12:27:00.001-07:00</published><updated>2010-07-15T12:27:12.997-07:00</updated><title type='text'>Fully Functioning Prototype is Working</title><content type='html'>I just finished up the major work on my revised prototype and am very happy with it.&amp;nbsp; I will spend the rest of today working on polishing it up, tweaking it, and putting in niceties such as error handling. Everything needs to be throughly cleaned as it has gotten pretty messy during my build effort, but when it is done I will get everything committed so anyone can use it.&amp;nbsp; I really need some people for user testing now. I'm going to NYC tomorrow and will spend the weekend there, so I won't be working on this project. However, after I get back, I will get a narrated screencast up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6836148720321716761?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6836148720321716761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/fully-functioning-prototype-is-working.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6836148720321716761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6836148720321716761'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/fully-functioning-prototype-is-working.html' title='Fully Functioning Prototype is Working'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2303516409553733181</id><published>2010-07-13T13:29:00.001-07:00</published><updated>2010-07-13T13:32:21.792-07:00</updated><title type='text'>Science!</title><content type='html'>I spent the day with my friends, in their p-chem research lab.&amp;nbsp; I was a little distracted (science is too awesome to completely tune it out), but I got a lot of stuff polished from yesterday and removed some of the hacks I used to get everything going. I also filled out my mid-summer evaluation for Google today. In other news, I found a copy of &lt;i&gt;Mathematical Structures for Computer Science&lt;/i&gt; for free in a hallway, which makes me really happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2303516409553733181?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2303516409553733181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/science.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2303516409553733181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2303516409553733181'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/science.html' title='Science!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3664056644104688492</id><published>2010-07-12T14:47:00.000-07:00</published><updated>2010-07-12T14:47:42.154-07:00</updated><title type='text'>Storms!</title><content type='html'>I was not as productive as I would have liked today, as we had a really bad storm and the power went out. I'm working on making a cohesive IDE with my various little prototype chunks, which should be done by the end of tomorrow.&amp;nbsp; I'm also working on converting a few &lt;a href="http://diveintopython.org/"&gt;Dive Into Python&lt;/a&gt; examples into traces, for use with UI testing, more screencasts to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3664056644104688492?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3664056644104688492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/storms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3664056644104688492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3664056644104688492'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/storms.html' title='Storms!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-4526783091477093399</id><published>2010-07-09T16:31:00.001-07:00</published><updated>2010-07-09T16:31:31.228-07:00</updated><title type='text'>I Can Parse Annotations</title><content type='html'>I wrote a function today which will strip the annotations out of a file and make a dictionary mapping the line numbers of the new file to their annotations. It is pretty fragile right now, and a little more complicated than I would like, but it works.&amp;nbsp; I only have a little more work to integrate it with the parser and have it generate annotated traces for me. Then, all that is left is to make a fully functional recording and playback environment. I'm very happy with my progress right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-4526783091477093399?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/4526783091477093399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/i-can-parse-annotations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4526783091477093399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4526783091477093399'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/i-can-parse-annotations.html' title='I Can Parse Annotations'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-763477384251694270</id><published>2010-07-08T14:16:00.002-07:00</published><updated>2010-07-08T14:17:14.476-07:00</updated><title type='text'>Grinding a Little Bit Closer</title><content type='html'>I really like JSON, however I really don't like writing it out by hand. The program I am working on uses JSON execution traces, so any new functionality I wanted to add had to be hacked into an existing trace by hand. To fix that problem, today I extended the code tracer which Geoff made and is available &lt;a href="http://runwikirun.appspot.com/"&gt;here&lt;/a&gt; so it would include global and local variables as well as the execution flow.&amp;nbsp; It's not quite done and needs some general polishing, but it was the last major piece keeping my prototypes from being fully operational, so this is quite a relief. It took me a while to figure it out, it uses some really useful features of Python which are really just thinly disguised black magic, but tomorrow it should be feasible to add annotation parsing to it, which will allow a work flow like I described in &lt;a href="http://cleichner.blogspot.com/2010/07/ui-changes.html"&gt;this&lt;/a&gt; post. With just a little bit more work, the system that undergoes user testing will have very similar features to the final product!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-763477384251694270?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/763477384251694270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/grinding-little-bit-closer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/763477384251694270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/763477384251694270'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/grinding-little-bit-closer.html' title='Grinding a Little Bit Closer'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5494634478029945212</id><published>2010-07-07T15:25:00.003-07:00</published><updated>2010-07-28T14:36:26.842-07:00</updated><title type='text'>Screencast is here</title><content type='html'>This is a recording of what my program can do so far:&lt;br /&gt;&lt;object width="500" height="306"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JT6sF8hmRGA&amp;amp;hl=en_US&amp;amp;fs=1"&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/JT6sF8hmRGA&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="306"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;I will get captions on the video as soon as I figure that out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5494634478029945212?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5494634478029945212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/screencast-is-here.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5494634478029945212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5494634478029945212'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/screencast-is-here.html' title='Screencast is here'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5058432810820400689</id><published>2010-07-07T14:16:00.002-07:00</published><updated>2010-07-07T14:46:28.320-07:00</updated><title type='text'>UI Changes</title><content type='html'>I was thinking about usability and how this projects could be improved the other day and noticed that the approach I have been taking is both too simple and two complicated. The two pane model does not associate specific annotations with the lines they are explaining well, either from the perspective of someone writing annotations or someone using them in the context of a tutorial.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Instead, annotated files could be produced using a standard IDLE editor window, generating a trace through the usual means (menu, keyboard shortcut) or any text editor with the result run through a filter style cli tool. This would open up how file generation is accomplished and make the associations between annotations and program text much more apparent and interacting with them much simpler.&lt;br /&gt;&lt;br /&gt;This also means that the playback window which a student would use can be dedicated to that task. A dedicated window opens up several possibilities.&amp;nbsp; It is now possible to implement a button interface, which would be intrusive in a non-dedicated workspace. This makes it easier for new users to quickly start working, without spending time learning the program. Finally, a dedicated playback window would allow a specialized window layout, as it is only used for playing back traces, not creating them.&lt;br /&gt;&lt;br /&gt;Take a look for yourself:&lt;br /&gt;Old Way: &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_WznSVe2VLy8/TDTt6y_0FuI/AAAAAAAAAC0/960q4mrAOrs/s1600/splitIDLE.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://2.bp.blogspot.com/_WznSVe2VLy8/TDTt6y_0FuI/AAAAAAAAAC0/960q4mrAOrs/s400/splitIDLE.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;New Way:&lt;br /&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;/div&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;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_WznSVe2VLy8/TDTuOAEJwDI/AAAAAAAAAC8/g80RL79QB80/s1600/multiIdle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://4.bp.blogspot.com/_WznSVe2VLy8/TDTuOAEJwDI/AAAAAAAAAC8/g80RL79QB80/s400/multiIdle.png" width="400" /&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/9126034661413250795-5058432810820400689?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5058432810820400689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/ui-changes.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5058432810820400689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5058432810820400689'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/ui-changes.html' title='UI Changes'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WznSVe2VLy8/TDTt6y_0FuI/AAAAAAAAAC0/960q4mrAOrs/s72-c/splitIDLE.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-4282243148081217864</id><published>2010-07-07T08:16:00.008-07:00</published><updated>2010-07-08T12:43:25.189-07:00</updated><title type='text'>Potential Use Cases</title><content type='html'>These are the use cases I would like my test participants to use when doing my UI testing.&amp;nbsp; I would love to hear any feedback. &lt;br /&gt;&lt;br /&gt;Case 1:&amp;nbsp; You are making online tutorials to teach software concepts, and would like a way for you students to get the same experience as they would sitting down with a teacher.&amp;nbsp; Open the file "example1.py" and annotate it with explanatory comments for your students, generate a trace file from your annotations.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Explanation: This is the usage pattern which accompanies transitioning a group of examples or tutorials to this system. This is the most important early case to nail. By making it very easy to use this system, it will be easier to gain acceptance among teachers.&amp;nbsp; If teachers won't use this, it doesn't really matter how useful it might be. &lt;br /&gt;&lt;br /&gt;Case 2:&amp;nbsp; You are a student who is learning to program from online tutorials and have downloaded the file "example2.jtr" as a supplement to one of the tutorials.&amp;nbsp; Using this program, open the file and as it executes, describe what the program is doing.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Explanation: This is the most common usage among students using a tutorial.&amp;nbsp; Each group of lessons created using this tool, is made by one or possibly a handful of people. However, there is no cap on the number of people who could use those lessons, so the vast majority of users will only interact with this aspect of the program. It must have no major obstacles, or it will drive people away from lessons.&lt;br /&gt;&lt;br /&gt;Case 3:&amp;nbsp; You have a previously existing program file which has been annotated for use in teaching and you wish to change it to correct an error. Edit the program and its annotations to correct your error. Then, generate a new trace file which you can distribute to your students. Run the trace to verify its correctness.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Explanation: This is the edit/eval loop of this process and it must be easy or example files will stagnate, not being kept up to date or accurate. If it is not easy to progressively tweak existing files, they will be abandoned or not created in the first place.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Case 4:&amp;nbsp; You are a teacher who has received a trace file from one of your colleagues.&amp;nbsp; When you run it, you notice a spelling error in an annotation.&amp;nbsp; Open the trace in your favorite text editor and correct the error in the trace.&lt;br /&gt;&lt;br /&gt;Explanation: This is the least common usage, and could be omitted if the testing needed to be cut.&amp;nbsp; However, it is important to verify that they intermediate data file is understandable and easily parsible by humans using common tools. So that small tweaks could be possible and the trace file could be processed by anyone.&amp;nbsp; The JSON usage will help this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-4282243148081217864?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/4282243148081217864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/potential-use-cases.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4282243148081217864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4282243148081217864'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/potential-use-cases.html' title='Potential Use Cases'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8805022782410394294</id><published>2010-07-05T12:38:00.007-07:00</published><updated>2010-07-05T13:28:40.529-07:00</updated><title type='text'>Today, in a docstring</title><content type='html'>&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from types import CodeType &lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; print CodeType.__doc__&lt;br /&gt;code(argcount, nlocals, stacksize, flags,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codestring, constants, names,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; varnames, filename, name,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; firstlineno, lnotab[, freevars[, cellvars]])&lt;br /&gt;&lt;br /&gt;Create a code object.&amp;nbsp; Not for the faint of heart.&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8805022782410394294?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8805022782410394294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/today-in-docstring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8805022782410394294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8805022782410394294'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/today-in-docstring.html' title='Today, in a docstring'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8955217695684745401</id><published>2010-07-02T19:42:00.000-07:00</published><updated>2010-07-02T19:42:46.294-07:00</updated><title type='text'>More Books, More Learning</title><content type='html'>Today I read Design Patterns a lot, and thought about object-oriented design a lot.&amp;nbsp; I also got the trace display tool mostly working with IDLE, which means everything needed for a student to use my prototype to learn things is done.&amp;nbsp; I am going to start usability testing as soon as I can get some participants.&amp;nbsp; If you are living near Baltimore, and would like to try out some new software, I would love to hear from you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8955217695684745401?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8955217695684745401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/more-books-more-learning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8955217695684745401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8955217695684745401'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/more-books-more-learning.html' title='More Books, More Learning'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7861990681218765902</id><published>2010-07-01T21:19:00.001-07:00</published><updated>2010-07-02T17:09:45.420-07:00</updated><title type='text'>So, Testing....</title><content type='html'>Today, I didn't get much code written because my books came, which was awesome, because books are awesome. So without further ado, another book review:&lt;br /&gt;&lt;br /&gt;I just finished &lt;a href="http://www.amazon.com/Rocket-Surgery-Made-Easy-Yourself/dp/0321657292/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1277953600&amp;amp;sr=1-1" linkindex="15"&gt;Rocket Surgery Made Easy&lt;/a&gt;, and if you are remotely interested in usability, get it. Stop reading and get it.&lt;br /&gt;&lt;br /&gt;If you are slightly less impulsive and want to know some more, I can oblige.&amp;nbsp; Before I got this, I knew a little about usability, but didn't really have much of a clue about how to go about testing. He delivered some very pragmatic advice, gleaned from quite a career in usability and user interface design.&amp;nbsp; I specifically liked his advice to start earlier than you think is reasonable.&amp;nbsp; This makes sense, all problems are easier to correct when no one has implemented them yet.&amp;nbsp; His advice on fixing problems through tweaking and making the smallest possible changes is also helpful. A total redesign takes a lot of work and puts you back on square one. A tweak is likely not to mess things up too much, and doesn't need a lot of resources to get done. (Also making it more likely.) Overall, his message is very pragmatic and doesn't present anything that would be impossible or particularly difficult for anyone to implement, he just offers some gentle guidance to avoid the pitfalls.&lt;br /&gt;&lt;br /&gt;I didn't have any real issues with content, however I did find the layout, font, and color choices to distracting at times, they can be very busy and make it hard to focus on the text.&amp;nbsp; This really isn't that big of an issue as the whole book feels like a website, really.&amp;nbsp; It is very lighthearted and one of the funniest design books I have ever read.&amp;nbsp; I will definitely keep it close by as I begin user testing.&lt;br /&gt;&lt;br /&gt;I will review Design Patterns as soon as I am done with it.&amp;nbsp; (It's a little more...academic, so that might a bit more time.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7861990681218765902?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7861990681218765902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/07/so-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7861990681218765902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7861990681218765902'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/07/so-testing.html' title='So, Testing....'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2078006846848272034</id><published>2010-06-30T20:12:00.002-07:00</published><updated>2010-06-30T20:14:21.563-07:00</updated><title type='text'>Engineering Students: Machines Which Turn Money Into Fun Stuff</title><content type='html'>I don't really have a lot to report on the software front. I fixed some little bugs (and one bigger one), but today was mostly a learning day for me.&amp;nbsp; I bought a copy of &lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1277953544&amp;amp;sr=8-1"&gt;Design Patterns&lt;/a&gt; and &lt;a href="http://www.amazon.com/Rocket-Surgery-Made-Easy-Yourself/dp/0321657292/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1277953600&amp;amp;sr=1-1"&gt;Rocket Surgery Made Easy&lt;/a&gt; from Amazon (the first because it was on sale and I wanted it, the second on Greg's advice). So, as soon as those come I should have some great reading to do.&amp;nbsp; I am also very excited because I bought a bunch of components to play around with for embedded projects, which are really, really cool, but a lot more expensive than Python code or the GCC. I will get a screencast of what I am working on for GSOC up asap and hope to have an integrated system out of my prototype by the time Rocket Surgery comes in the mail so I can start UI testing and revision. Also, I need to figure out how to write "Hello, World" in Morse code, or a lot more LEDs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2078006846848272034?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2078006846848272034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/engineering-students-machines-which.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2078006846848272034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2078006846848272034'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/engineering-students-machines-which.html' title='Engineering Students: Machines Which Turn Money Into Fun Stuff'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2968044178491486958</id><published>2010-06-29T21:17:00.001-07:00</published><updated>2010-06-29T21:26:26.274-07:00</updated><title type='text'>Another Little Testing Program</title><content type='html'>I made this today:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_WznSVe2VLy8/TCrHYxgNLII/AAAAAAAAACs/wYKXtUqXC6U/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="392" src="http://1.bp.blogspot.com/_WznSVe2VLy8/TCrHYxgNLII/AAAAAAAAACs/wYKXtUqXC6U/s400/Screenshot.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&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;/div&gt;It's a python version of  &lt;a href="http://runwikirun.appspot.com/"&gt;this&lt;/a&gt;, which is made by Geoff Salmon--a former grad student of &lt;a href="http://www.third-bit.com/"&gt;Greg Wilson&lt;/a&gt;--as a prototype/addition for what my GSOC project is trying to solve. Both of these programs take a JSON program execution traces and allow you to step through the code and watch it run. When coupled with my annotation facilities this will allow a full explanation of code from within IDLE. Right now the step back function is a little sporadic, but the code will be released to my repo as soon as that is fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2968044178491486958?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2968044178491486958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/more-little-testing-programs.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2968044178491486958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2968044178491486958'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/more-little-testing-programs.html' title='Another Little Testing Program'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WznSVe2VLy8/TCrHYxgNLII/AAAAAAAAACs/wYKXtUqXC6U/s72-c/Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-1314319836165731413</id><published>2010-06-29T08:27:00.004-07:00</published><updated>2010-07-01T21:20:32.995-07:00</updated><title type='text'>Truth Delivered In Comic Form</title><content type='html'>&lt;a href="http://wondermark.com/634/" linkindex="17"&gt;#634; Accomplishment measured in Decibels&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://wondermark.com/c/2010-06-29-634loud.gif" imageanchor="1" linkindex="18" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="The device was completely and utterly destroyed. The experiment was an unqualified success." border="0" height="154" src="http://wondermark.com/c/2010-06-29-634loud.gif" title="The device was completely and utterly destroyed. The experiment was an unqualified success." width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Yes.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-1314319836165731413?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/1314319836165731413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/634-accomplishment-measured-in-decibels.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1314319836165731413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1314319836165731413'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/634-accomplishment-measured-in-decibels.html' title='Truth Delivered In Comic Form'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7427691912760604994</id><published>2010-06-28T20:45:00.000-07:00</published><updated>2010-06-28T20:45:48.421-07:00</updated><title type='text'>Onward Ho!</title><content type='html'>I don't have a whole lot to show you today, but I got a lot accomplished.&amp;nbsp; My modified IDLE can now record and fold annotations and most of the irritating bugs are worked out.&amp;nbsp; I also found a better user interface model.&amp;nbsp; It is easier to code and less cumbersome to use, but is a little bit more fragile.&amp;nbsp; After that all got done, I worked through making another little test bed for the traces generated from &lt;a href="http://runwikirun.appspot.com/"&gt;this tool&lt;/a&gt;.&amp;nbsp; That should be finished up by tomorrow and I will have some screenshots and something to play with by Wednesday, when I combine this with my larger testbed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7427691912760604994?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7427691912760604994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/onward-ho.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7427691912760604994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7427691912760604994'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/onward-ho.html' title='Onward Ho!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3369252176621292082</id><published>2010-06-25T15:14:00.003-07:00</published><updated>2010-06-25T15:15:11.671-07:00</updated><title type='text'>Success</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_WznSVe2VLy8/TCUqP5Z9EPI/AAAAAAAAACc/2njcUKtzYcg/s1600/integrated.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://4.bp.blogspot.com/_WznSVe2VLy8/TCUqP5Z9EPI/AAAAAAAAACc/2njcUKtzYcg/s640/integrated.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Yep.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3369252176621292082?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3369252176621292082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/sucess.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3369252176621292082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3369252176621292082'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/sucess.html' title='Success'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WznSVe2VLy8/TCUqP5Z9EPI/AAAAAAAAACc/2njcUKtzYcg/s72-c/integrated.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3357755659640993918</id><published>2010-06-25T12:20:00.000-07:00</published><updated>2010-06-25T12:20:39.479-07:00</updated><title type='text'>The Simplest Things</title><content type='html'>The reason I was having such strange and inconsistent issues yesterday is because Text widgets have a 'name' attribute and any widgets with the same 'name' are treated identically. That's silly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3357755659640993918?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3357755659640993918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/simplest-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3357755659640993918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3357755659640993918'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/simplest-things.html' title='The Simplest Things'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7384892235643262696</id><published>2010-06-24T21:06:00.000-07:00</published><updated>2010-06-24T21:06:10.083-07:00</updated><title type='text'>Truths</title><content type='html'>Things I know about adding more Text Widgets to IDLE:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If they are both in the same frame, only one will show up. However, any insertions directed at either will show up in that one.&lt;/li&gt;&lt;li&gt;If they are in different frames two will show up, but you get to pick which one responds to commands.&lt;/li&gt;&lt;li&gt; If you try to get them all two, the program crashes, citing problems about a tag which doesn't appear to be referenced in the command assignment.&lt;/li&gt;&lt;li&gt;The previous points all apply if you try for three.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Any attempts to track what is happening in the background will lead into internally networked code, dark tcl hackage, or both.&lt;/li&gt;&lt;li&gt;The process is frustrating.&lt;/li&gt;&lt;li&gt;I have a lot more work to do tomorrow.&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/9126034661413250795-7384892235643262696?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7384892235643262696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/truths.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7384892235643262696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7384892235643262696'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/truths.html' title='Truths'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-1482383772678939656</id><published>2010-06-23T15:15:00.004-07:00</published><updated>2010-06-23T15:20:47.081-07:00</updated><title type='text'>A Tour of the Testbed</title><content type='html'>Today I worked on getting my code from the testbed where I built it into the actual IDLE code, which is frustrating. So I'll show the world what I have so far, because it is a lot more interesting (click on the pictures to enlarge them).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_WznSVe2VLy8/TCKFcopsvZI/AAAAAAAAABs/vshciR-07OE/s1600/proto1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://3.bp.blogspot.com/_WznSVe2VLy8/TCKFcopsvZI/AAAAAAAAABs/vshciR-07OE/s400/proto1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This is how it looks when it loads a file with annotations, the long names are folded. (I set the folding length short for this demonstration, so it is easy to see)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_WznSVe2VLy8/TCKFzJkmvvI/AAAAAAAAAB0/oJQta6w64Cg/s1600/proto1unfolded.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://3.bp.blogspot.com/_WznSVe2VLy8/TCKFzJkmvvI/AAAAAAAAAB0/oJQta6w64Cg/s400/proto1unfolded.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This is the same text, unfolded.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_WznSVe2VLy8/TCKGZmqXeWI/AAAAAAAAACE/vfIcET3uAGo/s1600/protorclick.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="141" src="http://2.bp.blogspot.com/_WznSVe2VLy8/TCKGZmqXeWI/AAAAAAAAACE/vfIcET3uAGo/s400/protorclick.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This is how you go about editing the annotations, mostly because it was convenient to implement this way.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_WznSVe2VLy8/TCKG6HL8LkI/AAAAAAAAACM/LFXz9Kgq2Ik/s1600/popupproto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://1.bp.blogspot.com/_WznSVe2VLy8/TCKG6HL8LkI/AAAAAAAAACM/LFXz9Kgq2Ik/s400/popupproto.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This pops up to perform the edits in.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_WznSVe2VLy8/TCKHJ16zp6I/AAAAAAAAACU/yYckuKzs5qA/s1600/insertedproto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://3.bp.blogspot.com/_WznSVe2VLy8/TCKHJ16zp6I/AAAAAAAAACU/yYckuKzs5qA/s400/insertedproto.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;And this is the result.  I think it needs some way to visually line up annotations with source code better, but this will work for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-1482383772678939656?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/1482383772678939656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/tour-of-testbed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1482383772678939656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1482383772678939656'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/tour-of-testbed.html' title='A Tour of the Testbed'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WznSVe2VLy8/TCKFcopsvZI/AAAAAAAAABs/vshciR-07OE/s72-c/proto1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-2100189489715219947</id><published>2010-06-22T20:30:00.000-07:00</published><updated>2010-06-22T20:30:32.549-07:00</updated><title type='text'>Sweeping Up the Shop</title><content type='html'>I didn't get a lot of notable stuff done today, mostly just squashed some bugs that were bothering me a lot and worked on integrating my test platform with the actual IDLE application and the tracer.&amp;nbsp; More to come as that progresses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-2100189489715219947?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/2100189489715219947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/sweeping-up-shop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2100189489715219947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/2100189489715219947'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/sweeping-up-shop.html' title='Sweeping Up the Shop'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-4204051653288522771</id><published>2010-06-21T19:33:00.001-07:00</published><updated>2010-06-22T09:34:32.741-07:00</updated><title type='text'>A Prototype is Born</title><content type='html'>I got it done!&amp;nbsp; It will open up any python file and recognize formatted annotations.&amp;nbsp; The annotations are then separated out and displayed next to the source code. Though the program is very brittle right now and has a few bugs to work out, it performs it's essential function. All it needs is to be joined with a trace generator and trace reader and it will be able to perform the essential playback duties required of it.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;If you want to take a look at it you can download the &lt;a href="http://code.google.com/p/idlecarpentry/source/checkout"&gt;repo&lt;/a&gt; and run fold_lines.py.&amp;nbsp; To fold/unfold annotations, right click on the annotation and select fold/unfold. To edit an annotation right click on the source line it annotates and select Edit Annotations. I'm not very happy with the UI, but it gets the job done for now.&amp;nbsp; Lots of polishing to go on tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-4204051653288522771?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/4204051653288522771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/prototype-is-born.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4204051653288522771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/4204051653288522771'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/prototype-is-born.html' title='A Prototype is Born'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6334627940888099466</id><published>2010-06-20T20:42:00.000-07:00</published><updated>2010-06-20T20:42:05.886-07:00</updated><title type='text'>Everything works! (As long as you don't try too much)</title><content type='html'>I got my folding and annotation mechanisms connected today and found &lt;a href="http://code.activestate.com/recipes/52266/"&gt;this&lt;/a&gt;. I'm happy someone else has tackled the synchronization problem, which had me stuck most of the weekend. I will be thoroughly mining that recipe for inspiration, as its solution is different than mine, and works much better.&amp;nbsp; It also gives me some clues for solving my other synchronization problem so if I bust my hiney tomorrow, I should be able to make this work completely very soon.&amp;nbsp; Also, I'm very sorry to my loyal readership, but screencasts aren't working very well for me.&amp;nbsp; I've tried record-my-desktop (doesn't update the entire window at once), instanbul (hangs), and xvid screen capture (crashes); if anyone has some tips for me, I would love to hear them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6334627940888099466?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6334627940888099466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/everything-works-as-long-as-you-dont.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6334627940888099466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6334627940888099466'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/everything-works-as-long-as-you-dont.html' title='Everything works! (As long as you don&apos;t try too much)'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7621606699961477474</id><published>2010-06-18T22:34:00.000-07:00</published><updated>2010-06-18T22:34:22.049-07:00</updated><title type='text'>Lots of parts, not really assembled yet.</title><content type='html'>Today, I got source code parsing working! Right now I have fully working folding and annotation for static files. They still need to get integrated into the split text widget and made to all work together in a way they could really be used. Tomorrow I will post a screencast of what I have working.&amp;nbsp; In other news, Lily dyed her hair purple today and it was really fun. Google code has the most up to date code if you want to check out my test platforms for each feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7621606699961477474?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7621606699961477474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/lots-of-parts-not-really-assembled-yet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7621606699961477474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7621606699961477474'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/lots-of-parts-not-really-assembled-yet.html' title='Lots of parts, not really assembled yet.'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6179794848172141877</id><published>2010-06-17T08:44:00.000-07:00</published><updated>2010-06-17T08:44:20.397-07:00</updated><title type='text'>Stuff is WORKING!</title><content type='html'>I got full featured folding working this morning and it just needs to be integrated into the main widget and that aspect will be done!&amp;nbsp; I am looking forward to OrderedDict becoming a permanent part of collections, as it made my job a lot easier. I still have a little bit left on the main widget, but I'm going completely stir crazy and am exploring the city after lunch and then going to a poetry reading to try to regain a bit of my sanity. I'm feeling really good about the project right now, but I really need to get out and take a break from thinking about it 24/7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6179794848172141877?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6179794848172141877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/stuff-is-working.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6179794848172141877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6179794848172141877'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/stuff-is-working.html' title='Stuff is WORKING!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3682651228253883577</id><published>2010-06-16T19:33:00.000-07:00</published><updated>2010-06-16T19:33:46.247-07:00</updated><title type='text'>Steps Forward, Steps Back</title><content type='html'>So, today I thought I would start on this before I was completely delirious to cut down on the amount of editing I would need to do after I woke up and read what I wrote.&amp;nbsp; I got my widget to behave like a Tkinter.Text and got a basic folding mechanism implemented. Also, I figured out how to implement linking the annotations with their code, but I don't have it coded yet.&amp;nbsp; Still on the plate is a weird conflict between my widget and IDLE proper as it isn't showing up yet and I don't really know why.&amp;nbsp; I'm trying to get the widget working perfectly before I dive into fixing that, as a split text widget can work perfectly fine on its own, but a perfectly integrated lousy widget is pretty worthless.&lt;br /&gt;&lt;br /&gt;I tried a new time management method today, called &lt;a href="http://www.pomodorotechnique.com/"&gt;The Pomodoro Technique&lt;/a&gt;. It worked very well for me and I got in more completely focused, uninterrupted coding time today then I ever have, and really hit a few issues hard, which makes me very happy.&amp;nbsp; Hopefully my head will adjust to work at that pace and it will get less exhausting.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;In some other news, I talked to &lt;a href="http://www.third-bit.com/"&gt;Greg&lt;/a&gt; and we discussed how I went about learning how IDLE works and teaching programming in general.&amp;nbsp; In specific, we discussed the apparent contradiction between my needing to modify IDLE and build little things with Tkinter to gain understanding of them (my friends are getting less amused by joke GUIs, my girlfriend is not) and his ability to just read through source code and understand how it works, which I covered &lt;a href="http://cleichner.blogspot.com/2010/05/on-code-reading.html"&gt;here&lt;/a&gt;.&amp;nbsp; I don't think these two approaches actually contradict.&amp;nbsp; Though I understand the base language, this is my first experience with GUI toolkits or large projects with codebases stretching back over a decade. I believe, like in math, the only way to learn any programming concept is to use it thoroughly.&amp;nbsp; Programming is playing with invisible abstractions, and using them changes the way you think.&amp;nbsp; It's not possible to understand them by just reading until those changes have already been made and you have an intuitive understanding of the abstractions.&amp;nbsp; Greg has put in his time and done some major coding, so he has a larger and more complete framework already in place to deal with these abstractions in a way that I do not.&amp;nbsp; However, the only way to get an understanding like his is to program until it is intuitive, to work until the right thing is obvious (or at least visible) and nonsense paths simply aren't thought of. So needing to do to learn isn't in contradiction with simply reading through; the former is the path to the latter.&amp;nbsp; Hopefully, what I am working on will make those first steps of doing a little less painful, and lead me to understand how this all fits together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3682651228253883577?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3682651228253883577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/steps-forward-steps-back.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3682651228253883577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3682651228253883577'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/steps-forward-steps-back.html' title='Steps Forward, Steps Back'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3324022312030095675</id><published>2010-06-15T20:30:00.002-07:00</published><updated>2010-06-16T09:45:01.340-07:00</updated><title type='text'>Chasing Rodents</title><content type='html'>I feel like today followed my plan the closest of any I have had so far. I hashed out the final details of my new split Text widget and the testbed for it.&amp;nbsp; Right now the widget behaves just like the standard Tkinter.Text, but with two of them.&amp;nbsp; Tomorrow morning I should be able to get it working completely.&amp;nbsp; Today I made a very fun test program to test out my focus follow method, which my girlfriend likes a lot.&amp;nbsp; Here is a picture:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_WznSVe2VLy8/TBhEtzlMFQI/AAAAAAAAABk/7v4WlgvxJt0/s1600/lily_proto.png" imageanchor="1" linkindex="16" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_WznSVe2VLy8/TBhEtzlMFQI/AAAAAAAAABk/7v4WlgvxJt0/s400/lily_proto.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;It says 'Hi, Lily' when it gets focus and 'Bye, Lily!' when it loses focus. You can probably guess which text the "Who's awesome?" button is responsible for.&amp;nbsp; Overall, today was quite a success and I look forward to talking to my mentor and getting the basic prototype finished tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3324022312030095675?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3324022312030095675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/chasing-rodents.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3324022312030095675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3324022312030095675'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/chasing-rodents.html' title='Chasing Rodents'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WznSVe2VLy8/TBhEtzlMFQI/AAAAAAAAABk/7v4WlgvxJt0/s72-c/lily_proto.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6884757397584125533</id><published>2010-06-14T19:59:00.000-07:00</published><updated>2010-06-14T19:59:23.015-07:00</updated><title type='text'>Today In Reading Documentation</title><content type='html'>Today was very productive! I finished figuring out the function and finer points of all the methods required to simulate the Text widget for IDLE. (Although I did spend an hour chasing down documentation and reading source code to find out what a method did, only to find it was a typo and didn't really exist.) I got a lot of work done on my test fixture (the text fixture is to make sure that Tkinter.Text and my Text are interchangeable without dealing with the complications of how they are used in IDLE.) I don't have anything working well enough to show the world yet, but it should be pretty close to what I need by the end of tomorrow.  Tkinter is a little awkward to work with--it shows its tcl roots more than I would like--but I now thoroughly understand how the code that deals with it works, so if all goes well tomorrow, I should be able to drop my replacement widget right into some slightly tweaked editor classes and be on my way!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6884757397584125533?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6884757397584125533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/today-in-reading-documentation.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6884757397584125533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6884757397584125533'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/today-in-reading-documentation.html' title='Today In Reading Documentation'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3256888913553600279</id><published>2010-06-13T07:59:00.002-07:00</published><updated>2010-06-13T08:00:37.565-07:00</updated><title type='text'>Hey Buddy, Can You Think of a Way to Sort This Really Slowly? What? Way Too Slow.</title><content type='html'>Fan of CompSci as a humor discipline? &lt;br /&gt;&lt;a href="http://kimerikas.info/post/694007706/an-in-joke-among-computer-scientists" linkindex="14"&gt;My friend gives us a shout out.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3256888913553600279?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3256888913553600279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/hey-man-can-you-think-of-way-to-sort.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3256888913553600279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3256888913553600279'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/hey-man-can-you-think-of-way-to-sort.html' title='Hey Buddy, Can You Think of a Way to Sort This Really Slowly? What? Way Too Slow.'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5723564400816614051</id><published>2010-06-11T11:25:00.001-07:00</published><updated>2010-06-11T23:21:04.808-07:00</updated><title type='text'>I Heart OOP</title><content type='html'>I'm working on the newest plan to make my prototype work and I'm very very grateful right now that python is &lt;a href="http://en.wikipedia.org/wiki/Duck_typing" linkindex="16"&gt;duck typed&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29" linkindex="17"&gt;polymorphic&lt;/a&gt; because I'm approaching this a little sideways, but I think it is the best way to do it.&amp;nbsp; Back to work now. I should have a pretty massive Google Code hg check-in by Monday, but it will probably look quiet on this front until then.&amp;nbsp; Also, if you make a cute shell script to work through a directory and pull out all of the chunks of text with a certain phrase in them, don't run the script twice without deleting the output file.&amp;nbsp; You will be really confused.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5723564400816614051?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5723564400816614051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/i-heart-oop.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5723564400816614051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5723564400816614051'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/i-heart-oop.html' title='I Heart OOP'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5710406493666632858</id><published>2010-06-09T21:30:00.003-07:00</published><updated>2010-06-15T08:03:22.714-07:00</updated><title type='text'>Book Review: Python Essential Reference</title><content type='html'>Now that I have a reasonably sized Python project, I thought it was time to pony up for some real dead-tree documentation for the language, rather than trusty /usr/share/doc/python2.6/html or the Python website.&amp;nbsp; I don't know about you, but I find it kind of difficult to use my thumb to mark a page in w3m and find it easier to flip through a real live book.&amp;nbsp; So, I would definitely recommend buying something to keep on hand if you want some help remembering all of the Python standard library and language features and how to use them.&amp;nbsp; I got &lt;a href="http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276144114&amp;amp;sr=8-1" linkindex="17"&gt;Python Essential Reference&lt;/a&gt; by David M. Beazley to fill this role for me.&lt;br /&gt;&lt;br /&gt;If you already know Python, it is a very lucid summary of the widely used aspects of the language.&amp;nbsp; For me, it clarified many details of functional Python and exactly how Python treats object orientation.&amp;nbsp; However, I did need to consult outside documentation about coroutines as I hadn't been exposed to them before.&amp;nbsp; For most uses, Python Essential Reference is a very thorough explanation of what you would need of Python.&amp;nbsp; However, I was disappointed when I needed it as a reference instead of just a language refresher, as the first two standard library modules I looked up (code and linecache) weren't featured so I needed to look them up in the Python Online Docs anyways.&amp;nbsp; Thankfully those are both very simple modules and I grokked their usage quickly, so, though their absences are marks against the book, they weren't problematic for me.&lt;br /&gt;&lt;br /&gt;If you already know one language well, you could probably learn Python from this book, but I would recommend &lt;a href="http://diveintopython.org/" linkindex="18"&gt;Dive Into Python&lt;/a&gt; instead; it is very good.&amp;nbsp; If you don't know how to program, I would recommend starting with Python, but not from this. The &lt;a href="http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_2.6" linkindex="19"&gt;Non-Programmer's Tutorial for Python 2.6&lt;/a&gt; would be a better choice. Overall, I have found Python Essential Reference to be a useful reference guide and would recommend it if you are looking for a quick, comfortable reference guide, but don't need something definitive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5710406493666632858?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5710406493666632858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/book-review-python-essential-reference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5710406493666632858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5710406493666632858'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/book-review-python-essential-reference.html' title='Book Review: Python Essential Reference'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-8687711791882706131</id><published>2010-06-08T00:07:00.006-07:00</published><updated>2010-06-15T08:08:40.716-07:00</updated><title type='text'>Finally Writing</title><content type='html'>In &lt;i&gt;Code Complete&lt;/i&gt; it says professional software developers write an average of 250 lines of code per day.&amp;nbsp; When I first read this I scoffed, thinking that was incredibly low for ostensibly talented programmers.&amp;nbsp; Today, I was envious of that average. What I hadn't taken into account in the past was the challenge of integrating new work with legacy code. Previously, I have been making code from scratch or with the original authors in person so I had a clear idea of where things needed to go from the start.&amp;nbsp; Today, I was working with code first written in 1998. I wrote five times as much code as I ended up committing, after going down one path, looking at the way the existing architecture was and realizing I was doing it a completely untenable way.&amp;nbsp; However, this led me to see how the front-end fits together in a comprehensive way for the first time, though the RPC mechanism tying it all together remains cryptic.&amp;nbsp; The feeling of working with the code, playing with it, and knowing where to look when I don't understand something instead of just bashing the codebase and reading library documentation for hours is really exciting.&amp;nbsp; Knowing how things work is more fun than recognizing names.&amp;nbsp; (I should really post a comprehensive architecture analysis when I am done with the prototype and planning the final integration, so the next people working on IDLE will have an easier time getting up to speed.) By the end of the day, I found out exactly what direction my modifications need to take to have everything working out.&amp;nbsp; I really just wanted to make a night of it, but I'm moving to Baltimore tomorrow, and packing took precedence.&amp;nbsp; For the first time on this project, I am feeling confident; I'm looking forward to really getting this working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-8687711791882706131?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/8687711791882706131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/coding-starts-at-last_08.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8687711791882706131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/8687711791882706131'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/coding-starts-at-last_08.html' title='Finally Writing'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-7831914761933989827</id><published>2010-06-03T19:39:00.000-07:00</published><updated>2010-06-03T19:39:19.986-07:00</updated><title type='text'>Someone Stole My Teeth</title><content type='html'>I didn't do much work today. Instead, I got my wisdom teeth out; since I am programming in Python, not chipmunk, I took my mentor's advise and watched bad television, drank milkshakes, and slept.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-7831914761933989827?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/7831914761933989827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/someone-stole-my-teeth.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7831914761933989827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/7831914761933989827'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/someone-stole-my-teeth.html' title='Someone Stole My Teeth'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5155334196379276439</id><published>2010-06-02T13:26:00.000-07:00</published><updated>2010-06-02T13:26:46.632-07:00</updated><title type='text'>Code is starting</title><content type='html'>I haven't checked in anything but the original IDLE code yet, but I have project hosting for the testbed I am building for various markup schemes. &lt;a href="http://code.google.com/p/idlecarpentry/" linkindex="18"&gt;Here it is.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5155334196379276439?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5155334196379276439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/code-is-starting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5155334196379276439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5155334196379276439'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/code-is-starting.html' title='Code is starting'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6984236142258395590</id><published>2010-06-01T16:53:00.000-07:00</published><updated>2010-06-01T16:53:36.434-07:00</updated><title type='text'>It's Easter!</title><content type='html'>On my way to the idlelib directory in Python 3's source code, I found an amazing Easter Egg. In Python 3, if you type 'import antigravity', it works.  The module contains an implementation of Randall Munroe's geohashing algorithm, which makes me ludicrously happy. Python is the best. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/353/" linkindex="18"&gt;If you don't get the joke.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6984236142258395590?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6984236142258395590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/its-easter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6984236142258395590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6984236142258395590'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/its-easter.html' title='It&apos;s Easter!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-1506619536278613160</id><published>2010-06-01T01:04:00.007-07:00</published><updated>2010-06-02T14:47:32.655-07:00</updated><title type='text'>My future profession.</title><content type='html'>I fixed it.&lt;br /&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://3.bp.blogspot.com/_WznSVe2VLy8/TAS_QaD7JqI/AAAAAAAAABc/mf3xexjg46Q/s1600/fixed.png" imageanchor="1" linkindex="18" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://3.bp.blogspot.com/_WznSVe2VLy8/TAS_QaD7JqI/AAAAAAAAABc/mf3xexjg46Q/s400/fixed.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://pyre.third-bit.com/blog/archives/3870.html" linkindex="19"&gt;Broken Version from Greg Wilson&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cowbirdsinlove.com/46" linkindex="20"&gt; by Cowbirds in Love&lt;/a&gt;&lt;br /&gt;Today, I worked through a Tkinter tutorial and read IDLE code so I don't really have a lot to report unless someone wants to seem some really ugly GUIs. It seems like there is a better argument for "comment style" annotations so that design should be done soon and I can start building a parser/tracer and I won't feel like I am in design limbo quite as much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-1506619536278613160?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/1506619536278613160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/06/my-future-profession.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1506619536278613160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1506619536278613160'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/06/my-future-profession.html' title='My future profession.'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WznSVe2VLy8/TAS_QaD7JqI/AAAAAAAAABc/mf3xexjg46Q/s72-c/fixed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-3196123862641388720</id><published>2010-05-28T21:58:00.003-07:00</published><updated>2010-06-15T08:11:51.316-07:00</updated><title type='text'>Annotation Design Examples</title><content type='html'>These are my designs for the command language to control the IDLE extension I'm working on.  For people who haven't been to this blog before, I'm working on a program which will, in conjunction with IDLE (the Python IDE), interactively display and explain code for use in Python tutorials. The basic idea is that it reads specially marked up files and uses the markup to explain the code as it is executed.&amp;nbsp; This way, a student can open one of the files in her IDE and work through a tutorial interactively, much like they way she would interact with a teacher. These are my designs for the command language. I would love to hear your feedback, especially if you are currently involved in teaching Python or creating online tutorials. &lt;br /&gt;&lt;br /&gt;This first one takes the same approach as pdb, embedding the control functions along with the code being explained. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/env python3&lt;br /&gt;#This uses a single library that is interspersed and controls the program&lt;br /&gt;#This could not be executed without using the library&lt;br /&gt;&lt;br /&gt;import teacher&lt;br /&gt;&lt;br /&gt;teacher.annotations_on=True&lt;br /&gt;&lt;br /&gt;teacher.explanation("This can be thought of as x becomes 5")&lt;br /&gt;x=5&lt;br /&gt;&lt;br /&gt;v=input("please enter something: ")&lt;br /&gt;&lt;br /&gt;teacher.explanation("This is a list")&lt;br /&gt;y=[4, 1, 5, 'string']&lt;br /&gt;&lt;br /&gt;teacher.explanation("This prints the string and the value of v to the screen")&lt;br /&gt;print('this is example output to the screen', v)&lt;br /&gt;&lt;br /&gt;i=0&lt;/code&gt;&lt;br /&gt;&lt;code&gt; teacher.eachtime("this is time %d through the while loop, the value of x is %d" % i, x)&lt;br /&gt;while True:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if x == 8:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      break&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     x+=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     i+=1&lt;br /&gt;&lt;br /&gt;teacher.oncall("The previously defined code is being used now")&lt;br /&gt;def function(x):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   local=x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  return x*2&lt;br /&gt;&lt;br /&gt;teacher.thistime(0, "this starts with the first item in the list and works through all of them")&lt;br /&gt;for item in y:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    print(function(item))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This program can't run without the external library, although setting the annotations_on constant to False could make it run as though all of the library functions were commented out. The next idea comes from a very different train of thought, identifying the line numbers to comment on and leaving the actual source code untouched.&lt;br /&gt;&lt;br /&gt;Here is the clean code with line numbers for reference:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;1 #!/usr/bin/env python3&lt;br /&gt;2 #This is a piece of example code to demonstrate several techniques for controlling presentation&lt;br /&gt;3 &lt;br /&gt;4 x=5&lt;br /&gt;5 v=input("please enter something: ")&lt;br /&gt;6 y=[4, 1, 5, 'string']&lt;br /&gt;7 &lt;br /&gt;8 print('this is example output to the screen', v)&lt;br /&gt;9 &lt;br /&gt;10 while True:&lt;br /&gt;11 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    if x == 8:&lt;br /&gt;12 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;         break&lt;br /&gt;13 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    else:&lt;br /&gt;14 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        x+=1&lt;br /&gt;15 &lt;br /&gt;16 def function(x):&lt;br /&gt;17 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    local=x&lt;br /&gt;18 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    return x*2&lt;br /&gt;19 &lt;br /&gt;20 for item in y:&lt;br /&gt;21 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    print(function(item))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And here is the command file:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#direct line number annotations&lt;br /&gt;&lt;br /&gt;4: This can be thought of as x becomes 5&lt;br /&gt;&lt;br /&gt;6: This is a list&lt;br /&gt;&lt;br /&gt;8: This prints the string and the value of v to the screen&lt;br /&gt;&lt;br /&gt;10 for_all: this is time %d through the while loop, the value of x is %d % i, x&lt;br /&gt;&lt;br /&gt;11: the previously defined code is being used now&lt;br /&gt;&lt;br /&gt;20 first_time: this starts with the first item in the list and works through all of them&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This idea does away with the external library or use of regular python code, instead using a custom tagging format.  For extensibility, it would be necessary to develop a way for users to define their own tags.&lt;code&gt;&lt;br /&gt;&lt;br /&gt;#!/usr/bin/env python3&lt;br /&gt;#These tags would be known by the interpretter&lt;br /&gt;&lt;br /&gt;$NOTE "This can be thought of as x becomes 5"&lt;br /&gt;x=5&lt;br /&gt;&lt;br /&gt;v=input("please enter something: ")&lt;br /&gt;&lt;br /&gt;$NOTE "This is a list"&lt;br /&gt;y=[4, 1, 5, 'string']&lt;br /&gt;&lt;br /&gt;$NOTE "This prints the string and the value of v to the screen"&lt;br /&gt;print('this is example output to the screen', v)&lt;br /&gt;&lt;br /&gt;i=0&lt;br /&gt;$FORALL "this is time %d through the while loop, the value of x is %d" % i, x&lt;br /&gt;while True:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   if x == 8:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       break&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        x+=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       i+=1&lt;br /&gt;&lt;br /&gt;$ONCALL "The previously defined code is being used now"&lt;br /&gt;def function(x):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   local=x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   return x*2&lt;br /&gt;&lt;br /&gt;$FIRST_TIME "this starts with the first item in the list and works through all of them"&lt;br /&gt;for item in y:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  print(function(item))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This version tries to clean out some of the extra code, moving it instead to an external file for definitions. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/env python3&lt;br /&gt;# tags defined in an external file&lt;br /&gt;&lt;br /&gt;$variable_assignment &lt;br /&gt;x=5&lt;br /&gt;&lt;br /&gt;v=input("please enter something: ")&lt;br /&gt;&lt;br /&gt;$first_list &lt;br /&gt;y=[4, 1, 5, 'string']&lt;br /&gt;&lt;br /&gt;$print &lt;br /&gt;print('this is example output to the screen', v)&lt;br /&gt;&lt;br /&gt;i=0&lt;br /&gt;$while_loop(scope='all') &lt;br /&gt;while True:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    if x == 8:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      break&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       x+=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       i+=1&lt;br /&gt;&lt;br /&gt;$on_call(scope='call')&lt;br /&gt;def function(x):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   local=x&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    return x*2&lt;br /&gt;&lt;br /&gt;$first_time(scope='first')&lt;br /&gt;for item in y:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    print(function(item))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Example external file:&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;variable_assignment: "This can be thought of as x becomes 5"&lt;br /&gt;first_list: "This is a list" &lt;br /&gt;print: "This prints the string and the value of v to the screen"&lt;br /&gt;while_loop: "this is time %d through the while loop, the value of x is %d" % i, x&lt;br /&gt;on_call: "The previously defined code is being used now"&lt;br /&gt;first_time:  "this starts with the first item in the list and works through all of them"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;These are representative of the four main approaches I have thought of. However, there are a lot of possible variations among them. For instance, the symbols at the start of the tags could be replaced by something like #&amp;gt; which is notable, but would register as a comment in normal usage.&amp;nbsp; An external tag file could contain custom python functions, perhaps using a custom library like the first example. I would love to hear what sort of language you would like to use, if I completely missed something, or hit something on the head.&amp;nbsp; I tried to demonstrate how some basic annotations would work, but I glossed over advanced features so if there is something you would like, please leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-3196123862641388720?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/3196123862641388720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/05/these-are-my-designs-for-command.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3196123862641388720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/3196123862641388720'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/05/these-are-my-designs-for-command.html' title='Annotation Design Examples'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-1366023058124261865</id><published>2010-05-28T02:44:00.001-07:00</published><updated>2010-06-15T08:20:06.500-07:00</updated><title type='text'>What I Thought I Would Be Doing Today, and Where I Am Now</title><content type='html'>Today I thought I would be reading a few papers and working through several annotation examples to be posted up here. I also thought I had a generally stable view of what sort of thing the software I am making would be required to do.&amp;nbsp; I was wrong.&lt;br /&gt;&lt;br /&gt;I've been looking into scriptable debuggers, trying to glean some insights into the markup I am working on by seeing how they solved the problems I am facing. I did gain insights, however, by thinking of what I am working on in the light of debugging, the problem-space has opened up tremendously regarding expectations for the language.&amp;nbsp; Thankfully, what I am working on is not as daunting as scripting a debugger--this project makes explanations, not experiments.&amp;nbsp; The requirements driving its relation to external code are essentially the same though: it needs to observe the state of the program, monitor its control path, and control the execution so looking at debuggers (and how they are automated) is a great starting point.&lt;br /&gt;&lt;br /&gt;I found a paper called "The design and implementation of a dataflow language for scriptable debugging" by Guillaume Marceau et al., which was very insightful into the core problems of debuggers and scripting them. Although I don't think its functional approach is appropriate for the application I am working on, it brought to light some truth about the problems I am approaching.&amp;nbsp; First, the authors noticed that this class of problems is inherently event-driven; the scripts themselves are "passive agents". Second, the language must have broad capabilities (or be extensible) as it is not possible to predict how the user will want to use the language. In this sense, a scripting language for a debugger (or a control language for a teaching tool) can be very close to a general purpose language.&lt;br /&gt;&lt;br /&gt;This led me back to something I was previously thinking: why can't I just embed Python as my language? It's a great scripting language.&amp;nbsp; This train of thought was bolstered by my research into GDB's scripting capabilities. It uses Python! I'm not sure how much of what Python does will need to be adapted (or if it just needs a custom package) for my usage, but this is certainly a promising trail.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Tomorrow, I'm going to track down the web of citations surrounding the Marceau et al. paper and the debuggers they directly reference and see where they went with those ideas, figure out exactly what in depth scripting of gdb with Python looks like, and crack into pdb's source to look at how event-driven Python looks. I'm really excited to see where this is going, but it really drove my plans off the rails regarding what I expected the markup to look like and how I expected it to work, but it opens up some really interesting ideas and approaches. Barring any major revelations tomorrow, I will have markup idea examples up for feedback from the potential users by the end of the night.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-1366023058124261865?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/1366023058124261865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/05/what-i-thought-i-would-be-doing-today.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1366023058124261865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1366023058124261865'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/05/what-i-thought-i-would-be-doing-today.html' title='What I Thought I Would Be Doing Today, and Where I Am Now'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-5372737310393598580</id><published>2010-05-27T04:09:00.005-07:00</published><updated>2010-06-15T08:25:21.860-07:00</updated><title type='text'>On Code Reading</title><content type='html'>Today I had my first conversation with my mentor for GSOC, &lt;a href="http://www.third-bit.com/" linkindex="17"&gt;Greg Wilson&lt;/a&gt;, and at the end of it I asked for some advice about reading code, as I feel it is a major weakness of mine, having a hard time figuring out code written for a problem I have not already solved.&amp;nbsp; He had a very insightful response, bringing up how much computer education is about writing and reading is mostly ignored. (Imagine an English education like that!) He then referenced the book &lt;a href="http://www.amazon.com/Code-Reading-Open-Source-Perspective/dp/0201799405/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1274956562&amp;amp;sr=8-1" linkindex="18"&gt;Code Reading&lt;/a&gt; (really the only one on the subject) and a &lt;a href="http://third-bit.com/pages/reviewing-markdown.html#0098" linkindex="19"&gt;walkthrough of his process&lt;/a&gt; which he wrote on the subject for a software engineering class he previously taught. &lt;br /&gt;&lt;br /&gt;Before I get into what I took from that piece, I think a brief overview of my previous code reading process is in order. I basically tried to read it like a book (or a piece of code I had previously written) starting at the top and reading it through to the bottom, with a shell and a browser open, to read external documentation and work out how any unfamiliar libraries or built-in functions operate. After I feel like I have a reasonable idea of the architecture, depending on how well I need to understand it, I will run it through a debugger to see the control flow in depth and see how it works.&amp;nbsp; With this comes tinkering with the code to get a feel for how it is interconnected.&lt;br /&gt;&lt;br /&gt;Greg's approach starts the same as my old one (by reading any explanations at the top), however, I was surprised that he didn't even look at any code until he found the start point of the program, in this case the if __name__ == '__main__' idiom,&amp;nbsp; and following the actual execution from there, diving in and seeking to understand the code, only as it was naturally used.&amp;nbsp; This makes a lot of sense as code can be quite meaningless without context and it is very easy to lose track of the important details, trying to keep everything straight.&amp;nbsp; This way the details sort themselves out a little better.&amp;nbsp; Another surprise for me was his willingness to contact the original authors of the code to ask for clarification, which makes perfect sense--they know it the best--but for most of the code I am reading, the original authors seem very far away and not welcoming to questions about how their software works, so I never thought to contact them for clarifications.&amp;nbsp; This seems like a foolish assumption to write out, so it is good to see an established CS professor contacting the original authors, making it seem less intimidating to me.&lt;br /&gt;&lt;br /&gt;I was happy to find another person sharing my problems and surprised how long it took Greg to read the 1800 lines of code (3 hours and 20 minutes) and the number of breaks he took in the process. I have always tried to take it all in one big gulp and been disappointed to feel somewhat lost after my first look over, now I know this is a normal state of affairs.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Though I was surprised by many of the things I hadn't thought of, I was relieved to see I was on the right path.&amp;nbsp; We both searched for unknown functions and variables as they were used and referred to their definitions frequently while reading.&amp;nbsp; I was also happy to see I wasn't the only one with a tendency to rewrite the code in my head to help it fit with my programming quirks.&lt;br /&gt;&lt;br /&gt;Although it is probably not practical for larger projects, I am going to adopt Greg's practice of physically printing out the code in question, making it easy to reference and annotate, as I come across more unknown code in the future.&amp;nbsp; If anyone has tips about reading code, I would love to hear them in the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-5372737310393598580?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/5372737310393598580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/05/on-code-reading.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5372737310393598580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/5372737310393598580'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/05/on-code-reading.html' title='On Code Reading'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-1341219148410823784</id><published>2010-04-26T22:18:00.000-07:00</published><updated>2010-04-26T22:18:23.549-07:00</updated><title type='text'>Thanks Google!</title><content type='html'>I got into the GSoC and am incredibly excited and more than a little bit nervous.&amp;nbsp; This is the largest project I have ever attempted and I really want to see it become a reality.&amp;nbsp; I am really thankful for the help&amp;nbsp;&lt;a href="http://www.third-bit.com/" linkindex="225"&gt;Greg Wilson&lt;/a&gt; has given me so far and look forward to having him as my mentor this summer. Many more updates to come. &lt;a class="cssButton" href="javascript:void(0)" id="publishButton" onclick="if (this.className.indexOf(&amp;quot;ubtn-disabled&amp;quot;) == -1) {var e = document['postingForm'].publish;(e.length) ? e[0].click() : e.click(); if (window.event) window.event.cancelBubble = true; return false;}" target=""&gt;&lt;div class="cssButtonOuter"&gt;&lt;div class="cssButtonMiddle"&gt;&lt;div class="cssButtonInner"&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-1341219148410823784?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/1341219148410823784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/04/thanks-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1341219148410823784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/1341219148410823784'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/04/thanks-google.html' title='Thanks Google!'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9126034661413250795.post-6854596303181037673</id><published>2010-04-08T22:32:00.000-07:00</published><updated>2010-04-08T22:32:33.965-07:00</updated><title type='text'>Playing It Safe Will Always End In Disaster</title><content type='html'>This is the future home of my summer project documentation.  Right now, I'm applying for the &lt;a href="http://code.google.com/soc/" linkindex="8"&gt;Google Summer of Code&lt;/a&gt; to help extend IDLE,  the Python IDE, so it can be more interactive in conjunction with online (and offline) instruction.  I have some interesting things nearing completion and looking for a home; so, no matter what this space is used for, things are coming.&lt;br /&gt;&lt;br /&gt;Now, that I have that out of the way, a little bit about myself.  Sometimes, I make calculators out of dominoes and succeed. Sometimes I make hovercrafts out of old fans and fail. Miserably. Sometimes, I just destroy everything I can get my hands on for the sake of making something more. I am occasionally known to break household objects with little provocation and less of an excuse.  I find thought-terminating cliches terrifying and linked structures fascinating. I believe that in a world of people hiding behind their fear, risk-takers will always have a place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9126034661413250795-6854596303181037673?l=cleichner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cleichner.blogspot.com/feeds/6854596303181037673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cleichner.blogspot.com/2010/04/playing-it-safe-will-always-end-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6854596303181037673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9126034661413250795/posts/default/6854596303181037673'/><link rel='alternate' type='text/html' href='http://cleichner.blogspot.com/2010/04/playing-it-safe-will-always-end-in.html' title='Playing It Safe Will Always End In Disaster'/><author><name>Chas Leichner</name><uri>http://www.blogger.com/profile/16370389564527792231</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_WznSVe2VLy8/S76sFEYdODI/AAAAAAAAAAM/ws6vgczKlWI/S220/verySeriousIceCream.jpg'/></author><thr:total>0</thr:total></entry></feed>
