<?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-2643923222133320297</id><updated>2012-02-16T06:12:40.916-08:00</updated><category term='book reviews'/><category term='ps3'/><category term='rip'/><category term='dvd ripping'/><category term='x264'/><category term='playstation 3'/><title type='text'>David Ron</title><subtitle type='html'>David's Blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.davidron.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default?start-index=101&amp;max-results=100'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>185</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3418112353719539568</id><published>2012-01-27T10:38:00.000-08:00</published><updated>2012-01-27T10:48:00.015-08:00</updated><title type='text'>Introducing QUnitTestDriver</title><content type='html'>For the past month or so, I've been working on a library to make JavaScript testing integrate better with my company's Java build (junit/maven/jenkins).&amp;nbsp; All of the options we've tried have been failures because they either don't work well with jQuery or they require an external browser instance which makes them slow and buggy (Selenium, HTMLUnit end-to-end, js-test-driver).&lt;br&gt;&lt;br&gt;What we really wanted to do was run very fast (sub-100ms) unit tests written in the language of our production code.&amp;nbsp; This lead us to qUnit.&amp;nbsp; The problem with qUnit is that there wasn't a convenient way to exercise those tests inside of our normal build easily.&amp;nbsp; Sure, there is the &lt;a href="http://code.google.com/p/qunit-test-runner/"&gt;qunit-test-runner&lt;/a&gt; project, but that doesn't come along with any IDE integration.&amp;nbsp; It requires the tests be run from within an Ant script.&lt;br&gt;&lt;br&gt;Enter &lt;a href="http://code.google.com/p/qunit-test-driver/"&gt;QUnitTestDriver&lt;/a&gt;.&amp;nbsp; It's a simple library allows you to create a plain old jUnit test in any JVM language you choose that points to a plain old qUnit test suite HTML file.&amp;nbsp; Under the hood, the library lights up a jetty server to avoid "file://" URLs, and uses HTMLUnit to parse the output of the qUnit test results.&amp;nbsp; Here's an example Java class that would run an entire qUnit test suite that could contain many tests inside of many different files:&lt;br&gt;&lt;br&gt;&lt;div class="code"&gt;public class QUnitTest {    @Test public void testPage(){        QUnitTestDriver.run("path/to/qUnitTest.html");    }}&lt;/div&gt;That's it.  I hope you find this useful!&lt;br&gt;&lt;br&gt;You can find out more about the project on it's new &lt;a href="http://code.google.com/p/qunit-test-driver/wiki/Usage"&gt;Google Code Site Here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3418112353719539568?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3418112353719539568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2012/01/introducing-qunittestdriver.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3418112353719539568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3418112353719539568'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2012/01/introducing-qunittestdriver.html' title='Introducing QUnitTestDriver'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1264961374745462169</id><published>2012-01-09T15:40:00.000-08:00</published><updated>2012-01-09T15:40:02.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: jQuery Mobile</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AmCtS8BI7Y8/Twt5krE2HhI/AAAAAAAABOI/lcfHRGO6WOk/s1600/large-1449306683.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-AmCtS8BI7Y8/Twt5krE2HhI/AAAAAAAABOI/lcfHRGO6WOk/s320/large-1449306683.jpg" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Done.&amp;nbsp; A quick read.&amp;nbsp; I think that the jQuery Mobile API, unlike the regular jQuery API, is more "invasive".&amp;nbsp; jQuery Mobile really alters the way we are supposed to work with HTML - adding enhancements to HTML5 to better support mobile browsers.&amp;nbsp; I think this is a good thing.&amp;nbsp; The jQuery Mobile team really did a good job adapting HTML/CSS and Javascript to smaller devices.&amp;nbsp; One warning: this book is very Apple-heavy.&amp;nbsp; This really isn't a big deal, but I think that as this new book gains mass acceptance, Android will be the predominant platform developers will want to target first.&amp;nbsp; These platforms are, for the most part, interchangeable, but the screenshots are a little deceiving to those who aren't really familiar with the IOS browser which appears to bleed navigation into the page a little more, something I don't really like.&lt;br /&gt;&lt;br /&gt;I thin that anybody who is writing mobile applications really should START here and move slowly to the world of apps.&amp;nbsp; This is a great books for developers familiar with jQuery and Javascript, but those uninitiated to web development might need a little introduction to Javascript and HTML first.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1264961374745462169?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1264961374745462169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2012/01/book-review-jquery-mobile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1264961374745462169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1264961374745462169'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2012/01/book-review-jquery-mobile.html' title='Book Review: jQuery Mobile'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-AmCtS8BI7Y8/Twt5krE2HhI/AAAAAAAABOI/lcfHRGO6WOk/s72-c/large-1449306683.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1515628524930046448</id><published>2012-01-05T14:49:00.000-08:00</published><updated>2012-01-05T14:49:47.531-08:00</updated><title type='text'>Universal WR7: Say Goodbye To Your Stack Of Remotes</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-RrnhAQ-Yrow/TwYhwnn1V_I/AAAAAAAABNo/NaDg-MLwE94/s1600/remotes.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-RrnhAQ-Yrow/TwYhwnn1V_I/AAAAAAAABNo/NaDg-MLwE94/s320/remotes.jpeg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you're like me, you (at least used to) have a stack of remotes you juggle to watch TV, adjust the volume, switch between devices, etc.&amp;nbsp; Even if your cable company provided or your television came with a "universal" remote, those "universal" remotes only work with a approved pre-programmed list of manufacturers and models.&amp;nbsp; Roku?&amp;nbsp; Nope.&amp;nbsp; Asus O!Play?&amp;nbsp; Nope.&amp;nbsp; Cheap Chinese HDMI switch?&amp;nbsp; Yeah right!&lt;br /&gt;&lt;br /&gt;Enter the Universal WR7.&amp;nbsp; There are a lot of remotes that bill themselves as "Universal" especially a few knockoffs from RCA and brand-X comapanies on one end of the spectrum that are no better than the remote that comes with most cable company's boxes or perhaps your TV.&amp;nbsp; On the other end of the spectrum are Harmony remotes that require a Windows or Mac and hundreds of megabytes of software updates to program and cost hundreds of dollars.&amp;nbsp; What everybody should buy is a remote from Universal.&amp;nbsp; Unfortunately, all remotes say "Universal" so you have to look for this logo:&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/-Y0QkGUpneiw/TwYloYkgh5I/AAAAAAAABN0/7a4Nb_WK-5Q/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Y0QkGUpneiw/TwYloYkgh5I/AAAAAAAABN0/7a4Nb_WK-5Q/s1600/Screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;How is this different?&amp;nbsp; Well, this company makes remote controls that cost anywhere from $10 to over $500.&amp;nbsp; All of them, as far as I know, are "learning remotes".&amp;nbsp; &lt;b&gt;This means that the remote has an Infrared Receiver capable of listening to another remote control and mimicking back the signal&lt;/b&gt;.&amp;nbsp; This is huge because the remote can learn to behave like nearly anything that sprays Infrared which not only includes anything you point at your TV to do something, but also all kind of other home automation products.&lt;br /&gt;&lt;br /&gt;Is it complicated to set up?&amp;nbsp; Not for me, but I have a degree in Computer Science.&amp;nbsp; Here's how you do it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Let's say we want to program the "1" button on the "dvd" setting.&amp;nbsp; Press and hold [dvd] and [ent] at the same time.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Then press [1].&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Then point your DVD remote at this remote and press [1] on the old remote.&amp;nbsp; The new remote flashes three times and your done.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;You can continue to program more buttons by repeating steps 2 and 3.&lt;/li&gt;&lt;li&gt;Press and hold [dvd] and [ent] at the same time to save.&lt;/li&gt;&lt;/ol&gt;Pretty easy!&lt;br /&gt; &lt;br /&gt;This remote also supports:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Punch through.&amp;nbsp; Any button can be programmed to use the button from a different mode.&amp;nbsp; For example, you can say that volume controls always go to the receiver or TV regardless of what mode you are on.&amp;nbsp; Channel changes can always go to the cable box even if you are in DVD mode.&lt;/li&gt;&lt;li&gt;Macro Mode.&amp;nbsp; You can program a button to send more than one signal to more than one device.&amp;nbsp; Example: Turning everything on and off with one button.&lt;/li&gt;&lt;li&gt;Old fashioned setup like a normal universal remote (the old three digit code and a giant table in the back of the manual or "press up over and over until the device turns off to search for the right code").&lt;/li&gt;&lt;/ul&gt;So, for those of you who have been wishing for a $200+ Logitec Harmony, run down to target and grab the Universal WR7 for $30, or save yourself the trouble of a complicated setup and get one of the &lt;a href="http://www.amazon.com/s/ref=bl_sr_electronics?_encoding=UTF8&amp;amp;node=172282&amp;amp;field-brandtextbin=Universal#/ref=nb_sb_ss_i_1_11?url=search-alias%3Delectronics&amp;amp;field-keywords=urc+universal+remotes&amp;amp;sprefix=urc+univers&amp;amp;rh=n%3A172282%2Ck%3Aurc+universal+remotes"&gt;more expensive URC remotes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1515628524930046448?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1515628524930046448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2012/01/universal-wr7-say-goodbye-to-your-stack.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1515628524930046448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1515628524930046448'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2012/01/universal-wr7-say-goodbye-to-your-stack.html' title='Universal WR7: Say Goodbye To Your Stack Of Remotes'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-RrnhAQ-Yrow/TwYhwnn1V_I/AAAAAAAABNo/NaDg-MLwE94/s72-c/remotes.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8971051291238340985</id><published>2012-01-05T14:00:00.000-08:00</published><updated>2012-01-05T14:00:02.623-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: History Of Western Philosophy</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1guBSHvlb9o/Tv51KHLd-QI/AAAAAAAABDs/DDjagkFNhi8/s1600/History+Of+Western+Philosophy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-1guBSHvlb9o/Tv51KHLd-QI/AAAAAAAABDs/DDjagkFNhi8/s320/History+Of+Western+Philosophy.jpg" width="204" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;One of a few passions I discovered back in college was law and philosophy.&amp;nbsp; Lucky me, I actually enjoy reading about this area quite a bit (as you can see if you look back on my previous books reviews).&amp;nbsp; This is considered by many to be the seminal work on the history of the study of philosophy, so when I discovered it, I &lt;i&gt;had&lt;/i&gt; to read it.&amp;nbsp; I have been listening to this in the form of an audio-book for a few months between podcasts.&amp;nbsp; The book is divided up into three main sections (unfortunately called "books").&lt;br /&gt;&lt;br /&gt;The first 1/3 is a methodological summary of the most important ancient philosophers leading up to, including, and just after Socrates, Plato, and Aristotle.&amp;nbsp; Most of these ancients set the groundwork for science and philosophy, but have for the most part been thrown out by scientific method and the separation of church and state.&amp;nbsp; The only real quantitative remaining ancient philosophy appears to be the foundation of western religion.&lt;br /&gt;&lt;br /&gt;The second 1/3 is a horrible slog through the beginning of Judaism right through the Roman empire into the 1400's.&amp;nbsp; This entire period seems to be a scientific &lt;i&gt;stupification&lt;/i&gt; of man-kind through the oppression of religious leaders.&amp;nbsp; But, just as I prepared to give up on the book, it started to get interesting in the final chapter: The Eclipse Of the Papacy.&lt;br /&gt;&lt;br /&gt;The final 1/3 starts off with a brilliant summarization of The Renaissance - Man kind finally started thinking! The final third was the only section worth reading if you aren't actually a student of Philosophy.&amp;nbsp; Much of what was part of cultural understanding was extincted once religion was set aside for logical and empirical development of thought.&lt;br /&gt;&lt;br /&gt;As this final 1/3 of the book neared an end, Russel's own philosophy began to come into focus as he spent increasing time refuting and agreeing with the principals of his predecessors.&lt;br /&gt;&lt;br /&gt;History of Western Philosophy was written by one of the great authors on the subject from the point of something rare: both an expert and a talented communicator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8971051291238340985?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8971051291238340985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2012/01/book-review-history-of-western.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8971051291238340985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8971051291238340985'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2012/01/book-review-history-of-western.html' title='Book Review: History Of Western Philosophy'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1guBSHvlb9o/Tv51KHLd-QI/AAAAAAAABDs/DDjagkFNhi8/s72-c/History+Of+Western+Philosophy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7266465657704079069</id><published>2011-12-28T12:34:00.000-08:00</published><updated>2011-12-28T12:34:57.376-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Dual Book Review: Desgning Interfaces &amp; Don't Make Me Think</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GGVEJC3gDic/Tvt797m79LI/AAAAAAAABCI/yekinA5-ioI/s1600/cover.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-GGVEJC3gDic/Tvt797m79LI/AAAAAAAABCI/yekinA5-ioI/s1600/cover.gif" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-H2PzO2IgQLY/Tvt7-JTESzI/AAAAAAAABCQ/W8TaY8lV5e0/s1600/think_book.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-H2PzO2IgQLY/Tvt7-JTESzI/AAAAAAAABCQ/W8TaY8lV5e0/s320/think_book.png" width="239" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I read these two books over the Christmas Vacation weekend.&amp;nbsp; Both were great, but serve different purposes.&amp;nbsp; &lt;i&gt;Don't Make Me Think&lt;/i&gt; is teaches us how to discover what works best in the applications we are building while &lt;i&gt;Designing Interfaces&lt;/i&gt; is just a catalog of best practices.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Designing Interfaces&lt;/i&gt; is great for developers who have to work in teams and would like a higher abstraction language to use commonly when discussing interface design patterns that might be used to solve specific design problems.&amp;nbsp; This is as important as software engineering design patterns (flyweight, singleton) that can encapsulate a lot of information into a single word to make design decisions easier to make for a team.&lt;br /&gt;&lt;br /&gt;Once those decisions have been made, then the practices outlined in &lt;i&gt;Don't Make Me Think &lt;/i&gt;let us determine whether our assumptions about the users is correct.&lt;i&gt;&amp;nbsp; Designing Interfaces&lt;/i&gt; is best skimmed through once and kept as a desk reference and &lt;i&gt;Don't Make Me Think&lt;/i&gt; is best read cover-to-cover a few times over for content.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7266465657704079069?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7266465657704079069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/dual-book-review-desgning-interfaces.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7266465657704079069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7266465657704079069'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/dual-book-review-desgning-interfaces.html' title='Dual Book Review: Desgning Interfaces &amp; Don&apos;t Make Me Think'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-GGVEJC3gDic/Tvt797m79LI/AAAAAAAABCI/yekinA5-ioI/s72-c/cover.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8172687477027910519</id><published>2011-12-06T12:31:00.000-08:00</published><updated>2011-12-06T12:31:48.052-08:00</updated><title type='text'>Permanently Enable Compiz in XFCE</title><content type='html'>XFCE is a great little window manage for Linux.&amp;nbsp; It's now my default window manager in Ubuntu, but I love my Compiz window manager, so I had to do the following to enable Compiz when I log in:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click Start &amp;gt; Preferences &amp;gt; Xfce 4 Settings Manager&lt;/li&gt;&lt;li&gt;Click on the Application Autostart tab.&lt;/li&gt;&lt;li&gt;Click the Add button.&lt;/li&gt;&lt;li&gt;Enter Compiz for the name, Compiz Startup, for the description, and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;compiz –replace ccp&lt;/span&gt; in the Command section.&lt;/li&gt;&lt;li&gt;Click OK.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;a href="http://www.ghacks.net/2010/07/11/run-compiz-with-xfce4/"&gt;Source &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8172687477027910519?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8172687477027910519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/permanently-enable-compiz-in-xfce.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8172687477027910519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8172687477027910519'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/permanently-enable-compiz-in-xfce.html' title='Permanently Enable Compiz in XFCE'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6446512072793384670</id><published>2011-12-06T10:05:00.000-08:00</published><updated>2011-12-06T10:05:06.513-08:00</updated><title type='text'>Stabilize Your Wi-Fi With CyanogenMod 7</title><content type='html'>I recently switched from a custom ROM for my phone to CyanogenMod 7.1.  Skype seemed to start dropping the connection every time the screen turned off.  It turns out that this is a FEATURE of CyanogenMod - to turn the Wi-fi off when the screen turns off to conserve battery life.  Here's how to disable this "feature":&lt;br /&gt;&lt;ul&gt;&lt;li&gt;From the Home Screen, press menu-&amp;gt;settings-&amp;gt; Wireless &amp;amp; Networks -&amp;gt; Wi-Fi Settings&lt;/li&gt;&lt;li&gt;Press menu-&amp;gt;advanced&lt;/li&gt;&lt;li&gt;Change "Wifi Sleep Policy" to "Never".&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;a href="http://forum.cyanogenmod.com/topic/11987-data-cutting-in-and-out-on-wi-fi/"&gt;Source&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6446512072793384670?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6446512072793384670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/stabilize-your-wi-fi-with-cyanogenmod-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6446512072793384670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6446512072793384670'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/stabilize-your-wi-fi-with-cyanogenmod-7.html' title='Stabilize Your Wi-Fi With CyanogenMod 7'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8275495712365078562</id><published>2011-12-04T15:30:00.000-08:00</published><updated>2011-12-28T12:04:59.596-08:00</updated><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iyxgLfHidP8/TtwAscNIExI/AAAAAAAABA8/vMWjzbQJPY0/s1600/Apress.MooTools.Essentials.The.Official.MooTools.Reference.For.JavaScript.And.AJAX.Development.Sep.2008.ISBN.1430209836.pdf.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-iyxgLfHidP8/TtwAscNIExI/AAAAAAAABA8/vMWjzbQJPY0/s320/Apress.MooTools.Essentials.The.Official.MooTools.Reference.For.JavaScript.And.AJAX.Development.Sep.2008.ISBN.1430209836.pdf.jpg" width="258" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This is a really well-written book!&amp;nbsp; Here's the thing: I'm STILL a jQuery guy.&amp;nbsp; MooTools is just too heavy for me - especially how prototypical inheritance is hijacked to support a fake class-based inheritance scheme.&amp;nbsp; Here are some criticisms:&lt;br /&gt;&lt;br /&gt;On page 72 and on page 145, we see that sometimes MooTools uses the "new" keyword and sometimes it doesn't.&amp;nbsp; I prefer to avoid "new" in JavaScript whenever possible because function constructors are far more elegant and allow the object to be self contained.&amp;nbsp; I've &lt;a href="http://blog.davidron.com/2011/04/javascript-object-creation-with.html"&gt;written about this&lt;/a&gt; before.&lt;br /&gt;&lt;br /&gt;We're introduced to the Hash object on page 81.&amp;nbsp; But, Javascript already has a hash, it's called Object!&amp;nbsp; Why not just extend object rather that create a new competing datatype?&lt;br /&gt;&lt;br /&gt;If you read this book, please if you pass over everything else, check out page 152.&amp;nbsp; The creation of a simple mixin pattern is extremely useful and is a very generic solution to lots of different problems.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8275495712365078562?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8275495712365078562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/this-is-really-well-written-book-heres.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8275495712365078562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8275495712365078562'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/this-is-really-well-written-book-heres.html' title=''/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-iyxgLfHidP8/TtwAscNIExI/AAAAAAAABA8/vMWjzbQJPY0/s72-c/Apress.MooTools.Essentials.The.Official.MooTools.Reference.For.JavaScript.And.AJAX.Development.Sep.2008.ISBN.1430209836.pdf.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8621766363816668290</id><published>2011-12-04T15:15:00.000-08:00</published><updated>2011-12-04T15:15:36.547-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Pragmatic GWT</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oX3o4gF-0P4/Ttv-1i_nCOI/AAAAAAAABA0/naB3GZhucXQ/s1600/ebgwt.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-oX3o4gF-0P4/Ttv-1i_nCOI/AAAAAAAABA0/naB3GZhucXQ/s320/ebgwt.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I recently read &lt;a href="http://pragprog.com/book/ebgwt/google-web-toolkit"&gt;Google Web Toolkit from The Pragmatic Bookshelf&lt;/a&gt;.&amp;nbsp; This book is less than 80 pages, so it was a fast read - and probably a great introduction to GWT for those that haven't used it before.&amp;nbsp; But, after reading this, I again wasn't convinced that a GWT project is the right way to develop Javascript code.&amp;nbsp; The library just pulls programmers too far away from the language they are actually coding in (which is the point).&amp;nbsp; Like Rail Scaffolding, it's great when you have a simple project and you are just starting, but integrating with Javascript libraries and maintaining a mixed environment just seems like it wouldn't be worth the effort.&lt;br /&gt;&lt;br /&gt;Page 32 has a description of "panels", a very Java-centric layout mechanism.&amp;nbsp; CSS is a FAR superior layout mechanism, so I'd probably just avoid Panels for plain old DIVs with classes.&lt;br /&gt;&lt;br /&gt;Page 38 describes GWT RPC.&amp;nbsp; Open transmission standards should trump performance or developer usefulness as a default.&amp;nbsp; I'll likely avoid this if I choose to write a GWT app.&lt;br /&gt;&lt;br /&gt;Chapter 7 - JSNI.&amp;nbsp; GWT is supposed to make my code easier and cleaner than Javascript.&amp;nbsp; This is a very complex way to drop out of GWT and into JS.&amp;nbsp;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oX3o4gF-0P4/Ttv-1i_nCOI/AAAAAAAABA0/naB3GZhucXQ/s1600/ebgwt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Chapter 9 - I know that this is kind of an old book at this point, and many of the missing Java features have been added.&amp;nbsp; This chapter can be avoided.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8621766363816668290?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8621766363816668290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/book-review-pragmatic-gwt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8621766363816668290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8621766363816668290'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/book-review-pragmatic-gwt.html' title='Book Review: Pragmatic GWT'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-oX3o4gF-0P4/Ttv-1i_nCOI/AAAAAAAABA0/naB3GZhucXQ/s72-c/ebgwt.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8752857665133457013</id><published>2011-12-04T13:37:00.000-08:00</published><updated>2011-12-04T13:42:06.679-08:00</updated><title type='text'>Quick And Dirty Encrypted Backups Under Any Operating System</title><content type='html'>This strategy will create one big .tar.gz file wrapped in an aes256     security blanket.&amp;nbsp; You'll need tar, gzip, and Gnu Privacy Gard     installed to do this.&amp;nbsp; Make sure that you are backing up to a file     system that can support large files such as EXT3 or NTFS because     that one file could get pretty big.&lt;br&gt;     &lt;br&gt;     Assuming I am going to backup &lt;tt&gt;/media/hd1&lt;/tt&gt; to &lt;tt&gt;/media/hd2/backup.tar.gz.gpg&lt;/tt&gt;&lt;br&gt;     &lt;tt&gt;$ cd /media&lt;/tt&gt;&lt;br&gt;     &lt;tt&gt;$ tar czvpf - hd1/ | gpg --symmetric --cipher-algo aes256 -o       /media/HD2/backup.tar.gz.gpg&lt;/tt&gt;&lt;br&gt;     Enter password twice, and then wait a few hours.&lt;br&gt;     Put a copy of this note in the form of a text file on the drive as     well so you can remember how to unpack it.&lt;br&gt;     &lt;br&gt;     To Restore from &lt;tt&gt;/media/path/to/backup/backup.tar.gz.gpg&lt;/tt&gt; to     &lt;tt&gt;/media/blankDrive/&lt;/tt&gt; :&lt;br&gt;     &lt;tt&gt;$ cd /media/blankDrive&lt;br&gt;       $ gpg -d /media/path/to/backup/backup.tar.gz.gpg | tar xzvf -&lt;/tt&gt;&lt;br&gt;     Enter password twice, wait a few hours.&amp;nbsp; Note, the result here will     be &lt;tt&gt;/media/blankDrive/hd1/...&amp;nbsp;&lt;/tt&gt; so, you might want to move     everything to .. when you are done or alter the command slightly to     accommodate.&lt;br&gt;     &lt;small&gt;&lt;br&gt;       &lt;a         href="http://savvyadmin.com/symmetric-key-encryption-with-gnupg/"&gt;Source.&lt;/a&gt;&lt;/small&gt;&lt;br&gt;   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8752857665133457013?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8752857665133457013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/quick-and-dirty-encrypted-backups-under.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8752857665133457013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8752857665133457013'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/quick-and-dirty-encrypted-backups-under.html' title='Quick And Dirty Encrypted Backups Under Any Operating System'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3620841565191989014</id><published>2011-12-02T11:18:00.000-08:00</published><updated>2011-12-02T11:20:58.468-08:00</updated><title type='text'>How to move the window border controls in Xubuntu to the right.</title><content type='html'>The default window manager in Xubuntu places the window border     controls (minimize, maximize, close) on the wrong (left) side of the     window.&amp;nbsp; Here's how to put them back to the right side.&lt;br&gt;     &lt;ul&gt;       &lt;li&gt;&lt;tt&gt;$ sudo apt-get install&lt;/tt&gt;&lt;tt&gt; gconf-editor&lt;/tt&gt; &lt;/li&gt;       &lt;li&gt;&lt;tt&gt;$ gconf-editor&lt;/tt&gt;&lt;/li&gt;       &lt;li&gt;         navigate to &lt;i&gt;apps&lt;/i&gt; -&amp;gt; &lt;i&gt;metacity&lt;/i&gt; -&amp;gt; &lt;i&gt;general&lt;/i&gt;       &lt;/li&gt;       &lt;li&gt;         button_layout should be &lt;tt&gt;menu:maximize,minimize,close&lt;/tt&gt;&lt;/li&gt;     &lt;/ul&gt;     &lt;tt&gt;&lt;br&gt;     &lt;/tt&gt;&lt;a href="http://www.howtogeek.com/howto/13535/move-window-buttons-back-to-the-right-in-ubuntu-10.04/"&gt;source&lt;/a&gt;&lt;br&gt;   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3620841565191989014?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3620841565191989014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/12/how-to-move-window-border-controls-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3620841565191989014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3620841565191989014'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/12/how-to-move-window-border-controls-in.html' title='How to move the window border controls in Xubuntu to the right.'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2957131544373136097</id><published>2011-11-06T17:22:00.000-08:00</published><updated>2011-11-06T17:22:14.854-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Test Driven Javascript</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8WDQ6_picQk/TrcwRz-BBEI/AAAAAAAAA9s/GjE2tbaARgM/s1600/ttdjs-233x300.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-8WDQ6_picQk/TrcwRz-BBEI/AAAAAAAAA9s/GjE2tbaARgM/s1600/ttdjs-233x300.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There aren't that many really good Javascript books out there.&amp;nbsp; Most of them cater to the "I want to validate a form" crowd of the last decade.&amp;nbsp; This is one of the few that really take us through the right way to develop client-side code.&amp;nbsp; I place this book among the top 3 books on Javascript I've read, and I've read quite a few.&lt;br /&gt;&lt;br /&gt;Some novel sections to pay special attention to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Page 327 has a description of mocks and small integration tests.&amp;nbsp; It's important because there are some special circumstances you need to be aware of when you are testing code that is so heavily dependent on such an ugly DOM.&lt;/li&gt;&lt;li&gt;The dependency management scheme described in the later 1/2 of the book is quite simple, but it works.&lt;/li&gt;&lt;li&gt;The end of the chapter on Node.js describes a pattern called "promises" that is a nice OO callback mechanism.&lt;/li&gt;&lt;/ol&gt;Unless you are new to Javascript and you want to get to know the DOM API a little better, skip the entire section on Browser detection.&amp;nbsp; There is no reason why we should be writing Javascript browser detection when we can use extremely powerful utilities such as YepNope or just code to cross-browser APIs such as jQuery.&lt;br /&gt;&lt;br /&gt;If you plan on writing any Javascript code and you follow modern program practices (TDD, Proper Modularization, etc) then you have got to read this book.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2957131544373136097?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2957131544373136097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/11/book-review-test-driven-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2957131544373136097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2957131544373136097'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/11/book-review-test-driven-javascript.html' title='Book Review: Test Driven Javascript'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8WDQ6_picQk/TrcwRz-BBEI/AAAAAAAAA9s/GjE2tbaARgM/s72-c/ttdjs-233x300.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6879369511032540000</id><published>2011-11-04T11:31:00.000-07:00</published><updated>2011-11-04T11:31:21.765-07:00</updated><title type='text'>Dell e6400 and e6500 users: you may be a victim of Throttlegate!</title><content type='html'>Apparently, these Dell E6400 &amp;amp; D6500 laptops come with some aggressive &lt;a href="http://www.zdnet.com/blog/gadgetreviews/dells-throttlegate-is-a-defect-turning-a-22ghz-cpu-into-100mhz/9799"&gt;CPU throttling problems&lt;/a&gt;.&amp;nbsp; If you &lt;a href="https://www.google.com/search?client=ubuntu&amp;amp;channel=fs&amp;amp;q=throttlegate&amp;amp;ie=utf-8&amp;amp;oe=utf-8"&gt;google for "Throttlegate"&lt;/a&gt;, you get links to stories about our laptops slowing themselves to as low as 100Mhz for various reasons usually related to overheating.&amp;nbsp; I was hit by it, and I wanted to share with you how I fixed the problem.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Confirming The Problem:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In Gnome, right click on the panel and add the CPU Frequency Scaling Monitor.&amp;nbsp; &lt;br /&gt;  &lt;/li&gt;&lt;li&gt;When you are doing something CPU intensive like encoding video (especially after 10+ minutes straight), notice how the CPU scales to the lowest frequency (800Mhz) and the system feels unresponsive.&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Solving The Problem:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blow out the dust from the heat vent.&amp;nbsp; This is a temporary fix.&amp;nbsp; It didn't work for me.&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;Upgrade to the latest BIOS.&amp;nbsp; I blogged about how to do that in Linux &lt;a href="http://blog.davidron.com/2010/08/easiest-way-to-update-dell-bios-within.html"&gt;here&lt;/a&gt;.&amp;nbsp; And you can find the latest BIOS &lt;a href="http://support.us.dell.com/support/downloads/download.aspx?c=us&amp;amp;l=en&amp;amp;s=gen&amp;amp;releaseid=R315495&amp;amp;formatcnt=0&amp;amp;libid=0&amp;amp;typeid=-1&amp;amp;dateid=-1&amp;amp;formatid=-1&amp;amp;source=-1&amp;amp;fileid=477307"&gt;here&lt;/a&gt;.&amp;nbsp; This also didn't work for me, but the Dell has released nearly a dozen BIOS updates this year and many of them come with performance fixes.&amp;nbsp; Might as well.&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;MOST IMPORTANTLY (because this solved the problem for me) make sure you are using a 6.7amp power supply and not the older 4.62amp power supply that came with the older D6xxx model laptops.&amp;nbsp; The supply works, but it doesn't supply enough power to run at full speed with the fans at full speed apparently. (So I'm guessing that it clocks the CPU and other components down to cool the system).&amp;nbsp; &lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;If you are using one of the newer Dell E6X00 models, make sure your power adapter is &lt;b&gt;glowing blue&lt;/b&gt; where it plugs into your laptop.&amp;nbsp; If it doesn't glow, you probably have the 4.62amp power supply and your machine is probably running REALLY SLOW when you most need for it to scale to full speed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6879369511032540000?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6879369511032540000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/11/dell-e6400-and-e6500-users-you-may-be.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6879369511032540000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6879369511032540000'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/11/dell-e6400-and-e6500-users-you-may-be.html' title='Dell e6400 and e6500 users: you may be a victim of Throttlegate!'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3033424713463004294</id><published>2011-11-03T12:45:00.000-07:00</published><updated>2011-11-03T16:42:09.642-07:00</updated><title type='text'>Sharing In Google Reader Is Dead.  Now What?</title><content type='html'>Google Plus is for social media updates.&amp;nbsp; Google Reader is for reading news.&amp;nbsp; Until Google Reader has all of the updates from Google Plus, I don't want people to share all their favorite news in a social media service most generally used for original content.&amp;nbsp; The killer feature in the recently removed Google Reader sharing features for me was the ability to easily add articles to a feed of stories that I find important that other people can later read in Google Reader.&amp;nbsp; It was a way for people to kind of crowd-source the news that their friends found most important.&lt;br /&gt;&lt;br /&gt;Here's how I created an RSS news feed of my favorite articles that my friends could subscribe to in Google Reader:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Set up a &lt;a href="http://delicious.com/"&gt;Delicious&lt;/a&gt; account.&lt;/li&gt;&lt;li&gt;Add &lt;a href="javascript:location.href='https://api.del.icio.us/v1/posts/add?description='+encodeURIComponent(document.title)+'&amp;amp;tags=News'+'&amp;amp;url='+window.location.href;"&gt;this bookmarklet&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Point users to your new link feed: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://delicious.com/v2/rss/username/news&lt;/span&gt; (replace username with your delicious username)&lt;/li&gt;&lt;li&gt;Optionally, you can create a quick share-to in Google Reader:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;In Google Reader, press the gear in the upper-right corner and click Google Reader Settings.&lt;/li&gt;&lt;li&gt;Click The Send To Tab.&lt;/li&gt;&lt;li&gt;Click "Create A Custom Link"&lt;/li&gt;&lt;li&gt;Name = &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Important News (Delicious)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;URL = &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;https://api.del.icio.us/v1/posts/add?description=${title}&amp;amp;tags=News&amp;amp;url=${url}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Icon = &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://delicious.com/favicon.ico&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Optionally, you can create a share-to on Android using the app &lt;a href="https://market.android.com/details?id=com.deliciousdroid&amp;amp;feature=search_result"&gt;DeliciousDroid&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;My news feed is now available &lt;a href="http://delicious.com/v2/rss/davidron/news"&gt;here&lt;/a&gt;, the most recent stories are available on the right side of this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3033424713463004294?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3033424713463004294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/11/sharing-in-google-reader-is-dead-now.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3033424713463004294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3033424713463004294'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/11/sharing-in-google-reader-is-dead-now.html' title='Sharing In Google Reader Is Dead.  Now What?'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-768517241106931046</id><published>2011-11-03T12:27:00.000-07:00</published><updated>2011-11-03T12:27:13.136-07:00</updated><title type='text'>Nook Color w/ CyanogenMod: “Your device is not compatible with this item”</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-YwF-NWlcYHw/TrLqyeKM6HI/AAAAAAAAA80/HNZg1Fa-aAY/s1600/photo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-YwF-NWlcYHw/TrLqyeKM6HI/AAAAAAAAA80/HNZg1Fa-aAY/s320/photo.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The problem is that Cyanogen ships with a display ppi set to 161, but that is an extremely non-standard ppi.&amp;nbsp;&amp;nbsp; With the most recent Android Market release (I suppose to support Android 4), the market has become more picky about what screen resolutions are supported by which apps.&amp;nbsp; Here's how to easily fix this problem:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install &lt;a href="https://market.android.com/details?id=lv.n3o.lcddensity&amp;amp;hl=en"&gt;LCDDensity&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Run The App&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Reboot Method=Killall&lt;/li&gt;&lt;li&gt;Set the density to 160.&lt;/li&gt;&lt;li&gt;Tap Apply/Restart&lt;/li&gt;&lt;li&gt;Wait to restart. &lt;/li&gt;&lt;/ol&gt;&lt;li&gt; From the home screen, Click &lt;b&gt;Menu&lt;/b&gt;-&amp;gt;“&lt;strong&gt;Manage Applications&lt;/strong&gt;” . &amp;nbsp;&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;Market&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style="font-weight: normal;"&gt;C&lt;/strong&gt;lick “&lt;strong&gt;Clear Data&lt;/strong&gt;“.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&lt;a href="http://myraroldan.com/wp/2011/09/your-device-is-not-compatible-with-this-item-annoying-android-market-message/"&gt;Source&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-768517241106931046?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/768517241106931046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/11/nook-color-w-cyanogenmod-your-device-is.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/768517241106931046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/768517241106931046'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/11/nook-color-w-cyanogenmod-your-device-is.html' title='Nook Color w/ CyanogenMod: “Your device is not compatible with this item”'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-YwF-NWlcYHw/TrLqyeKM6HI/AAAAAAAAA80/HNZg1Fa-aAY/s72-c/photo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1516540115212424909</id><published>2011-10-02T17:25:00.000-07:00</published><updated>2011-10-02T17:29:03.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Javascript The Definitive Guide 6th Edition</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Fo2nVQBOWBc/Toj-wcI0tWI/AAAAAAAAAzY/IwGlR9-x12Q/s1600/lrg.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-Fo2nVQBOWBc/Toj-wcI0tWI/AAAAAAAAAzY/IwGlR9-x12Q/s320/lrg.jpg" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It's very important that you read the 6th edition, because this is the one that covers the latest updates to HTML, including HTML5 / ECMAScript 5.&amp;nbsp; That being said, this book is awesome.&amp;nbsp; The first eleven chapters are on the core language features.&amp;nbsp; The twelfth chapter covers server-side Javascript (Node.js), and the remaining chapters 13-22 cover Javascript in the browser.&lt;br /&gt;&lt;br /&gt;Too many books teach the DOM-specific extensions to the language as if the DOM is part of Javascript.&amp;nbsp; It's not.&amp;nbsp; The DOM is an ugly hack of a global object with a terribly inconsistent API scarred during the first browser wars of the early 1990's.&amp;nbsp; Libraries such as jQuery exist today specifically to keep that nonsense out of our client-side code, so teaching DOM manipulation is a waste that only serves to frustrate Javascript initiates.&amp;nbsp; Worse, it gives Javascript a bad name.&lt;br /&gt;&lt;br /&gt;This book purposefully separates the language from the browser APIs, which is brilliant.&amp;nbsp; I recommend that developers new to Javascript read chapters 1-11 and switch to a book on jQuery or just skip to the chapter on jQuery in this book.&amp;nbsp; It doesn't give the best treatment to jQuery I've ever read, but it's a good enough sample to get most users started.&lt;br /&gt;&lt;br /&gt;Reading this book is also useful because it truly is definitive. It makes a great desk reference for those who aren't fond of Googling for StackOverflow or w3schools syntax examples.&amp;nbsp; So, if one uses this book as an introduction, it the knowledge of the book itself will carry over into day-to-day work.&lt;br /&gt;&lt;br /&gt;This goes on my list of most important Javascript books (along with Test Driven Javascript which I am still reading, Javascript Patterns, and Javascript: The Good Parts).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1516540115212424909?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1516540115212424909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/10/book-review-javascript-definitive-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1516540115212424909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1516540115212424909'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/10/book-review-javascript-definitive-guide.html' title='Book Review: Javascript The Definitive Guide 6th Edition'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Fo2nVQBOWBc/Toj-wcI0tWI/AAAAAAAAAzY/IwGlR9-x12Q/s72-c/lrg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5494055355457068072</id><published>2011-09-29T12:36:00.000-07:00</published><updated>2011-09-29T12:36:40.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Test Driven Development: By Example</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ilVRLf-W-34/ToTICpEiBUI/AAAAAAAAAzA/IpXyU35yHp4/s1600/387190.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-ilVRLf-W-34/ToTICpEiBUI/AAAAAAAAAzA/IpXyU35yHp4/s320/387190.jpg" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;Admittedly, I'm kind of getting sick of TDD books.&amp;nbsp; I should have started with this one.&amp;nbsp; While there are a ton of really good books on TDD, and this is one of the best, I was bored because I read so many others first.&amp;nbsp; What's right: Kent Beck uses extremely simple examples that rely on arithmetic instead of complex domains that take as much time to explain as the process the book is about.&amp;nbsp; I think I would recommend this to people who really want to get started with TDD, or to people who may THINK they are doing TDD but aren't sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5494055355457068072?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5494055355457068072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/book-review-test-driven-development-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5494055355457068072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5494055355457068072'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/book-review-test-driven-development-by.html' title='Book Review: Test Driven Development: By Example'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ilVRLf-W-34/ToTICpEiBUI/AAAAAAAAAzA/IpXyU35yHp4/s72-c/387190.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-773763200399748481</id><published>2011-09-29T12:30:00.000-07:00</published><updated>2011-09-29T12:30:30.101-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Revew: Google Apps Hacks</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-yUtqfQVurko/ToTGsOVc2lI/AAAAAAAAAy8/SVIvF9iR-YY/s1600/google-apps-hacks-cover.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-yUtqfQVurko/ToTGsOVc2lI/AAAAAAAAAy8/SVIvF9iR-YY/s320/google-apps-hacks-cover.jpg" width="263" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This book is really for computer users with a novice/intermediate skill level.&amp;nbsp; It basically re-prints the help documentation found in gmail, google docs, etc.&amp;nbsp; I was hoping for a programmers API for "hacking" or programming.&amp;nbsp; I found myself skimming instead of reading.&amp;nbsp; Frustrated, I feel like the term "hacking" has been subsumed into a synonym for "doing stuff".&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-773763200399748481?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/773763200399748481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/book-revew-google-apps-hacks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/773763200399748481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/773763200399748481'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/book-revew-google-apps-hacks.html' title='Book Revew: Google Apps Hacks'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-yUtqfQVurko/ToTGsOVc2lI/AAAAAAAAAy8/SVIvF9iR-YY/s72-c/google-apps-hacks-cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5426659431453419919</id><published>2011-09-28T10:41:00.001-07:00</published><updated>2011-10-01T16:52:44.636-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: On China (Henry Kissinger)</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/-iDb2-dkEQps/ToNcWWxVrLI/AAAAAAAAAy4/tjBPWFzG5wk/s1600/Kissinger-cover1-705027.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5657467096046873778" src="http://4.bp.blogspot.com/-iDb2-dkEQps/ToNcWWxVrLI/AAAAAAAAAy4/tjBPWFzG5wk/s320/Kissinger-cover1-705027.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wow.&amp;nbsp; I got kind of sick reading books about Software Engineering, so I invested in a different passion of mine: philosophy.&amp;nbsp;     This is a deliberate Political Science book that examines China     through the eyes of the United States' foremost expert on China:     Henry Kissinger.&amp;nbsp; The first 3rd is a geopolitical history of china     that covers several thousand years.&amp;nbsp; The second third of the book     covers everything up until the middle of the cold war.&amp;nbsp; The final     third of the book covers the end of the cold war up until today.&amp;nbsp;     So, it kind of zooms into today.&amp;nbsp; A cone history that every American     should read.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;My takeaway is an optimistic opinion that guns and bombs are not the     future of geopolitical negotiations - money is.&amp;nbsp; As level-headed     governments seek to entangle each other's currencies, we will see     stability come through monetary pressure instead of physical force.&amp;nbsp;     This is great for many reasons, but mostly because the current     superpowers of the world don't seem interested in invading each     other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5426659431453419919?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5426659431453419919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/book-review-on-china-henry-kissinger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5426659431453419919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5426659431453419919'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/book-review-on-china-henry-kissinger.html' title='Book Review: On China (Henry Kissinger)'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-iDb2-dkEQps/ToNcWWxVrLI/AAAAAAAAAy4/tjBPWFzG5wk/s72-c/Kissinger-cover1-705027.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2054271187491798919</id><published>2011-09-28T10:33:00.000-07:00</published><updated>2011-09-28T10:42:31.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Groovy For Domain Specific Languages</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/-1OTJ0JFwK_E/ToNbLnv1YQI/AAAAAAAAAyw/3luqNsirhkI/s1600/6903_Groovy%2Bfor%2BDomain-Specific%2BLanguages_Front%2Bcover-706230.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5657465812113776898" src="http://1.bp.blogspot.com/-1OTJ0JFwK_E/ToNbLnv1YQI/AAAAAAAAAyw/3luqNsirhkI/s320/6903_Groovy%2Bfor%2BDomain-Specific%2BLanguages_Front%2Bcover-706230.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a Java programmer, this book serves two purposes.&amp;nbsp; First, it is a     nice introduction to Groovy (which I didn't personally need).&amp;nbsp;     Second, it uses DSLs as a way to teach advanced components of the     language.&amp;nbsp; I would have prefered more time spent on writing tests in     a DSL instead of coming up with a fake Twitter API, but the book did     close off with advanced TDD/BDD DSL languages, which seems to make     sense because they are sufficiently advanced that you'd need some     DSL introduction before getting to real-world use-cases.&amp;nbsp; Good book!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2054271187491798919?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2054271187491798919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/book-review-groovy-for-domain-specific.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2054271187491798919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2054271187491798919'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/book-review-groovy-for-domain-specific.html' title='Book Review: Groovy For Domain Specific Languages'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1OTJ0JFwK_E/ToNbLnv1YQI/AAAAAAAAAyw/3luqNsirhkI/s72-c/6903_Groovy%2Bfor%2BDomain-Specific%2BLanguages_Front%2Bcover-706230.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5580620808165711255</id><published>2011-09-28T09:22:00.000-07:00</published><updated>2011-09-28T09:26:47.317-07:00</updated><title type='text'>Why I Think Spontaneous Phone Calls Are Rude</title><content type='html'>In response to &lt;a href="http://www.freakonomics.com/2011/09/28/nation-of-texters-a-third-of-people-prefer-a-text-to-talking/"&gt;this       article in the Freakonomics blog&lt;/a&gt; about 1/3 of people     preferring texting to talking, I posted the following comment.&amp;nbsp; I     thought it useful for others to understand why I am in that texting     group.&lt;br&gt;     &lt;br&gt;     Talking on the telephone has two inherent problems.&amp;nbsp; The first is     that there is a certain etiquette that requires extra unnecessary     information such as a greeting, "How are you doing" and a closing,     "Talk to you later, goodbye" which increases the cost of the     communication.&amp;nbsp; But much worse, the medium is synchronous.&amp;nbsp; In order     to place a call, you have to dial the number, and wait for the other     person to connect (or else possibly wait for an extensive voicemail     greeting).&amp;nbsp; The recipient of the call is completely interrupted from     whatever task he/she was doing, which may be annoying and will cause     mental context switch which comes with some cost.&lt;br&gt;     &lt;br&gt;     Texting is light-weight asynchronous operation. The interruption is     momentary (a brief sound or a buzz) and the recipient can choose to     immediately respond or finish up a thought or conversation with     somebody else before responding.&amp;nbsp; The recipient can glance down at     the phone in the middle of a meeting and understand the context of     the message and is given the opportunity to choose if this new     interruption is worth switching to or not.&lt;br&gt;     &lt;br&gt;     Some younger people (including me, at 31) feel like placing an     unplanned phone call to somebody is extremely rude because it     implies that whatever the caller wants to talk about is more     important than whatever the recipient was already doing.&amp;nbsp; The caller     interrupts the recipient saying, "stop everything and listen to me     for a minute or 30".&amp;nbsp; Indeed, when somebody calls me without warning     while I am focusing on something important (such as an emergency at     work), I feel anxiety about the potential wasted time talking about     something less immediately important.&amp;nbsp; Many friends prefer I start a     conversation via text (email, sms, IM) before elevating that     conversation to a voice call to increase the bandwidth of the     communication once both parties have agreed that the need exists.&lt;br&gt;     &lt;br&gt;   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5580620808165711255?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5580620808165711255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/why-i-think-spontaneous-phone-calls-are.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5580620808165711255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5580620808165711255'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/why-i-think-spontaneous-phone-calls-are.html' title='Why I Think Spontaneous Phone Calls Are Rude'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1523513892374206461</id><published>2011-09-13T11:24:00.001-07:00</published><updated>2011-09-13T11:24:03.610-07:00</updated><title type='text'>Two Ways To Quickly Create Evernote Notes From Your Browser</title><content type='html'>Want to be able to create a note in Evernote from ANYWHERE, as fast     as you can type an address into a URL bar?&amp;nbsp; Here's the fastest way I     could find to do it.&amp;nbsp; There are two ways, each with a few     trade-offs.&amp;nbsp; All i had to do was use &lt;a href="http://blog.davidron.com/2011/09/custom-url-shortner-for-your-site.html"&gt;my       little URL shortening service&lt;/a&gt; to link to one of these two     URLs:&lt;br&gt;     &lt;br&gt;     &lt;b&gt;Linking Directly To Gmail&lt;/b&gt;&lt;br&gt; &lt;a class="moz-txt-link-freetext" href="https://mail.google.com/mail/?view=cm&amp;amp;fs=1&amp;amp;tf=1&amp;amp;to=yourNoteAddress@m.evernote.com"&gt;https://mail.google.com/mail/?view=cm&amp;amp;fs=1&amp;amp;tf=1&amp;amp;to=yourNoteAddress@m.evernote.com&lt;/a&gt;&lt;br&gt;     You can find yourNoteAddress by clicking &lt;a href="http://blog.evernote.com/2010/03/16/emailing-into-evernote-just-got-better/"&gt;here&lt;/a&gt;.&lt;br&gt;     &lt;br&gt;     Benefits: Gmail automatically saves the message as a draft while you     are working on it.&amp;nbsp; This way, if you are mid-way through a note and     the computer dies or you accidentally close the window, most of your     work is preserved.&amp;nbsp; &lt;br&gt;     &lt;br&gt;     Disadvantages: You would be making your secret Evernote address     available to the public.&amp;nbsp; Anybody can push notes into your Evernote     notebook.&amp;nbsp; You need to remember how to use the subject line to add     @notebooks and #tags if you need that functionality.&lt;br&gt;     &lt;br&gt;     &lt;b&gt;Linking Directly To The Mobile App&lt;/b&gt;:&lt;br&gt;     &lt;a class="moz-txt-link-freetext" href="http://www.evernote.com/mobile/CreateNote.action"&gt;http://www.evernote.com/mobile/CreateNote.action&lt;/a&gt;&lt;br&gt;     &lt;br&gt;     Benefits: It's easier to set up, it's more secure because you have     to log in to evernote before you can create a new note.&lt;br&gt;     &lt;br&gt;     Disadvantages: it doesn't save your work while you are creating this     note, so if you close the window or have a bad connection when you     click "save", you may lose your work.&lt;br&gt;   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1523513892374206461?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1523513892374206461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/two-ways-to-quickly-create-evernote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1523513892374206461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1523513892374206461'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/two-ways-to-quickly-create-evernote.html' title='Two Ways To Quickly Create Evernote Notes From Your Browser'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5527390868544688921</id><published>2011-09-13T11:22:00.000-07:00</published><updated>2011-09-13T11:25:23.035-07:00</updated><title type='text'>Custom URL Shortner for your site.</title><content type='html'>Every want to run your own tinyurl.com-like url shortner where you controlled EVERYTHING (including the URL itself.?&amp;nbsp; We are going to create a new domain and forward that domain to the location to a script you own somewhere on the Internet.&amp;nbsp; It could theoretically be a blogger page if you'd like.&amp;nbsp; The final location of the shortner will be accessed like this:&lt;br /&gt;&lt;br /&gt;http://x.com/blog (if you owned x.com) which can redirect to any place on the internet.&amp;nbsp; You should be able to replace blog with the keys to all of the URLs you have set up in the script.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create The Script On Your Web Server&lt;/b&gt;&lt;br /&gt;On a server located on a different domain from the one you just registered. Put the following in the root of your web server, and call it something like &lt;tt&gt;u.html&lt;/tt&gt;.&amp;nbsp; The name and location is unimportant.&amp;nbsp; You can verify that it works by surfing directly to it.&amp;nbsp; It should show you a list of your links and allow you to click on them to go to them.&lt;br /&gt;&lt;div class='code'&gt;&amp;lt;html&gt;&amp;lt;script language="javascript"&gt;function getParameterByName(name){  name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");  var regexS = "[\\?&amp;]" + name + "=([^&amp;#]*)";  var regex = new RegExp(regexS);  var results = regex.exec(window.location.href);  if(results == null)    return "";  else    return decodeURIComponent(results[1].replace(/\+/g, " "));}var key =getParameterByName('q');var urls={    '/delicious':'http://www.delicious.com/davidron',    '':"http://blog.davidron.com",    '/':"http://blog.davidron.com"}if(urls[key]){    window.location.href=urls[key]}else{    document.write("'"+key+"' not found :(");}for(urlKey in urls){ document.write("&amp;lt;br /&gt;&amp;lt;a href=?q="+urlKey+"&gt;"+urlKey+"&amp;lt;/a&gt;"); }&amp;lt;/script&gt;&amp;lt;/html&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Point A Custom Domain Name At Your Script&lt;/b&gt;&lt;br /&gt;Create a subdomain on your web site that redirects to the url of the script you created.&amp;nbsp; In godaddy, I did the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Log into godaddy.com&lt;/li&gt;&lt;li&gt;click domains-&amp;gt;domain management&lt;/li&gt;&lt;li&gt;Click the name of your domain&lt;/li&gt;&lt;li&gt;At the bottom of the domain information section, click "manage".&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;Forward it to &lt;tt&gt;http://thelocationofyourscript.com/u.html?q=&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Make sure you add the &lt;tt&gt;?q=&lt;/tt&gt; part to the end, that's the part that translates your shortened URL to a query in your script.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;br /&gt;Add More URLs&lt;/b&gt;&lt;br /&gt;To add more URLs, just edit the script and edit the block of code that looks like this.&amp;nbsp; Each custom URL has to start with a "/".&amp;nbsp; The two special cases are when the user goes to your shortner without specifying a custom part to the URL, those are the last two in the block (the empty and the plain / cases):&lt;br /&gt;&lt;tt&gt;var urls={&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '/delicious':'http://www.delicious.com/davidron',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '':"http://blog.davidron.com",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '/':"http://blog.davidron.com"&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5527390868544688921?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5527390868544688921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/09/custom-url-shortner-for-your-site.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5527390868544688921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5527390868544688921'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/09/custom-url-shortner-for-your-site.html' title='Custom URL Shortner for your site.'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1334938134914626403</id><published>2011-08-08T16:11:00.000-07:00</published><updated>2011-08-08T16:26:26.745-07:00</updated><title type='text'>Stop Sites From Stealing The Focus in Firefox</title><content type='html'>Sick of sites that steal the cursor (known as the focus) while you are typing?  Here's how to stop that in Firefox.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Surf to about:config&lt;/li&gt;&lt;li&gt;right-click and select "new-&amp;gt;string"&lt;/li&gt;&lt;/ul&gt;If you want to disable ALL attempts to autofocus: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Preference Name: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;capability.policy.default.HTMLInputElement.focus&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Value:&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;noAccess&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: inherit;"&gt;If you want to restrict certain annoying sites only, follow the same steps where &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;name&lt;/span&gt;=&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;value&lt;/span&gt; for the following three pair:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;capability.policy.policynames&lt;/span&gt;=&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;nofocus&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;capability.policy.nofocus.sites&lt;/span&gt;=&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.google.com http:://www.yahoo.com&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;capability.policy.nofocus.HTMLInputElement.focus&lt;/span&gt;=&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;noAccess&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.mozillazine.org/viewtopic.php?f=7&amp;amp;p=5959775"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1334938134914626403?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1334938134914626403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/08/stop-sites-from-stealing-focus-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1334938134914626403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1334938134914626403'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/08/stop-sites-from-stealing-focus-in.html' title='Stop Sites From Stealing The Focus in Firefox'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5120169958165550862</id><published>2011-08-07T09:15:00.000-07:00</published><updated>2011-08-07T09:21:41.950-07:00</updated><title type='text'>Client Side Javascript MVC: Don't Hate On Controllers</title><content type='html'>Padraic Brady wrote a &lt;a href="http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/"&gt;compelling article &lt;/a&gt;about the Model in an MVC framework.&amp;nbsp; I wholeheartedly agree with the point he makes - especially in the context of Server-Side code.&amp;nbsp; Spreading the business rules into the Controller or even the view in a web application is a very bad idea.&amp;nbsp; But, I don't think he explains "why" clearly enough.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;The MVC pattern as described by &lt;a href="http://en.wikipedia.org/wiki/Trygve_Reenskaug" title="Trygve Reenskaug"&gt;Trygve Reenskaug&lt;/a&gt; describes the View as the component that the user interacts with directly.&amp;nbsp; The view then interacts with the Controller as a way to abstract the complications of the Model with the complications of the View.&amp;nbsp; The bastardized MVC pattern us web developers are used to seeing is one in which the user interacts with the Controller which pushes some data into a static View and returns the results of combining those two things.&amp;nbsp; Since the View is static, and the Controller returns with an "all done" before the user even starts interacting with the view, the Controller has a nearly non-existent supporting role to play other than a data-pipe.&amp;nbsp; In client-side code, I see something far closer to the original MVC pattern described by Reenskaug.&lt;br /&gt;&lt;br /&gt;In client-side code, I see the View as the full DOM tree (perceived as HTML/CSS). The Controller is a not-so-thin layer of Javascript that's aware of the complete DOM tree and the Model.&amp;nbsp; The Model is a separate not-so-thick layer of Javascript that doesn't ever query the DOM, but rather very well specified snippets of DOM such as a&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;form&amp;gt;&lt;/span&gt; or a backing object not part of the DOM given to it by the controller.&amp;nbsp; The Controller plays a larger role as the glue between a dynamic interface and the Model that backs that interface due to the fact that the View constantly changes as the user interacts with the application.&lt;br /&gt;&lt;br /&gt;Back when Reenskaug was writing GUI applications in Smalltalk, he had similar concerns to deal with.&amp;nbsp; The Model, View, and Controller all had an important role to play.&amp;nbsp; While web developers have hijacked and mangled the term "MVC", don't let lessons learned there cloud your understanding of what a &lt;b&gt;real&lt;/b&gt; Controller is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5120169958165550862?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5120169958165550862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/08/client-side-javascript-mvc-dont-hate-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5120169958165550862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5120169958165550862'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/08/client-side-javascript-mvc-dont-hate-on.html' title='Client Side Javascript MVC: Don&apos;t Hate On Controllers'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1769451727813479811</id><published>2011-08-07T08:28:00.000-07:00</published><updated>2011-08-07T09:15:49.274-07:00</updated><title type='text'>Client Side Javascript MVC: The Immutable Model</title><content type='html'>&lt;br /&gt;Imagine I have the following code in my Controller:&lt;br /&gt;&lt;div class="code"&gt;...Groups.load(groupId, function(groups){ groups.each(function(i,group){  doSomethingWithTheGroup(group); });});&lt;/div&gt;&lt;br /&gt;The above code calls into the following DAO and Business Object:&lt;br /&gt;&lt;div class="code"&gt;var Groups = (function(){    function load(id, callback){            $.get("/pathTO/"+id+"/data.xml", {}, function(xml){                $(xml).find('resultData').each(function(i,xml){                    groups.push(Group(xml));                });                callback(groups);            });    }       //The following function defines the Business Object:    function Group(adXML){        var xmlParser = XmlParser(adXML);        return{            getColor:function(){return xmlParser.extractNumber("color");},            getName:function(){return xmlParser.extractText("name");}        }    }       return{        load:load    }}());&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Notice that the XML parser is called every time a field is read.&amp;nbsp; My XML parser object has a caching mechanism that stores calls in a map to make things go a little faster.&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Group&lt;/span&gt; is a &lt;a href="http://en.wikipedia.org/wiki/Business_object"&gt;Business Object&lt;/a&gt;. In this example it's anemic and immutable, but some additional behavior can be added to make it more useful.&amp;nbsp; An &lt;a href="http://en.wikipedia.org/wiki/Anemic_Domain_Model"&gt;anemic domain model&lt;/a&gt; in client-side code isn't necessarily a bad thing because this is only a representation of the true domain model on the server (which should NEVER be anemic). If I want to change data, I pass a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;form&lt;/span&gt; containing named fields into an object capable of extracting the data - a form serializer which can then be dispached the above or some other DAO which would then return a fresh Business Object.&amp;nbsp; That controller code would look like this:&lt;br /&gt;&lt;div class="code"&gt;function submitForm(element){  var form = getFormHandlerForElement(element);    GroupSerializer.saveGroup(form, {    success: function(group){alert("success")},    error: function(errors){alert("error")}  }); }&lt;/div&gt;&lt;br /&gt;And, the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GroupSerializer&lt;/span&gt; would look like this:&lt;br /&gt;&lt;div class="code"&gt;var GroupSerializer = function(){ function serialize(form){  ...  var ret = createNode("data", "");  ret.append(createNode("name", form.get("name")));  return ret; } function saveGroup(form, handlers) {  $.ajax({   url: "/member/advertiser/"+ Contact.getContact().getCid() +"/ad.xml",   data: serialize(form),   contentType: "application/xml",   dataType: "xml",   success: function(response){        if($(response).find("errors&amp;gt;error").size()&amp;gt;0){         handlers.error(Error.errors($(response)));        }else{         handlers.success(Groups.Group($(response)));        }   }  }); } return{  saveGroup:saveGroup }}&lt;/div&gt;&lt;br /&gt;Purists may exclaim, "But, that's putting the part of the DOM, a view-layer object, into the DAO, and that's violating the multi-layered approach to OOP!"&amp;nbsp; Perhaps.&amp;nbsp; I consider the DOM a view/controller-specific tree of objects, but a portion of the DOM can be considered cross-cutting domain objects.&amp;nbsp; Certain attributes in the HTML are intended for this purpose, such as the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;input&lt;/span&gt;'s &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;name&lt;/span&gt; attribute specifically intended to map the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;input&lt;/span&gt; object to some named field for the purpose of serialization.&amp;nbsp; I maintain that this is satisfactorily reusable and easy to test.&lt;br /&gt;&lt;br /&gt;But, some HTML fields (such a file upload fields, or &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;select&lt;/span&gt;s) are a little harder to access than others, and the TYPE of field should be left in the view where it belongs.&amp;nbsp; The FormSerializer and DAOs should treat all &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;form&lt;/span&gt; elements as standard &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;input&lt;/span&gt; elements with a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;name&lt;/span&gt; and a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;val()&lt;/span&gt;.&amp;nbsp; To accomplish this, the view should look kind of like:&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;script id="formTemplate" type="text/x-jquery-tmpl"&amp;gt; &amp;lt;form&amp;gt;  &amp;lt;input type="hidden" name="groupId" value="${getId()}"&amp;gt;  &amp;lt;select onchange="GroupController.updateHiddenWithSelected('groupId',this)"&amp;gt;   &amp;lt;option {{if isInGroup(0)}} selected {{/if}} value="0"&amp;gt;all groups&amp;lt;/option&amp;gt;   &amp;lt;option {{if isInGroup(1)}} selected {{/if}} value="1"&amp;gt;another group&amp;lt;/option&amp;gt;  &amp;lt;/select&amp;gt; &amp;lt;/form&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;br /&gt;The key is the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;updateHiddenWithSelected&lt;/span&gt; in the controller and its associated hidden field. Any data the user changes that can't be expressed in an &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;input&lt;/span&gt; with a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;val()&lt;/span&gt; using a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;name&lt;/span&gt; can be pushed into a hidden field that can by copying the state of the visible field into the invisible field every time the visible field changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1769451727813479811?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1769451727813479811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/08/client-side-mvc-immutable-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1769451727813479811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1769451727813479811'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/08/client-side-mvc-immutable-model.html' title='Client Side Javascript MVC: The Immutable Model'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4421080391405524520</id><published>2011-07-06T20:03:00.000-07:00</published><updated>2011-07-06T20:03:26.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Greasemonkey Hacks</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-4xBkU3vKdXA/ThUhaQGstMI/AAAAAAAAAMY/OeD-h-qRwQg/s1600/greasemonkey-hacks-tips-and-tools-for-remixing-the-web-with-firefox.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-4xBkU3vKdXA/ThUhaQGstMI/AAAAAAAAAMY/OeD-h-qRwQg/s1600/greasemonkey-hacks-tips-and-tools-for-remixing-the-web-with-firefox.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This book is just a bunch of source code for example greasemonkey scripts each followed by a short description of how you would go about creating the script.&amp;nbsp; Why not just go over to &lt;a href="http://userscripts.org/"&gt;userscripts.org&lt;/a&gt;&lt;a href="http://userscripts.org/"&gt;http://userscripts.org/&lt;/a&gt;, find a script similar to what you want to build, and look at THAT source code?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4421080391405524520?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4421080391405524520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/07/book-review-greasemonkey-hacks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4421080391405524520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4421080391405524520'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/07/book-review-greasemonkey-hacks.html' title='Book Review: Greasemonkey Hacks'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-4xBkU3vKdXA/ThUhaQGstMI/AAAAAAAAAMY/OeD-h-qRwQg/s72-c/greasemonkey-hacks-tips-and-tools-for-remixing-the-web-with-firefox.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7437302606528989368</id><published>2011-07-06T20:00:00.000-07:00</published><updated>2011-07-06T20:00:01.751-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Pro Javascript Techniques</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-iFfM1ArH_8g/ThUfEAVz4JI/AAAAAAAAAMU/VTjl_BbPf5k/s1600/pro-javascript-techniques.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-iFfM1ArH_8g/ThUfEAVz4JI/AAAAAAAAAMU/VTjl_BbPf5k/s1600/pro-javascript-techniques.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Resig"&gt;John Resig is a genius&lt;/a&gt;.&amp;nbsp; He is the creator of jQuery, my favorite Javascript library as well as a past developer for Mozilla (firefox).&amp;nbsp; But, this book is NOT a good read for developers who want to improve their Javascript chops.&amp;nbsp; It's not Resig's fault - it's just that the jQuery library has done so much for the industry that this book has become irrelevant.&amp;nbsp; Developers should be writing to the jQuery API instead of the DOM API directly - a practice repeated over and over again in this book.&amp;nbsp; This book teaches programmers how to create tools like jQuery, not how to create webapps with those tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7437302606528989368?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7437302606528989368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/07/book-review-pro-javascript-techniques.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7437302606528989368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7437302606528989368'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/07/book-review-pro-javascript-techniques.html' title='Book Review: Pro Javascript Techniques'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-iFfM1ArH_8g/ThUfEAVz4JI/AAAAAAAAAMU/VTjl_BbPf5k/s72-c/pro-javascript-techniques.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2624668618047043257</id><published>2011-07-06T19:49:00.000-07:00</published><updated>2011-07-06T19:49:10.706-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: MongoDB The Definitive Guide</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-D5Ej9Cm00pM/ThUbyOt7NCI/AAAAAAAAAMQ/KECsaORjhdw/s1600/MongoDB-The-Definitive-Guide.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-D5Ej9Cm00pM/ThUbyOt7NCI/AAAAAAAAAMQ/KECsaORjhdw/s1600/MongoDB-The-Definitive-Guide.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A great reference and way to learn MongoDB.&amp;nbsp; MongoDB is a document-based database with a JSON-based language.&amp;nbsp; Easily accessible, and a quick read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2624668618047043257?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2624668618047043257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/07/book-review-mongodb-definitive-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2624668618047043257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2624668618047043257'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/07/book-review-mongodb-definitive-guide.html' title='Book Review: MongoDB The Definitive Guide'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-D5Ej9Cm00pM/ThUbyOt7NCI/AAAAAAAAAMQ/KECsaORjhdw/s72-c/MongoDB-The-Definitive-Guide.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8022239190736118634</id><published>2011-07-05T20:58:00.000-07:00</published><updated>2011-07-05T20:58:35.657-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: HTML5 Up And Running</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5bFEGkT236U/ThPaSLv68lI/AAAAAAAAAMM/cpRl0cAyEIk/s1600/html5uar.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-5bFEGkT236U/ThPaSLv68lI/AAAAAAAAAMM/cpRl0cAyEIk/s320/html5uar.jpg" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Great Primer on HTML5 for those who have already some experience with HTML.&amp;nbsp; It wasted a lot of time on things like "how to encode video using Handbrake" when it could have spent more time on good style and additional examples.&amp;nbsp; I got through it in less than a day, so I guess you can consider it pleasure reading?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8022239190736118634?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8022239190736118634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/07/book-review-html5-up-and-running.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8022239190736118634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8022239190736118634'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/07/book-review-html5-up-and-running.html' title='Book Review: HTML5 Up And Running'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-5bFEGkT236U/ThPaSLv68lI/AAAAAAAAAMM/cpRl0cAyEIk/s72-c/html5uar.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5545386408580582598</id><published>2011-06-21T07:15:00.000-07:00</published><updated>2011-06-21T07:15:54.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: The Game Of Logic</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-LLD1fy2D8Ho/TgAHJ6Db5HI/AAAAAAAAAL8/wZDS8qGIUok/s1600/carrollletext03thgmf10-thumb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-LLD1fy2D8Ho/TgAHJ6Db5HI/AAAAAAAAAL8/wZDS8qGIUok/s1600/carrollletext03thgmf10-thumb.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lewis Carroll is most notably known for writing the Adventures of Alice in Wonderland.&amp;nbsp; I'm not sure how much of a contribution this actually was to the world of Mathematics, but the information in this text is still relevant today.&amp;nbsp;&amp;nbsp; The book starts out with a crude form of Truth Tables - something all computer scientists have to study to help understand conditional logic and also useful for transferring customer requirements into real working software.&amp;nbsp; But he goes a little farther than is really useful before transitioning into a more algebraic format.&amp;nbsp; This format appears to be an archaic precurser to modern &lt;a href="http://en.wikipedia.org/wiki/First-order_logic"&gt;first-order logic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The final 100 pages of the text&amp;nbsp; are problems, solutions, and a teacher's help guide.&amp;nbsp; I skipped doing all of the problems.&amp;nbsp; I had this class in college, and the modern notation, while not that much different, is a little easier on the eyes and more descriptive of the problem space for me.&lt;br /&gt;&lt;br /&gt;It's a short introduction spending a little too much time on the tables, and not enough time on the first-order logical algebra.&amp;nbsp; Nevertheless, it's a fun read by a famous literary giant.&amp;nbsp; The entire book reads as if the Cheshire Cat was a math teacher.&amp;nbsp; Example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div id="id00090" style="margin-top: 2em;"&gt;&lt;i&gt;Our ingenious American cousins have invented a phrase to expressthe position of a man who wants to join one or the other of twoparties—such as their two parties 'Democrats' and 'Republicans'—butcan't make up his mind WHICH.  Such a man is said to be "sittingon the fence."  Now that is exactly the position of the red counteryou have just placed on the division-line.  He likes the look ofNo. 5, and he likes the look of No. 6, and he doesn't know WHICH tojump down into.  So there he sits astride, silly fellow, danglinghis legs, one on each side of the fence!&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You can find a nice scanned copy of the book for &lt;a href="http://books.google.com/ebooks/reader?id=b5gXAAAAIAAJ&amp;amp;printsec=frontcover&amp;amp;output=reader&amp;amp;source=webstore_bookcard"&gt;free at Google Books&lt;/a&gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5545386408580582598?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5545386408580582598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/book-review-game-of-logic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5545386408580582598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5545386408580582598'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/book-review-game-of-logic.html' title='Book Review: The Game Of Logic'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-LLD1fy2D8Ho/TgAHJ6Db5HI/AAAAAAAAAL8/wZDS8qGIUok/s72-c/carrollletext03thgmf10-thumb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4774344936077081520</id><published>2011-06-20T19:42:00.000-07:00</published><updated>2011-06-20T19:42:04.643-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: The Pragmatic Programmer</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-GdTlDYMd6aM/Tf__Wgm71YI/AAAAAAAAAL4/tgj1vcwrows/s1600/pragmatic-programmer.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-GdTlDYMd6aM/Tf__Wgm71YI/AAAAAAAAAL4/tgj1vcwrows/s1600/pragmatic-programmer.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you haven't heard of this book, you're not a computer programmer.&amp;nbsp; It's on nearly every required reading list for programmers.&amp;nbsp; I just got around to it, and I didn't get as much out of it as I would have if I was to have read it before all of these other books that build on this one such as &lt;a href="http://blog.davidron.com/2010/07/book-review-effective-java.html"&gt;Effective Java&lt;/a&gt;, &lt;a href="http://blog.davidron.com/2009/10/book-review-clean-code-978-0132350884.html"&gt;Clean Code&lt;/a&gt; and Domain Driven Design (978-0321125217). &lt;br /&gt;&lt;br /&gt;Full of helpful tips presented in a "gather around the couch and grandpa will tell you how to be a great programmer" fashion, complete will 1990's era references to 56k modems and primitive references to iterative design.&lt;br /&gt;&lt;br /&gt;This should be required reading for anybody just starting out in the Software world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4774344936077081520?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4774344936077081520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/book-review-pragmatic-programmer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4774344936077081520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4774344936077081520'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/book-review-pragmatic-programmer.html' title='Book Review: The Pragmatic Programmer'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-GdTlDYMd6aM/Tf__Wgm71YI/AAAAAAAAAL4/tgj1vcwrows/s72-c/pragmatic-programmer.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5857245550357516025</id><published>2011-06-17T08:34:00.000-07:00</published><updated>2011-06-17T08:34:19.985-07:00</updated><title type='text'>Enterprise Workflow with Apps Script</title><content type='html'>&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/96URE_-aj-8" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;How many of you hate Microsoft Sharepoint and Microsoft InfoPath?&amp;nbsp; The result is a bunch of documents attached to a web page or a form that gets mailed somewhere and forgotten.&amp;nbsp; Worse, for us engineers, we have to find access to a Windows machine to access many of these forms because they simply don't open under Linux (mostly the InfoPath ones).&amp;nbsp; The solution Google offers us is called Apps Script.&amp;nbsp; It allows us to use real data stores or Google Sheets to store data, track supervisors using LDAP, and then track approvals.&lt;br /&gt;&lt;br /&gt;Die Infopath!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5857245550357516025?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5857245550357516025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/enterprise-workflow-with-apps-script.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5857245550357516025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5857245550357516025'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/enterprise-workflow-with-apps-script.html' title='Enterprise Workflow with Apps Script'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/96URE_-aj-8/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-708719003091818306</id><published>2011-06-15T07:09:00.000-07:00</published><updated>2011-11-07T08:57:31.161-08:00</updated><title type='text'>Fixing Crash On Sleep Resume In Ubuntu 11.04 Lenovo S10-3t</title><content type='html'>I found that the fix in comment 25 &lt;a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/598664/comments/25"&gt;here&lt;/a&gt;.&amp;nbsp; To do this, I added this text to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/default/grub&lt;/span&gt;, under the following add the "nohpet" part:&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GRUB_CMDLINE_&lt;/span&gt;&lt;wbr style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/wbr&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;LINUX_DEFAULT=&lt;/span&gt;&lt;wbr style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/wbr&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"quiet splash nohpet"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I then did &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo update-grub&lt;/span&gt; to publish the changes. From then, resume works, both from a suspend via the shutdown menu, and from closing and opening the lid.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-708719003091818306?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/708719003091818306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/fixing-crash-on-sleep-resume-in-ubuntu.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/708719003091818306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/708719003091818306'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/fixing-crash-on-sleep-resume-in-ubuntu.html' title='Fixing Crash On Sleep Resume In Ubuntu 11.04 Lenovo S10-3t'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2577036753038161424</id><published>2011-06-09T07:56:00.000-07:00</published><updated>2011-06-09T07:56:38.140-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Pro Android 2</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GWuBL5HC3gY/TfDdulitnBI/AAAAAAAAAL0/FVV3rm9VfPE/s1600/41qilKWo59L.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-GWuBL5HC3gY/TfDdulitnBI/AAAAAAAAAL0/FVV3rm9VfPE/s320/41qilKWo59L.jpg" width="241" /&gt;&lt;/a&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;br /&gt;The short review: the book is a well written how-to style book that works well as a primer on Android programming and a reference for later.&lt;br /&gt;&lt;br /&gt;Unfortunately, I don't really like the Android app API.&amp;nbsp; Maybe it's the book's fault that I find the XML language verbose, and the layout features inferior to HTML/CSS and the component programming API something better than Java Swing, but nothing compared to what we can do with a good Javascript library like jQuery or even YUI.&amp;nbsp; This is why chapter 17 is the only really useful chapter for me.&amp;nbsp; The chapter on Titanium Mobile - bringing HTML/CSS/Javascript applications to native Android - may be useful in a future project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2577036753038161424?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2577036753038161424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/book-review-pro-android-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2577036753038161424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2577036753038161424'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/book-review-pro-android-2.html' title='Book Review: Pro Android 2'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-GWuBL5HC3gY/TfDdulitnBI/AAAAAAAAAL0/FVV3rm9VfPE/s72-c/41qilKWo59L.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-549408301672361731</id><published>2011-06-04T11:17:00.000-07:00</published><updated>2011-06-04T11:27:18.131-07:00</updated><title type='text'>Java Programmers: Write web apps and Flash Apps in Java using Google's GWT</title><content type='html'>GWT is a well known development tool chain that will compile Java software into Javascript for use in web applications.&amp;nbsp; What's great is that similar code will work on the Java server side, the client side in standard Java applications, and on Android.&amp;nbsp; I don't know how this was missed, but a smaller internal Google project just released support for compiling GWT applications to flash now so now all GWT applications could be completely cross-browser compatible.&amp;nbsp; I hope that Google continues development here and brings this to real GWT development - not just games.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/F_sbusEUz5w" width="560"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-549408301672361731?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/549408301672361731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/java-programmers-write-web-apps-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/549408301672361731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/549408301672361731'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/java-programmers-write-web-apps-and.html' title='Java Programmers: Write web apps and Flash Apps in Java using Google&apos;s GWT'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/F_sbusEUz5w/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7131150356611788516</id><published>2011-06-04T10:34:00.000-07:00</published><updated>2011-06-04T10:34:09.394-07:00</updated><title type='text'>Facebook's Infrastructure</title><content type='html'>Facebook recently &lt;a href="http://www.blogger.com/%20http://www.facebook.com/video/video.php?v=10100259101684977&amp;amp;oid=9445547199&amp;amp;comments"&gt;released a video&lt;/a&gt; that gives a high-level overview of its release engineering team's tools and policies.&amp;nbsp; Anybody in a software engineering field working in an environment with more than 20 engineers would likely learn a great deal by watching this video.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7131150356611788516?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7131150356611788516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/facebooks-infrastructure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7131150356611788516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7131150356611788516'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/facebooks-infrastructure.html' title='Facebook&apos;s Infrastructure'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8218045067628054815</id><published>2011-06-04T07:56:00.000-07:00</published><updated>2011-06-04T07:56:27.166-07:00</updated><title type='text'>Developing Android Apps Using Android SDK or HTML 5?</title><content type='html'>&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/4f2Zky_YyyQ" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;What many people don't know is that MOST of the features of an application can be implemented in a cross-platform way by simply moving the application to the web and using tools like jQuery Mobile to abstract browser incompatibilities.&amp;nbsp; Sure it's difficult to have a web app that can listen for an incoming phone call or show a widget on the home screen, but readers, music players, weather trackers, mail applications, can all be created online so that they work on any platform instead of just Android.&lt;br /&gt;&lt;br /&gt;This year at Google I/O, there was a tech talk with an advocate for HTML/Javascript/CSS development, and an advocate for Android app development. Both sides make some valid arguments.&amp;nbsp; The conclusions starts at, "Build a web app first, and when your app needs to move closer to the hardware to get to a native API, then switch to native app".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8218045067628054815?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8218045067628054815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/06/developing-android-apps-using-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8218045067628054815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8218045067628054815'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/06/developing-android-apps-using-android.html' title='Developing Android Apps Using Android SDK or HTML 5?'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/4f2Zky_YyyQ/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5086984874225086497</id><published>2011-05-17T19:34:00.000-07:00</published><updated>2011-05-17T19:35:41.054-07:00</updated><title type='text'>VIDEO: Introduction To Game Programming in HTML / Javascript</title><content type='html'>Check out this 50 minute introduction to game programming using &amp;lt;canvas&gt; and Javascript that takes you from a a bunch of sprites (images) to a fully working 80's arcade-style game:&lt;br /&gt;&lt;iframe width="560" height="349" src="http://www.youtube.com/embed/yEocRtn_j9s" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5086984874225086497?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5086984874225086497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/05/video-introduction-to-game-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5086984874225086497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5086984874225086497'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/05/video-introduction-to-game-programming.html' title='VIDEO: Introduction To Game Programming in HTML / Javascript'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/yEocRtn_j9s/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-320466449646367070</id><published>2011-05-15T10:33:00.000-07:00</published><updated>2011-05-15T10:33:33.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Building Android Apps with HTML, CSS, and Javascript</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-foQ5t1K1BkU/TdAMlH8xfKI/AAAAAAAAALo/TUBBYslnF1M/s1600/AndroiodHtmlApps.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-foQ5t1K1BkU/TdAMlH8xfKI/AAAAAAAAALo/TUBBYslnF1M/s320/AndroiodHtmlApps.jpg" width="245" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I've been on a Javascript kick lately in my readings.&amp;nbsp; This was the one I was REALLY excited for.&amp;nbsp; The title of this book should have been, "Developing Web Apps For Android Using jQuery U/I", but this one probably will sell more copies.&lt;br /&gt;&lt;br /&gt;Unfortunately, the Author's grasp of modern Javascript idioms was a little lacking, so the programming examples looked like they were written for a scripting language rather than a prototypical OO language.&amp;nbsp; So, this is NOT a good book about how to create large applications on a team, or maintainable software.&amp;nbsp; Instead, this book teaches you the basics you need to get from writing web applications to writing mobile applications that support offline and many of the hardware features found in all smartphones - not just Android.&amp;nbsp; The chapter on cross-compiling to a native Android app is obviously android-specific.&lt;br /&gt;&lt;br /&gt;On that note, it should be added that this book stresses cross-platform tools that will work just as well on Windows Phone, Apple iOS, HP WebOS, and Blackberry OS.&amp;nbsp; So, you can write your app ONCE and have it available everywhere.&lt;br /&gt;&lt;br /&gt;This book got me really excited to sit down with a nice app project, and I believe it gave me the knowledge I need to use jQuery Mobile effectively to create mobile applications that work offline and look like native apps without the hassle of supporting multiple platforms or distributing packages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-320466449646367070?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/320466449646367070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/05/book-review-building-android-apps-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/320466449646367070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/320466449646367070'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/05/book-review-building-android-apps-with.html' title='Book Review: Building Android Apps with HTML, CSS, and Javascript'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-foQ5t1K1BkU/TdAMlH8xfKI/AAAAAAAAALo/TUBBYslnF1M/s72-c/AndroiodHtmlApps.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1042080508479168370</id><published>2011-04-26T19:50:00.000-07:00</published><updated>2011-05-15T10:04:32.915-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Javascript Patterns</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wAunTirhyAo/Tbd_IWEZmVI/AAAAAAAAALk/905seT0agf8/s1600/javascript-patterns-book.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-wAunTirhyAo/Tbd_IWEZmVI/AAAAAAAAALk/905seT0agf8/s320/javascript-patterns-book.png" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;This is NOT a patterns book.&amp;nbsp; This is a cookbook disguised as a patterns book.&amp;nbsp; In fact, the cookbook nature of the text causes it to present TOO MUCH information.&amp;nbsp; The result is that what's important is lost in a sea of "look what you can do with Javascript".&amp;nbsp; I recommend holding off on this book until you want a slightly more advanced treatment of Javascript that really walks you through the nuances of the language.&amp;nbsp; If you want to read about the most important patterns, read &lt;a href="http://blog.davidron.com/2011/03/book-review-oreilly-javascript-patterns.html"&gt;Javascript: Essential Design Patterns For Beginners&lt;/a&gt;.&amp;nbsp; If you want a Javascript cookbook of best practices, read &lt;a href="http://blog.davidron.com/2011/03/book-review-javascript-good-parts.html"&gt;Javascript: The Good Parts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That being said, this is an excellent book for intermediate-advanced Javascript programmers.&amp;nbsp; If you call yourself a "professional" Javascript programmer, you should make yourself VERY familiar with this material. &lt;br /&gt;&lt;br /&gt;ISBN 978-0596806750.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1042080508479168370?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1042080508479168370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/04/book-review-javascript-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1042080508479168370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1042080508479168370'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/04/book-review-javascript-patterns.html' title='Book Review: Javascript Patterns'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-wAunTirhyAo/Tbd_IWEZmVI/AAAAAAAAALk/905seT0agf8/s72-c/javascript-patterns-book.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7853993032538389833</id><published>2011-04-16T12:01:00.000-07:00</published><updated>2011-04-16T12:08:41.986-07:00</updated><title type='text'>Javascript: Object Creation With Explicit Interfaces</title><content type='html'>I have been reading up on Javascript design patterns lately, and after having pondered the &lt;a href="http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript"&gt;Constructor pattern and the Revealing Module Pattern&lt;/a&gt;, I thought, wouldn't it be nice to be able to combine the elegance of the Revealing Module Pattern with the ability to use it for more than generating singletons (modules)?&lt;br /&gt;&lt;br /&gt;What I really love about the Revealing Module Pattern is that the returned object is a very simple description of the public interface without all of the nonsense code that should be hidden away from the user of the interface.&amp;nbsp; Example:&lt;br /&gt;&lt;div class="code"&gt;function Car(x,y) {    //Private Fields And Methods    var milesTraveled=0;    var position = Position(x,y);    var driveForward = function(){        //Complicated stuff    }    //Public interface    return{        forward:driveForward,        driveForward:driveForward,    }}&lt;/div&gt;You would create a new Car like this:&lt;br /&gt;&lt;div class="code"&gt;var car = Car(0,0);&lt;/div&gt;&lt;br /&gt;Notice that you DON'T use the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;new&lt;/span&gt; keyword, because &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Car&lt;/span&gt; is a constructor and the object it creates is an anonymous map of functions we can call on &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Car&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7853993032538389833?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7853993032538389833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/04/javascript-object-creation-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7853993032538389833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7853993032538389833'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/04/javascript-object-creation-with.html' title='Javascript: Object Creation With Explicit Interfaces'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4476729110217895263</id><published>2011-04-09T11:43:00.000-07:00</published><updated>2011-04-09T11:43:35.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Code Craft - The Practice Of Writing Excellent Code</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-y4QX1vV3bFs/TZ-huVpa_II/AAAAAAAAALg/djhxBOBcnfA/s1600/Code+Craft+-+The+Practice+Of+Writing+Excellent+Code+%25282006%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-y4QX1vV3bFs/TZ-huVpa_II/AAAAAAAAALg/djhxBOBcnfA/s1600/Code+Craft+-+The+Practice+Of+Writing+Excellent+Code+%25282006%2529.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Seasoned programmers will wince at a few snippets of advice scattered throughout the book - especially how quickly he glosses over the important modern tools such as "test first", refactoring, and "continuous integration" and how much time he spends on exploring poorly contrived metaphors.&amp;nbsp; In fact, he seems to have a practical knowledge of software design but little theoretical background, knowledge of what literature has already been written on the subject, nor the ability to speak at a level high enough to really &lt;i&gt;teach&lt;/i&gt; how to write clean code.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Just pages from a perfect example of the Proxy design pattern (which he doesn't call the Proxy pattern), he introduces design patterns (and gives it a single paragraph).&amp;nbsp; Then he fails to wrap that very important topic into the rest of the text at all.&amp;nbsp; When speaking about failed software projects, he uses Mozilla as a classic example of a failure even though it still exists in the form of the second most widely used web browser, Firefox.&lt;br /&gt;&lt;br /&gt;Perhaps it sounds like I am nitpicking the book now.&amp;nbsp; When talking to today's audience about how to handle legacy code, more words shouldn't be spent on the necessity for better upfront design than on refactoring, which is given about two sentences and a reference to Martin Fowler's book.&amp;nbsp; That reference is followed closely with several pages that explain the different mythical "code monkeys" - an attempt to pigeon-hole ever programmer into one of a hand-full of personality types.&lt;br /&gt;&lt;br /&gt;The author seems only generally familiar with most of the really important material which forces the book to over-generalize and miss important arguments over how to choose between options in the real world.&amp;nbsp; Every time an important topic is raised, it is given a brief introduction and then we are fed more opinions about the psychology of programming.&lt;br /&gt;&lt;br /&gt;I went back and read some of the reviews on Amazon.com of this book, just to make sure I wasn't missing something.&amp;nbsp; The negative ones seem to have the same conclusion, and the positive ones seem to be coming from people who haven't read any of the better books already on the subject or assuming that this book is for novice programmers.&amp;nbsp; The idea that novice programmers need a dumbed-down book is a little condescending in my opinion.&lt;br /&gt;&lt;br /&gt;If you are a Java programmer, save yourself time and read a much better book: &lt;a href="http://blog.davidron.com/2010/07/book-review-effective-java.html"&gt;Effective Java&lt;/a&gt;.&amp;nbsp; Otherwise, check out the list of alternative books in the &lt;a href="http://www.amazon.com/Code-Craft-Practice-Writing-Excellent/product-reviews/1593271190/ref=cm_cr_pr_hist_1?ie=UTF8&amp;amp;showViewpoints=0&amp;amp;filterBy=addOneStar"&gt;negative reviews&lt;/a&gt; of this one for much better books.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4476729110217895263?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4476729110217895263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/04/book-review-code-craft-practice-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4476729110217895263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4476729110217895263'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/04/book-review-code-craft-practice-of.html' title='Book Review: Code Craft - The Practice Of Writing Excellent Code'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-y4QX1vV3bFs/TZ-huVpa_II/AAAAAAAAALg/djhxBOBcnfA/s72-c/Code+Craft+-+The+Practice+Of+Writing+Excellent+Code+%25282006%2529.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6434524677185170446</id><published>2011-03-27T12:47:00.000-07:00</published><updated>2011-06-22T15:55:17.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Essential JavaScript Design Patterns For Beginners</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;This book is available for free &lt;a href="http://addyosmani.com/resources/essentialjsdesignpatterns/book/"&gt;here&lt;/a&gt;.&amp;nbsp; I'd first take the time to read &lt;a href="http://oreilly.com/catalog/9780596517748"&gt;Javascript: The Good Parts&lt;/a&gt;&lt;a href="http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/"&gt;&lt;/a&gt;.&amp;nbsp; The design patterns in this books are not all named to match the names in the Gang Of Four design patterns book (such as flyweight and builder), so don't use the patterns in this book in a job interview and expect to get hired.&amp;nbsp; But, I had a few AHA moments, especially when I read the section about the Revealing Module Pattern, which is the first useful implementation of hidden methods inside of an object that can't be seen from outside of that object (private methods and fields.&lt;br /&gt;&lt;br /&gt;This is an important read for anybody using Javascript professionally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6434524677185170446?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6434524677185170446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/03/book-review-oreilly-javascript-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6434524677185170446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6434524677185170446'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/03/book-review-oreilly-javascript-patterns.html' title='Book Review: Essential JavaScript Design Patterns For Beginners'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2092497273873755205</id><published>2011-03-27T12:27:00.000-07:00</published><updated>2011-03-27T12:58:15.444-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Rock, Paper, Scissors Game Theory in Everyday Life</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-phABMnvW9wc/TY-N31drBqI/AAAAAAAAALY/zdanKX7Zs_U/s1600/rock-paper-scissors-game-theory-in-everyday-life-len-fisher-paperback-cover-art.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-phABMnvW9wc/TY-N31drBqI/AAAAAAAAALY/zdanKX7Zs_U/s1600/rock-paper-scissors-game-theory-in-everyday-life-len-fisher-paperback-cover-art.jpg" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;My first introduction to Game Theory was in College Economics.&amp;nbsp; It immediately captured me and found its way into my Computer Science research papers.&amp;nbsp; Most notably, my resarch into Peer To Peer distributed file systems and the application of the tit-for-tat solution to the iterated Prisoner's Dilemma in Bit Torrent.&amp;nbsp; I'm not excited by the mathematics as much as I am about the simple (if often unintuitive) solutions to simple puzzles and then those solutions being used to explain everyday life.&amp;nbsp; That's why I wanted to love this book.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I almost did.&amp;nbsp; Most of the information in this book I had already picked up elsewhere, so the material was a presented too slowly to keep my interest.&amp;nbsp; I think that most readers may find the same.&amp;nbsp; Additionally, the opinions of the author seemed to drift into scepticism rather than settling into using proper logic to link causal relationships between the everyday life scenarios and the game theory puzzles used to explain them.&lt;/div&gt;&lt;br /&gt;If you are new to Game Theory, this is a nice read, but if you have even had the modest introduction that I have, you will likely find yourself a little bored with chunks of the book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2092497273873755205?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2092497273873755205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/03/book-review-rock-paper-scissors-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2092497273873755205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2092497273873755205'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/03/book-review-rock-paper-scissors-game.html' title='Book Review: Rock, Paper, Scissors Game Theory in Everyday Life'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-phABMnvW9wc/TY-N31drBqI/AAAAAAAAALY/zdanKX7Zs_U/s72-c/rock-paper-scissors-game-theory-in-everyday-life-len-fisher-paperback-cover-art.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1765802642619673003</id><published>2011-03-08T17:54:00.000-08:00</published><updated>2011-03-08T17:54:56.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Javascript: The Good Parts</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-Iwrk6329vbc/TXbd6_sWldI/AAAAAAAAALU/j-QCpBL24Cc/s1600/javascript_cover.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-Iwrk6329vbc/TXbd6_sWldI/AAAAAAAAALU/j-QCpBL24Cc/s320/javascript_cover.jpg" width="244" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;I love Javascript.&amp;nbsp; It's one of my favorite programming languages.&amp;nbsp; The Author of the book, the famous Douglas Crockford, agrees with me.&amp;nbsp; In his words, Javascript is a "beautiful, elegant, lightweight and highly expressive language" buried inside of a superset of less beautiful language, scarred by the rapid growth of the world wide web.&lt;br /&gt;&lt;br /&gt;Before you have anything bad to say about Javascript, you MUST read this book.&amp;nbsp; And before you call yourself a Javascript expert, you must read this book.&amp;nbsp; If you plan to write any Javascript, you must read this book.&amp;nbsp; Don't worry, it's only 176 pages, including the full specification of the subset of Javascript that you should consider the usable language.&lt;br /&gt;&lt;br /&gt;Best programming book I have ever read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1765802642619673003?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1765802642619673003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/03/book-review-javascript-good-parts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1765802642619673003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1765802642619673003'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/03/book-review-javascript-good-parts.html' title='Book Review: Javascript: The Good Parts'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-Iwrk6329vbc/TXbd6_sWldI/AAAAAAAAALU/j-QCpBL24Cc/s72-c/javascript_cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8672761945008363872</id><published>2011-02-11T16:53:00.000-08:00</published><updated>2011-02-11T16:53:54.814-08:00</updated><title type='text'>Create A Shortcut To A Bookmark Or Bookmarklet In Firefox</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bbp5idPD3Xc/TVXZZVAb1eI/AAAAAAAAALM/rEG3Nx5NwuY/s1600/SiteLauncher.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="309" src="http://4.bp.blogspot.com/-bbp5idPD3Xc/TVXZZVAb1eI/AAAAAAAAALM/rEG3Nx5NwuY/s320/SiteLauncher.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;I wanted a faster way to add a page to Instapaper (yes, I know about bookmark keywords).&amp;nbsp; This solved my problem.&amp;nbsp; Just install the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/sitelauncher/"&gt;Site Launcher&lt;/a&gt; plugin and set up a hotkey to run the bookmarklet javascript.&amp;nbsp; The configuration above will automatically add the current page to instapaper by pressing alt-shift-i.&amp;nbsp; To keep from opening the bookmarklet in a new tab, make sure to adjust the new-tab preference under options.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8672761945008363872?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8672761945008363872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/02/create-shortcut-to-bookmark-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8672761945008363872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8672761945008363872'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/02/create-shortcut-to-bookmark-or.html' title='Create A Shortcut To A Bookmark Or Bookmarklet In Firefox'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-bbp5idPD3Xc/TVXZZVAb1eI/AAAAAAAAALM/rEG3Nx5NwuY/s72-c/SiteLauncher.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-524675641857469758</id><published>2011-01-31T20:23:00.000-08:00</published><updated>2011-02-01T16:39:50.167-08:00</updated><title type='text'>Fixing a folder full of MP3 files, some may be broken</title><content type='html'>I ripped my wife's MP3 collection for use in her phone's shiny new 16 GB SDHC card.&amp;nbsp; Some of the CDs were scratched, so the mp3 files that resulted weren't all perfect.&amp;nbsp; This resulted in her phone locking up when I placed the card in the phone.&amp;nbsp; Here's the set of commands I ran to attempt to repair each of the MP3 files one at a time using two different utilities.&lt;br /&gt;&lt;div class="code"&gt;sudo apt-get install mp3val mp3check;find * | grep mp3| while read i; do mp3val -f "$i"; done &gt;&gt; mp3fix.log;mp3check --recursive -Be --cut-junk-start --cut-junk-end --fix-headers --log-file=mp3check.log .;find * | grep mp3.bak| while read i; do rm "$i"; done;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-524675641857469758?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/524675641857469758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/01/fixing-folder-full-of-mp3-files-some.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/524675641857469758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/524675641857469758'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/01/fixing-folder-full-of-mp3-files-some.html' title='Fixing a folder full of MP3 files, some may be broken'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-149189749339915538</id><published>2011-01-28T16:00:00.000-08:00</published><updated>2011-01-28T16:00:48.179-08:00</updated><title type='text'>Sound Juicer, Two Digit Track Numbers</title><content type='html'>The BMW sound system that my Wife's Mini uses sorts songs on an MP3 DISK by track number using alpha-numeric sorting.  This means that track 10 comes before track 2 because 2&amp;gt;1.  So, When I rip music for her car, I must make sure that track 2 is labeled track 02.&amp;nbsp; Sound Juicer's default settings don't do that.&amp;nbsp; Here's how to change that setting:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; Run &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;gconf-editor&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Navigate to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;apps &lt;/span&gt;-&amp;gt; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sound juicer&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Change the value "file_pattern" from &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;%dn - %tt&lt;/span&gt; to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;%dN - %tt&lt;/span&gt;.&amp;nbsp; Notice the capital "N".&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://ubuntuforums.org/showpost.php?p=7542632&amp;amp;postcount=3"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-149189749339915538?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/149189749339915538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/01/sound-juicer-two-digit-track-numbers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/149189749339915538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/149189749339915538'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/01/sound-juicer-two-digit-track-numbers.html' title='Sound Juicer, Two Digit Track Numbers'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3137122610568271677</id><published>2011-01-17T17:00:00.000-08:00</published><updated>2011-01-17T17:00:03.392-08:00</updated><title type='text'>iBook Battery Indication In Ubuntu 10.04</title><content type='html'>I have an old PowerPC iBook g4 running Ubuntu 10.04, and for some reason upon installing the system, I didn't get a specific module that allowed the system to see the state of the battery.&amp;nbsp; This caused my machine to report that I was always running on AC power, but in fact may have been discharging the battery.&amp;nbsp; Here's the solution:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$sudo gedit /etc/modules&lt;/div&gt;&lt;br /&gt;add to the bottom of that file:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;pmu_battery&lt;/div&gt;&lt;br /&gt;&lt;a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/458004"&gt;Source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3137122610568271677?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3137122610568271677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/01/ibook-battery-indication-in-ubuntu-1004.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3137122610568271677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3137122610568271677'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/01/ibook-battery-indication-in-ubuntu-1004.html' title='iBook Battery Indication In Ubuntu 10.04'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8011813979987752783</id><published>2011-01-16T15:13:00.000-08:00</published><updated>2011-01-16T15:13:51.612-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Learning The Yahoo! User Interface Library</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TTN7ZcHb44I/AAAAAAAAAKw/vSaOSryMR9c/s1600/64701.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TTN7ZcHb44I/AAAAAAAAAKw/vSaOSryMR9c/s320/64701.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;I love Javascript.  It's an elegant language with a bad rap.  And with the proliferation of frameworks that build on the standard and browser-specific functionality, developers have a rich set of tools with which to build extremely rich user interfaces.  The Yahoo User Interface, or YUI, is among the heavier frameworks that attempt to provide a near replacement API for the standard Javascript and DOM specifications.  It's a closer competitor to the likes of Adobe Flex in the "DHTM Vs. Flex" wars, but as with most Javascript frameworks, is completely open source and free.&lt;br /&gt;&lt;br /&gt;I really wanted to like this book, because YUI is a really interesting technology.  But, unfortunately there were so many wasted pages that it became difficult to get into the narrative.  When I read a technology book cover-to-cover, as is the only way I consume technology books (reference material should be online and searchable) I want a short introduction, a simple example and then elaboration.  Instead, this book presents a detailed introduction, a complex multi-page example, and very little elaboration.  This forced me to flip around a lot to understand what part of the five pages of code HTML, CSS, and Javascript was supposed to be the part I was learning about.  It was nice to attempt to build something useful instead of dummy examples, but without a more simple concept from which I could build, I had to work for the knowledge that is so simply presented in other texts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8011813979987752783?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8011813979987752783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2011/01/book-review-learning-yahoo-user.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8011813979987752783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8011813979987752783'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2011/01/book-review-learning-yahoo-user.html' title='Book Review: Learning The Yahoo! User Interface Library'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e5Dy8J6Cluc/TTN7ZcHb44I/AAAAAAAAAKw/vSaOSryMR9c/s72-c/64701.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2183266167267058928</id><published>2010-12-30T11:13:00.000-08:00</published><updated>2010-12-30T11:14:11.940-08:00</updated><title type='text'>Sound Card Configuratio For Lenovo Ideapad S10-3t Under Ubuntu</title><content type='html'>Ubuntu doesn't seem to set up the audio for the Lenovo Ideapad S10-3t properly.&amp;nbsp; I had to add the following two lines to /etc/modprobe.d/alsa-base.conf:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;options snd-hda-intel model=“olpc-xo-1_5”options snd-hda-intel model=“ideapad” &lt;/div&gt;&lt;br /&gt;The first line is to make the headphone jack work (and disable external speakers), and the second line will make the microphone work.  I haven't added the second line to my configuration yet, so I don't know if they will conflict yet.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linlap.com/wiki/lenovo+ideapad+s10-3t"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2183266167267058928?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2183266167267058928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/12/sound-card-configuratio-for-lenovo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2183266167267058928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2183266167267058928'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/12/sound-card-configuratio-for-lenovo.html' title='Sound Card Configuratio For Lenovo Ideapad S10-3t Under Ubuntu'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7340601893274941294</id><published>2010-12-24T15:36:00.000-08:00</published><updated>2010-12-24T15:36:52.259-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Groovy Grails Recipes</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TRUuC0mAf6I/AAAAAAAAAKs/9asG-pPMHA8/s1600/GroovyGrailsCover.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TRUuC0mAf6I/AAAAAAAAAKs/9asG-pPMHA8/s320/GroovyGrailsCover.jpg" width="242" /&gt;&lt;/a&gt;&lt;/div&gt;Great introduction to programming in Groovy followed by a terse introduction to programming against the Grails API.&amp;nbsp; After reading this, I felt like I needed more hands-on experience with Grails before diving into a large project, but I felt like I could take on a smaller project with this book by my side as a reference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7340601893274941294?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7340601893274941294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/12/book-review-groovy-grails-recipes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7340601893274941294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7340601893274941294'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/12/book-review-groovy-grails-recipes.html' title='Book Review: Groovy Grails Recipes'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/TRUuC0mAf6I/AAAAAAAAAKs/9asG-pPMHA8/s72-c/GroovyGrailsCover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7402988157049534422</id><published>2010-12-24T15:30:00.000-08:00</published><updated>2010-12-24T15:31:31.815-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Spring Security Reference Documentation</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TRUqeqyrrbI/AAAAAAAAAKg/2UwBoTKuqqU/s1600/SpringSecurityReferenceTitle.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TRUqeqyrrbI/AAAAAAAAAKg/2UwBoTKuqqU/s320/SpringSecurityReferenceTitle.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;My team recently started working on a project to migrate a legacy system from a home-grown security framework to Spring Security.&amp;nbsp; While the team already had quite a bit of experience with Spring Security, my last ground-up implementation was of the 1.x series (ACEGI) and my team had some experience with version 2.&amp;nbsp; This reference documentation for version 3 was, therefore, an easy read for me.&amp;nbsp; My reading this while working on the early stages of the project helped me understand the new idioms and helped me make suggestions to the team to use some new standard technologies to solve interesting problems.&amp;nbsp; The most interesting feature of the 3.x series is that a single security definition can be made through annotation in the controller of the secure URL, and then JSP pages and other resources that needed to check security (whether to show a link or not for instance) can simple be made using a syntax like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;sec:authorize access="hasRole('supervisor')"&amp;gt;This content will only be visible to users who havethe "supervisor" authority in their list of &lt;tt&gt;GrantedAuthority&lt;/tt&gt;s.&amp;lt;/sec:authorize&amp;gt;&lt;/div&gt;Or, even cooler, like this:&lt;div class="code"&gt;&amp;lt;sec:authorize url="/admin"&amp;gt;This content will only be visible to users who are authorized to send requests to the "/admin" URL.&amp;lt;/sec:authorize url="/admin"&amp;gt;&lt;/div&gt;It was an easy read, if a little verbose.  Some sections were worth skimming, and knowledge of Spring Security is advised before reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7402988157049534422?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7402988157049534422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/12/book-review-spring-security-reference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7402988157049534422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7402988157049534422'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/12/book-review-spring-security-reference.html' title='Book Review: Spring Security Reference Documentation'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e5Dy8J6Cluc/TRUqeqyrrbI/AAAAAAAAAKg/2UwBoTKuqqU/s72-c/SpringSecurityReferenceTitle.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2607088608780448178</id><published>2010-12-16T11:48:00.000-08:00</published><updated>2010-12-16T11:51:13.319-08:00</updated><title type='text'>Custom Keyboard Shortcuts in Thunderbird</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TQptqhZ0HBI/AAAAAAAAAKU/v59X5a7eAws/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TQptqhZ0HBI/AAAAAAAAAKU/v59X5a7eAws/s320/Screenshot.png" width="307" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.mozillazine.org/viewtopic.php?t=72994"&gt;This extension&lt;/a&gt; will allow you to define copies of existing keyboard shortcuts to allow for alternate keyboard shortcuts in Thunderbird.  For example, I copied the shortcut for "Delete Message", named it "Delete Message 2" and mapped it to the "D" key for use on a keyboard without a delete key (apple keyboard).  Otherwise I'd have to use [fn]-[backspace] which requires two hands.&lt;br /&gt;&lt;a href="http://forums.mozillazine.org/viewtopic.php?t=72994"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2607088608780448178?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2607088608780448178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/12/custom-keyboard-shortcuts-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2607088608780448178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2607088608780448178'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/12/custom-keyboard-shortcuts-in.html' title='Custom Keyboard Shortcuts in Thunderbird'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e5Dy8J6Cluc/TQptqhZ0HBI/AAAAAAAAAKU/v59X5a7eAws/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6559476786031229540</id><published>2010-12-09T08:55:00.000-08:00</published><updated>2011-01-19T12:03:17.690-08:00</updated><title type='text'>Fixing Apple Keybard Function Keys in Ubuntu</title><content type='html'>Apple keyboards under Ubuntu have overridden function keys and an "fn" button that switched between modes.  For example, [f1] will decrase the brightness of the screen unless you press [fn]-[f1] to activate the actual [f1] function.&amp;nbsp; That seems backward to me.&amp;nbsp; Here's how to put them back.&lt;br /&gt;&lt;h4 id="Temporarily"&gt;&lt;/h4&gt;&lt;blockquote&gt;&lt;h4 id="Temporarily"&gt;Temporarily&lt;/h4&gt;&lt;span class="anchor" id="line-38"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line874"&gt;This section describe how to change the behavior of 'fn' with immediate effect (Restarting will reset the configuration). &lt;span class="anchor" id="line-39"&gt;&lt;/span&gt;Execute the following commands to change the fnmode parameters. See section above for a description of available value. &lt;span class="anchor" id="line-40"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-41"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-42"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;$ sudo bash&lt;br /&gt;# modprobe hid_apple&lt;br /&gt;# echo 2 &amp;gt; /sys/module/hid_apple/parameters/fnmode&lt;br /&gt;# exit&lt;/pre&gt;&lt;span class="anchor" id="line-45"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-46"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867"&gt;&lt;/div&gt;&lt;h4 id="Permanently"&gt;Permanently&lt;/h4&gt;&lt;span class="anchor" id="line-47"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line874"&gt;This section  describe how to change the behavior of 'fn' permanently. There is many  way to proceed with this modification. Each sub section describe one way  to permanently change the configuration. &lt;span class="anchor" id="line-48"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-49"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867"&gt;&lt;/div&gt;&lt;h5&gt;With .conf file (Recommended)&lt;/h5&gt;&lt;span class="anchor" id="line-50"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;1. Edit or create the file &lt;b&gt;/etc/modprobe.d/hid_apple.conf&lt;/b&gt;, e.g.: &lt;/div&gt;&lt;pre&gt;gksudo gedit /etc/modprobe.d/hid_apple.conf&lt;/pre&gt;&lt;span class="anchor" id="line-54"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;2. Add this line to the previously open file. &lt;/div&gt;&lt;pre&gt;options hid_apple fnmode=2&lt;/pre&gt;&lt;div class="line874"&gt;3. Save the file and execute the following command to notify hid_apple module to reload it's configuration. &lt;/div&gt;&lt;pre&gt;sudo update-initramfs -u&lt;/pre&gt;4. Reboot &lt;/blockquote&gt;&lt;br /&gt;&lt;a href="https://help.ubuntu.com/community/AppleKeyboard"&gt;Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UPDATE:&amp;nbsp; As of 2011, this stopped working for me.&amp;nbsp; Instead, I had to install the package pbbuttonsd and edit /etc/pbbuttonsd.conf to change the line KBDMode to fkeysfirst.&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;sudo apt-get update; sudo apt-get install pbbuttonsd; sudo gedit /etc/pbbuttonsd.conf&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6559476786031229540?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6559476786031229540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/12/fixing-apple-keybard-function-keys-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6559476786031229540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6559476786031229540'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/12/fixing-apple-keybard-function-keys-in.html' title='Fixing Apple Keybard Function Keys in Ubuntu'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7927287034231368063</id><published>2010-11-08T09:10:00.000-08:00</published><updated>2010-11-08T09:10:25.132-08:00</updated><title type='text'>Nook Glove: Disable The Touch Screen For Easy Nook Gripping</title><content type='html'>Nook Glove.&amp;nbsp; Protect the touch screen from accidental tapping while you read.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgsBZKXP0I/AAAAAAAAAKQ/omQKapsiexM/s1600/2010-11-06+13.18.55.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgsBZKXP0I/AAAAAAAAAKQ/omQKapsiexM/s320/2010-11-06+13.18.55.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Complete Nook&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I've had a Barnes And Noble Nook for about 6 months, and as you can tell from the "book reviews" section of my blog, I read a lot.&amp;nbsp; My second biggest complaint about the nook is that there is no way to turn off the touch screen while reading so that you can grip the bottom area.&amp;nbsp; To solve that problem, I created a glove around that bottom section using some duct tape and an old t-shirt.&amp;nbsp; Here's how:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgr6oYYINI/AAAAAAAAAJ8/pZDrCdXYIgk/s1600/2010-11-06+12.50.41.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgr6oYYINI/AAAAAAAAAJ8/pZDrCdXYIgk/s320/2010-11-06+12.50.41.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Raw Materials&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_e5Dy8J6Cluc/TNgr78xVg7I/AAAAAAAAAKA/Dz4kH-wxku8/s1600/2010-11-06+12.58.21.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_e5Dy8J6Cluc/TNgr78xVg7I/AAAAAAAAAKA/Dz4kH-wxku8/s320/2010-11-06+12.58.21.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;First, start with a t-shirt, some duct tape and a pair of scissors.&amp;nbsp; Cut a sheet of cotton out of the t-shirt about the size of the nook (a little wider, but just about as tall).&amp;nbsp; Notice how rough the cut job is.&amp;nbsp; Don't worry, the folding we will do later will fix that. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgr9eIOq_I/AAAAAAAAAKE/AR3ajsTeSWo/s1600/2010-11-06+13.03.51.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgr9eIOq_I/AAAAAAAAAKE/AR3ajsTeSWo/s320/2010-11-06+13.03.51.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Next, wrap the t-shirt around the nook and tape it down.&amp;nbsp; The shirt should cover about 20% of the display.&amp;nbsp; Don't worry, we'll be folding down the excess later.&amp;nbsp; Notice that I made a couple of marks on the shirt indicating where the bottom of the display is.&amp;nbsp; In the next step, I will wrap tape up to just below those dots.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TNgr-Rl3CYI/AAAAAAAAAKI/vXHzQu1mxx4/s1600/2010-11-06+13.07.54.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TNgr-Rl3CYI/AAAAAAAAAKI/vXHzQu1mxx4/s320/2010-11-06+13.07.54.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;Next, wrap tape up to the bottom of the e-ink display.&amp;nbsp; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgr_5-MncI/AAAAAAAAAKM/GeCQFRwKeBI/s1600/2010-11-06+13.09.07.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgr_5-MncI/AAAAAAAAAKM/GeCQFRwKeBI/s320/2010-11-06+13.09.07.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Now, fold the t-shirt down over the tape to fully expose the e-ink display, and then wrap some more.&amp;nbsp; All done!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7927287034231368063?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7927287034231368063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/11/nook-glove-disable-touch-screen-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7927287034231368063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7927287034231368063'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/11/nook-glove-disable-touch-screen-for.html' title='Nook Glove: Disable The Touch Screen For Easy Nook Gripping'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNgsBZKXP0I/AAAAAAAAAKQ/omQKapsiexM/s72-c/2010-11-06+13.18.55.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6307971168327227814</id><published>2010-11-05T12:59:00.000-07:00</published><updated>2010-11-05T12:59:34.236-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: CSS The Missing Manual</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNRg638qVVI/AAAAAAAAAJ4/kbLul6JH5Ac/s1600/642_CSS_The_missing_manual.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNRg638qVVI/AAAAAAAAAJ4/kbLul6JH5Ac/s320/642_CSS_The_missing_manual.jpg" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;Most web designers I know need to read this book.&amp;nbsp; I have a patent in using CSS to externalize the design of custom web stores to allow affiliates to create custom stores with only CSS, and I learned quite a bit from this book.&lt;br /&gt;&lt;br /&gt;Each chapter is broken down into a narrative about how to use specific parts of the CSS spec, and then is followed by a step-by-step tutorial for creating a very complex web site using CSS.&lt;br /&gt;&lt;br /&gt;If you make web pages, do your career a favor and read this book.&amp;nbsp; Even if you already have a pretty good understanding of CSS, skim through it and focus on the tricks and features of CSS you've never used before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6307971168327227814?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6307971168327227814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/11/book-review-css-missing-manual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6307971168327227814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6307971168327227814'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/11/book-review-css-missing-manual.html' title='Book Review: CSS The Missing Manual'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/TNRg638qVVI/AAAAAAAAAJ4/kbLul6JH5Ac/s72-c/642_CSS_The_missing_manual.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5066629104331110173</id><published>2010-10-24T14:02:00.000-07:00</published><updated>2010-10-24T14:06:38.883-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Continuous Integration</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TMSf1BK4ZlI/AAAAAAAAAJU/1bR6bpuXX5A/s1600/continuousIntegraion.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TMSf1BK4ZlI/AAAAAAAAAJU/1bR6bpuXX5A/s1600/continuousIntegraion.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;Continuous Integration: Improving Software Quality and Reducing Risk.&lt;/i&gt;&amp;nbsp;&amp;nbsp; After all of the other literature I read on refactoring and domain driven design, this book is pretty useless.&amp;nbsp; To me, there were three points to this book:&amp;nbsp;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A rationalization for continuous integration mixed with a definition of what continusous itegration is.&amp;nbsp;&lt;/li&gt;&lt;li&gt;A Howto for installing and properly using Cruise Control and it's miscellanious tooling.&lt;/li&gt;&lt;li&gt;A rationalization for test driven development.&lt;/li&gt;&lt;/ol&gt;As for the first point, I think that the author used way more words than necessary - the material could have been handled as a lengthy blog post.&amp;nbsp; As for the second point, Cruise Control isn't the only build server tool out there (i.e. Hudson) and I really shouldn't be the target demographic having already used both of these tools and having created &lt;a href="http://code.google.com/p/big-visible-cuise-web/"&gt;Big Visible Cruise Web&lt;/a&gt;.&amp;nbsp; As for the third point, the case has been made in other books, and making it here was just a waste of time and space.&amp;nbsp; Perhaps because this book pre-dates better books on TDD and DDD, this was necessary, but in today's world, this information could really be stripped.&lt;br /&gt;&lt;br /&gt;I recommend this book for readers new to DDD and TDD, and for skimming by readers who are familiar with modern Software Engineering practices.&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5066629104331110173?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5066629104331110173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/10/book-review-continuous-integration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5066629104331110173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5066629104331110173'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/10/book-review-continuous-integration.html' title='Book Review: Continuous Integration'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/TMSf1BK4ZlI/AAAAAAAAAJU/1bR6bpuXX5A/s72-c/continuousIntegraion.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6664813449309826503</id><published>2010-10-14T13:40:00.000-07:00</published><updated>2010-10-14T13:40:20.699-07:00</updated><title type='text'>What Makes IOS a "Cleaner Experience" or "Easier To Use" than Android?</title><content type='html'>I keep reading comparisons between Google's Android and Apple's IOS in the press such as &lt;a href="http://finance.yahoo.com/tech-ticker/the-truth-about-ditching-the-iphone-for-android-535497.html?&amp;amp;sec=topStories&amp;amp;pos=1&amp;amp;asset=&amp;amp;ccode="&gt;this&lt;/a&gt; where the author gives an edge to IOS because of the vague assessment that it's "easier to use" and has a "cleaner experience" without providing a lick of an explanation as to why those two specific facts are true.&amp;nbsp; It might be that IOS came out first, and was the journalists first experience with a touch interface, and therefore is the benchmark from the perspective of usability from which Android is to be judged, which isn't really fair when giving an assessment to somebody who hasn't used either.&lt;br /&gt;&lt;br /&gt;I used Android before I used IOS.&amp;nbsp; When I sat down with my Android phone for the first time, it just felt good to me having come from PalmOS. I always knew that configuration was possible using the [menu] button (which I had learned in Palm), and that the desktop equivelant of the right-click was the tap-n-hold (something new but only needed to see once).&lt;br /&gt;&lt;br /&gt;A few months ago, my Dad got a free iPod Touch.&amp;nbsp; He loves stock trading and so he wanted to use the included stock ticker app to check his stocks.&amp;nbsp; He's a retired software engineer with a MS in EE.&amp;nbsp; He COULDN'T FIGURE OUT HOW TO CONFIGURE THE STUPID APP.&amp;nbsp; I, practicing software engineer with a degree in CS, needed 40 minutes to figure out what to do.&amp;nbsp; I kept looking for something to tap-n-hold or a "menu" or "setup" or maybe a slide up/down/left/right to get to more options.&amp;nbsp; I had to search around for a little hidden italic "i" and press that.&amp;nbsp; From there I was taken to a configuration screen.&amp;nbsp; There were three or four nagging issues like that for him - it took him DAYS to really understand the "paradigm" that Apple was providing.&lt;br /&gt;&lt;br /&gt;In my experience, Android provides a more seamless way to manage music/video/caledar/etc by syncing over the air instead of forcing the user to connect a wire to a computer with specialized software (the same reason Amazon Kindle always wins in those "which e-book reader is better" articles), and a more uniform user experience due to the hardware [menu] button and tap-n-hold popups that provide a richer context sensitive experience.&amp;nbsp; Additionally, these UI elements mean fewer taps and drags and less time playing with every app to see how to get around it.&amp;nbsp; I don't understand why journalists keep repeating the "easier to use" or "cleaner experience" phrases when describing IOS in comparison to Android.&amp;nbsp; I haven't seen a single empirical study that shows one is easier to use than the other, and my own very limited personal experience, the converse is true.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Would somebody please explain this to me?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6664813449309826503?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6664813449309826503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/10/what-makes-ios-cleaner-experience-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6664813449309826503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6664813449309826503'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/10/what-makes-ios-cleaner-experience-or.html' title='What Makes IOS a &quot;Cleaner Experience&quot; or &quot;Easier To Use&quot; than Android?'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-916772485547829102</id><published>2010-10-13T15:47:00.000-07:00</published><updated>2010-10-13T15:48:04.402-07:00</updated><title type='text'>Linux: Turn your numeric keypad into a mouse: Shift-Ctrl-Numlock!</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-916772485547829102?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/916772485547829102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/10/linux-turn-your-numeric-keypad-into.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/916772485547829102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/916772485547829102'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/10/linux-turn-your-numeric-keypad-into.html' title='Linux: Turn your numeric keypad into a mouse: Shift-Ctrl-Numlock!'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5785185909741658190</id><published>2010-09-29T10:59:00.000-07:00</published><updated>2010-09-29T10:59:34.251-07:00</updated><title type='text'>Converting FLV/Flash to MP3 Audio Using FFMPEG</title><content type='html'>&lt;div&gt;I wanted to listen to a recent gubernatorial debate as a podcast, but I could only find videos of the debate online.&amp;nbsp; A university was offering up a download link for the flv flash video on it's web site, so I downloaded that and used the following command to convert it to mp3.&amp;nbsp; Since the video already contained mp3, using "-acodec copy" should have worked, but I was getting an error message likely related to a bad MP3 frame, so I just re-encoded to correct the errors in the file:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: courier new,courier;"&gt;ffmpeg -i debate.flv -acodec libmp3lame GovernerDebate.mp3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Additionally, the following command would make an mp4/aac video file for playback on most video-supporting media players.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: courier new,courier;"&gt;ffmpeg -i debate.flv -acodec libfaac GovernerDebate.mp4&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5785185909741658190?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5785185909741658190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/09/converting-flvflash-to-mp3-audio-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5785185909741658190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5785185909741658190'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/09/converting-flvflash-to-mp3-audio-using.html' title='Converting FLV/Flash to MP3 Audio Using FFMPEG'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7987347353825613591</id><published>2010-09-28T19:47:00.000-07:00</published><updated>2010-09-28T19:51:45.283-07:00</updated><title type='text'>Changing The Samsung/T-Mobile Vibrant Calendar Notification Sound</title><content type='html'>Did you know that the Samsung Vibrant comes with a custom calendar that doesn't allow you to change the event notification sound?&amp;nbsp; Really lame.&amp;nbsp; Let's change it.&amp;nbsp; First, this requires you to have "su" set up which means you need to "&lt;a href="http://forum.xda-developers.com/showthread.php?t=723479"&gt;root&lt;/a&gt;" your phone.&amp;nbsp; Also, you'll need to have Android Debug Bridge set up and working between your phone and computer, or use a console app to gain console access to your phone locally.&amp;nbsp; The big problem is that Android doesn't come with a cp command, and the mv command doesn't let you move files between filesystems.&amp;nbsp; The workaround is to use "dd" to copy a file.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Move the sound you would like to use to &lt;span style="font-family: courier new,courier;"&gt;/sdcard/sd/notifications/calendar.ogg &lt;/span&gt;It must be an Ogg Vorbis sound file (not an MP3 or WAV).&lt;/li&gt;&lt;li&gt;Start a console and type the following..&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;su&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;mv /system/media/audio/notifications/22_on_time.ogg /system/media/audio/notifications/22_on_time.ogg.old&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;dd if=/sdcard/sd/notifications/calendar.ogg of=/system/media/audio/notifications/22_on_time.ogg&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;That's it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7987347353825613591?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7987347353825613591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/09/changing-samsungt-mobile-vibrant.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7987347353825613591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7987347353825613591'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/09/changing-samsungt-mobile-vibrant.html' title='Changing The Samsung/T-Mobile Vibrant Calendar Notification Sound'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5737488661456116694</id><published>2010-09-17T09:02:00.000-07:00</published><updated>2010-09-17T09:02:21.662-07:00</updated><title type='text'>Google Isn't Evil Yet</title><content type='html'>Skyhook is suing Google for "interfering with its business, costing the small company sums exceeding "tens of millions of dollars."&amp;nbsp; Skyhook went on the record to call Google "evil" using its "Don't Be Evil" mantra against it.&amp;nbsp; Several news stories such as &lt;a href="http://www.businessinsider.com/google-is-now-officially-evil-2010-9"&gt;this one&lt;/a&gt; were written up to call Google evil.&amp;nbsp; I found this on Reddit and replied to it in a comment.&amp;nbsp; This comment was voted WAY up, so it appears that people think it's insightful.&amp;nbsp; So, I'll repost it here:&lt;br /&gt;&lt;br /&gt;&lt;div class="usertext-body"&gt;&lt;blockquote&gt;&lt;div class="md"&gt;The missing information in the article was that Skyhook was attempting to execute a contract that would have made its services EXCLUSIVE on Motorola devices - contractually forcing Motorola to remove parts of Android that handle location services - potentially breaking the Android API on Motorola phones.&lt;br /&gt;&lt;a href="http://www.nytimes.com/2010/09/16/technology/16phone.html?_r=2&amp;amp;hpw"&gt;http://www.nytimes.com/2010/09/16/technology/16phone.html?_r=2&amp;amp;hpw&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Skyhook is using its patents and other "intellectual property" to monopolize the market for positioning when a GPS satellite is not visible (indoors, in a city, during harsh weather).  Skyhook's terms would have made Android less functional potentially breaking Google Maps, Google Navigate, etc. and forcing users into a proprietary application stack.  Google is using its muscle to attempt to open up the market to competition in a space where both Skyhook and Google can provide services on top of the Android platform by forcing companies like Skyhook to stop with these "exclusivity" deals.  I don't understand how that makes Google "evil" on its face.  There is nothing Google is doing that prevents Skyhook from being installed on Android so long as nothing is removed.  Skyhook is making a marketing appeal, but look who has more to lose and who has more to gain through all of this.&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5737488661456116694?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5737488661456116694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/09/google-isnt-evil-yet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5737488661456116694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5737488661456116694'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/09/google-isnt-evil-yet.html' title='Google Isn&apos;t Evil Yet'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7994213196408864140</id><published>2010-09-17T08:53:00.000-07:00</published><updated>2010-09-17T09:08:33.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: The Jungle</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TJOLlAqoJPI/AAAAAAAAAJE/r6ehq1whMm8/s1600/n150237.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TJOLlAqoJPI/AAAAAAAAAJE/r6ehq1whMm8/s320/n150237.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;When I told people that I was listening to the Libravox audio book recording of The Jungle by Upton Sinclair, they would all respond, "Isn't that the beef story", or something like that.&amp;nbsp; Honestly, I got all the way through it, and it's a lot more than that.&amp;nbsp; Only the first 1/3 of the book is about the meat packing industry.&amp;nbsp; The second 1/3 of the book is about the misery of the poor, and the final 1/3 is about the benefits of socialism.&lt;br /&gt;&lt;br /&gt;This book has been credited with stirring the public to reform the Government's responsibility for inspecting food for public consumption.&amp;nbsp; But, it attempts to provide an argument for why Capitalism fails the people and why we should re-distribute wealth in order to achieve better health standards.&amp;nbsp; Having family that lived in the USSR in the 1970s and 1980s, I can tell you that black bananas and rotten meat is the result of a centrally planned government - just as bad as what could result from a corrupt capitalism.&lt;br /&gt;&lt;br /&gt;The book is all wrong.&amp;nbsp; It takes 2/3 of the time to explain dozens of instances of corrupt government and uses this to rationalize giving the government MORE power with FEWER checks instead of simple and liberal application of laws such as they existed at the time - The Sherman Anti Trust Act, and eight years after the publication of this novel, The Clayton Act which Roosevelt and Taft were to use to bust the very corrupt organizations that the book described.&lt;br /&gt;&lt;br /&gt;Speaking of Theodore Roosevelt, I completely agree with his assessment of this book calling him a "crackpot", and saying, "I have an utter contempt for him. He is hysterical, unbalanced...".&lt;br /&gt;&lt;br /&gt;I'm glad we ended up with an FDA.&amp;nbsp; And, I'm glad we ended up with the Clayton Act.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7994213196408864140?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7994213196408864140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/09/book-review-jungle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7994213196408864140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7994213196408864140'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/09/book-review-jungle.html' title='Book Review: The Jungle'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e5Dy8J6Cluc/TJOLlAqoJPI/AAAAAAAAAJE/r6ehq1whMm8/s72-c/n150237.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-749881778932618877</id><published>2010-09-10T22:26:00.000-07:00</published><updated>2010-09-10T22:27:49.337-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Laszlo In Action</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TIsP3eL771I/AAAAAAAAAI8/sfmy3qfHTpM/s1600/515nw7a19vlaa240ok3.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TIsP3eL771I/AAAAAAAAAI8/sfmy3qfHTpM/s320/515nw7a19vlaa240ok3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I just finished Laszlo In Action, ISBN 9781932394832.&amp;nbsp; As a moderately experience JavaScript web developer, I read it because I wanted to experience the world before modern JavaScript libraries such as YUI, Prototype, and jQuery existed.&amp;nbsp; This tool is a contemporary of Flex (it's flash based) with the additional capability to compile to native JavaScript (what the book properly calls DHTML, but has more recently been called AJAX and is being called HTML5 these days even though there are no HTML5 tags or functions being used).&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Having already read a Adobe's primer to Flex (a 200+ page PDF) I can say that Flex and Laszlo have a lot in common.&amp;nbsp; The tooling for Flex seems a little more mature, but given the choice I'd pick Laszlo simply for the fact that it isn't compelled to lock users into a propritary platform - it already cross-compiles over to Javascript/Html and it will likely support more and more of what HTML5 provides as it becomes more popular.&amp;nbsp; In fact, I would bet that it'll eventually compile down to HTML5 Canvas.&amp;nbsp; Interestingly enough, the area you draw on is already called &amp;lt;canvas&amp;gt;!&amp;nbsp;&lt;br /&gt;&lt;br /&gt;The book makes a great introduction to the language, but is a little wordy in areas for those of us with web development experience.&amp;nbsp; Programmers new to writing in languages that require asymmetric server calls running XQuery, the semantics of HTML and XML, and dealing with cookies, all of which this book teaches.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-749881778932618877?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/749881778932618877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/09/book-review-laszlo-in-action.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/749881778932618877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/749881778932618877'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/09/book-review-laszlo-in-action.html' title='Book Review: Laszlo In Action'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e5Dy8J6Cluc/TIsP3eL771I/AAAAAAAAAI8/sfmy3qfHTpM/s72-c/515nw7a19vlaa240ok3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4329414605040426527</id><published>2010-08-28T12:59:00.000-07:00</published><updated>2010-08-28T12:59:40.994-07:00</updated><title type='text'>Handbrake Broken in Ubuntu 10.04</title><content type='html'>Running Ubuntu 10.04 and trying to rip a DVD with Handbrake.&amp;nbsp; Chances are that the "start" button will be disabled or "greyed out" due to a bug in Handbrake and changes to Gnome.&amp;nbsp; The trick is to upgrade Handbrake to a pre-release version using an Ubuntu PPA:&lt;br /&gt;&lt;div class="code"&gt;sudo add-apt-repository ppa:stebbins/handbrake-snapshots; sudo apt-get update;sudo apt-get install handbrake-cli handbrake-gtk&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4329414605040426527?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4329414605040426527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/08/handbrake-broken-in-ubuntu-910.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4329414605040426527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4329414605040426527'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/08/handbrake-broken-in-ubuntu-910.html' title='Handbrake Broken in Ubuntu 10.04'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1977875533095316636</id><published>2010-08-20T12:23:00.000-07:00</published><updated>2011-11-03T13:17:49.894-07:00</updated><title type='text'>The easiest way to update a Dell Bios within Ubuntu</title><content type='html'>&lt;div style="font-family: inherit;"&gt;Here's how to install that dumb .exe file Dell ships for new Bios's in Ubuntu (or any Debian Linux).&amp;nbsp; These directions should easily be altered for any Linux by changing the first apt-get command as long as libsmbios-bin and wine are available for that platform.&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install libsmbios-bin wine&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;getSystemId&lt;/span&gt; will give you everything you need to know about your machine and current BIOS.       &lt;/li&gt;&lt;li&gt;Download the most recent BIOS upgrade for your system from &lt;a href="http://support.dell.com/"&gt;http://support.dell.com&lt;/a&gt; as you would if using Windows &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;wine O755-A17.exe -writehdrfile &lt;/span&gt;will extract the .hdr file containing the Bios upgrade program.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo modprobe dell_rbu&lt;/span&gt;&amp;nbsp; will load the dell_rbu driver &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dellBiosUpdate –u –f hdrFileName.hdr --reboot&lt;/span&gt;  will begin the upgrade process and reboot the machine to finish.&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://java2go.blogspot.com/2010/05/how-to-upgrade-your-dells-bios-directly.html"&gt;&lt;span style="font-size: xx-small;"&gt;Source&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1977875533095316636?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1977875533095316636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/08/easiest-way-to-update-dell-bios-within.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1977875533095316636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1977875533095316636'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/08/easiest-way-to-update-dell-bios-within.html' title='The easiest way to update a Dell Bios within Ubuntu'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-217885819317770106</id><published>2010-08-18T13:35:00.000-07:00</published><updated>2010-08-18T13:36:05.439-07:00</updated><title type='text'>Two ways to select the current date from the database in Hibernate And Joda Time</title><content type='html'>The first method - this requires that a table is mapped to a hibernatified object named "Company" and is always available.  This won't work if you are dealing with several schemas unless all of them share at least a single table name:&lt;div class='code'&gt;DateTimeZone databaseTimeZone = DateTimeZone.forID(getCurrentSession().createSQLQuery("select DBTIMEZONE from dual").uniqueResult().toString());return new DateTime(getCurrentSession().createQuery("select current_timestamp() from Company").list().get(0), databaseTimeZone);&lt;/div&gt;Another way is specific to the database platform you are using.  This uses the standard Oracle method of "select SYSDATE from dual" to return back a timestamp which contains all of date, time, and timezone.&lt;div class='code'&gt;Timestamp timestamp = (Timestamp) getCurrentSession().createSQLQuery("select SYSDATE param from dual").addScalar("param", Hibernate.TIMESTAMP).uniqueResult();return new DateTime(timestamp);&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-217885819317770106?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/217885819317770106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/08/two-ways-to-select-current-date-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/217885819317770106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/217885819317770106'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/08/two-ways-to-select-current-date-from.html' title='Two ways to select the current date from the database in Hibernate And Joda Time'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2437296313904473647</id><published>2010-08-10T20:19:00.000-07:00</published><updated>2010-08-10T20:19:59.952-07:00</updated><title type='text'>Ubuntu 10.04 Sleep Instead Of Hibernate When Idle</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TGIWwsjSIfI/AAAAAAAAAIs/OkPtki05a_0/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TGIWwsjSIfI/AAAAAAAAAIs/OkPtki05a_0/s320/Screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;Ubuntu has an incomplete power management tool built in.&amp;nbsp; Some of the things you CAN'T configure is the ability to sleep instead of hibernate when the computer is idle for a period of time (the period of time is easily configurable in the power-settings dialog).&amp;nbsp; Here's how to modify Gnome's advanced power settings using the gconf-editor:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Run the command gconf-editor (press [alt]-[f2], type &lt;i&gt;gconf-editor&lt;/i&gt;, and press [Enter])&lt;/li&gt;&lt;li&gt;Browse to &lt;i&gt;/apps/gnome-power-manager/actions/critical_battery&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Change the settings.&amp;nbsp; Possible values are "hibernate", "suspend", "shutdown" and "nothing".&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2437296313904473647?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2437296313904473647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/08/ubuntu-1004-sleep-instead-of-hibernate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2437296313904473647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2437296313904473647'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/08/ubuntu-1004-sleep-instead-of-hibernate.html' title='Ubuntu 10.04 Sleep Instead Of Hibernate When Idle'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/TGIWwsjSIfI/AAAAAAAAAIs/OkPtki05a_0/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3703703810840407391</id><published>2010-08-09T11:31:00.000-07:00</published><updated>2010-08-09T11:32:01.656-07:00</updated><title type='text'>Book Review: Capitalism And Freedom</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_e5Dy8J6Cluc/TGBH8X63cTI/AAAAAAAAAIk/N8aUcC-bIbI/s1600/4v2znn.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_e5Dy8J6Cluc/TGBH8X63cTI/AAAAAAAAAIk/N8aUcC-bIbI/s320/4v2znn.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Written by the Nobel Prize winning economist, Milton Friedman, Capitalism and Freedom outlines the classical liberal (today called the Libertarian) economic argument against government intervention in the roles of business and personal freedoms.&amp;nbsp; While most of the arguments posed in the books are not, from a philosophical perspective provably "valid" through deduction, they are compelling from an inductive perspective.&amp;nbsp; I recommend anybody who votes at least read this book to understand the negative implication of increased government intervention means in our lives whether a socialist or a capitalist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3703703810840407391?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3703703810840407391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/08/book-review-capitalism-and-freedom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3703703810840407391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3703703810840407391'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/08/book-review-capitalism-and-freedom.html' title='Book Review: Capitalism And Freedom'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_e5Dy8J6Cluc/TGBH8X63cTI/AAAAAAAAAIk/N8aUcC-bIbI/s72-c/4v2znn.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8961674365708657962</id><published>2010-07-31T17:46:00.000-07:00</published><updated>2010-07-31T17:46:05.792-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Effective Java</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TFTBd-4a4mI/AAAAAAAAAIc/Z5EQ9Mh0fHE/s1600/EffectiveJava.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TFTBd-4a4mI/AAAAAAAAAIc/Z5EQ9Mh0fHE/s320/EffectiveJava.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;If you have programmed in Java for more than a couple of years, or you consider yourself an intermediate or advanced programmer, then you either have read this book, or you NEED to read this book.&amp;nbsp; This is probably the most important piece of text about the proper style and patterns to use in Java I've ever read.&amp;nbsp; It will undoubtedly settle countless design discussions about the "right way" to do something when the issue is over the language itself.&amp;nbsp; This book is not a book on Domain Driven Design or Object Oriented Programming, but it does require a good knowledge of these areas to fully comprehend the arguments posed.&amp;nbsp; No, it tackles the heart of the language API paying a lot of attention to java.lang and java.util and spending some time on concurrency, serialization, and what makes Java beautiful as well as what is not so intuitive about the language.&lt;br /&gt;&lt;br /&gt;Java Programmers: Read This Book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8961674365708657962?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8961674365708657962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/book-review-effective-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8961674365708657962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8961674365708657962'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/book-review-effective-java.html' title='Book Review: Effective Java'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/TFTBd-4a4mI/AAAAAAAAAIc/Z5EQ9Mh0fHE/s72-c/EffectiveJava.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5245730736298798137</id><published>2010-07-28T12:54:00.001-07:00</published><updated>2010-07-28T12:55:29.108-07:00</updated><title type='text'>Make Firefox New Tabs Always Open On The Far Right</title><content type='html'>In versions of Firefox previous to 1.6, new tabs opened up at the right end of a list of tabs when you middle-click or ctrl-click on a link.&amp;nbsp; After the 1.6 update, the Microsoft approach to opening tabs was adopted which keeps these "related" tabs closer to each other by opening up new tabs right next to the current tab.&amp;nbsp; To revert this behavior back to the pre-1.6 days, do the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Browse to &lt;a class="moz-txt-link-freetext" href="about:config"&gt;about:config&lt;/a&gt; and accept any warning.&lt;/li&gt;&lt;li&gt;Search for &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tabs.insertRelatedAfterCurrent&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Toggle it from &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;true&lt;/span&gt; to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;false&lt;/span&gt;&lt;br /&gt;   &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5245730736298798137?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5245730736298798137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/make-firefox-new-tabs-always-open-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5245730736298798137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5245730736298798137'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/make-firefox-new-tabs-always-open-on.html' title='Make Firefox New Tabs Always Open On The Far Right'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-7302808814284610583</id><published>2010-07-27T11:26:00.000-07:00</published><updated>2010-12-07T08:56:14.761-08:00</updated><title type='text'>Converting 3gp Video Under Ubuntu</title><content type='html'>I was given a pair of video recording sun glasses for Christmas which records pretty poor quality video onto some internal storage.&amp;nbsp; Worse, it records in a very difficult to work with 3gp wrapped mp4 implementation.&amp;nbsp; Here's how I convert those video files into something a little more workable, Mpeg4/AAC wrapped by an mp4.&lt;br /&gt;&lt;br /&gt;First, you may need to install a codec to even be able to read these files: (Change Karmic to whatever version of Ubuntu you are using)&lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;sudo wget &lt;/span&gt;&lt;a href="http://www.medibuntu.org/sources.list.d/" shape="rect" style="font-family: Courier New;" target="_blank"&gt;http://www.medibuntu.org/sources.list.d/&lt;/a&gt;&lt;b style="font-family: Courier New;"&gt;karmic&lt;/b&gt;&lt;span style="font-family: Courier New;"&gt;.list--output-document=/etc/apt/sources.list.d/medibuntu.list;&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get installmedibuntu-keyring &amp;amp;&amp;amp; sudo apt-get update&lt;/span&gt;; &lt;span style="font-family: Courier New;"&gt;sudo apt-getinstall mplayer w32codecs non-free-codecs mplayer libavcodec-extra-52amrwb amrnb&amp;nbsp; libopencore-amrwb0 libopencore-amrnb0 libamrnb3 libamrwb3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here's a command to type to convert these files.&amp;nbsp; The following will convert starting at 2 minutes and ending after 5 minutes of time (7 minutes into the original):&lt;br /&gt;&lt;div class="code"&gt;ffmpeg -i Vid0004.3gp -acodec faac mp2 -ab 128kb -ar 22050 -vcodec mpeg4 -b 1200kb -mbd 2 -cmp 2 -subcmp 2 -ss 00:02:00 -t 00:5:00 output.mp4&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-7302808814284610583?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/7302808814284610583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/converting-3gp-video-under-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7302808814284610583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/7302808814284610583'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/converting-3gp-video-under-ubuntu.html' title='Converting 3gp Video Under Ubuntu'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2762848722770455761</id><published>2010-07-14T14:32:00.000-07:00</published><updated>2010-07-14T14:32:29.999-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Hadoop: The Definitive Guide</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TD4p0z71nLI/AAAAAAAAAIQ/nIgqFtyN_Ww/s1600/hadoop.htm" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TD4p0z71nLI/AAAAAAAAAIQ/nIgqFtyN_Ww/s320/hadoop.htm" /&gt;&lt;/a&gt;&lt;/div&gt;I took a vacation to Michigan two weeks ago, and a few days before leaving, I purchased a Barnes &amp;amp; Noble Nook.&amp;nbsp; This was the first full-length book I put on the Nook.&lt;br /&gt;&lt;br /&gt;First of all, the Nook is a decent PDF reader if you are reading a lot of narrative.&amp;nbsp; But, you can't use the device to "zoom" into a page that has a lot of code because the only "zoom" functionality the device has is a selector to change the font which causes code to re-flow and become unreadable.&amp;nbsp; I solved this little problem by &lt;a href="http://blog.davidron.com/2010/07/zooming-pdf-files-for-nook.html"&gt;cropping the PDF on my computer before loading it onto the Nook&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, the review:&amp;nbsp; This book was great.&amp;nbsp; The narrative was descriptive and not overly-complex.&amp;nbsp; Having read the book cover-to-cover (as it where given it was a PDF on a Nook) without walking through any of the examples left me feeling like I could take on a small Hadoop project and know where to go to do it right the first time.&amp;nbsp; Additionally, I gained a much richer understanding of distributed programming using MapReducers as well as some of the tools build on Hadoop.&amp;nbsp; There was a chapter for each of the following tools: Pig, HBase, Zookeeper, plus a chapter on use cases that introduced Hive, Nutch, and Cascading using real-world examples from developers at well known companies actually using Hadoop such as Yahoo, Facebook, and Last.fm (CBS).&lt;br /&gt;&lt;br /&gt;I recommend this book to anybody who needs an introduction into MapReduce to anybody who wants to actually build a Hadoop cluster.&amp;nbsp; Some of the information required my pre-requisite Computer Science background in distributed systems, networking, etc (specifically the Algebra of network typologies) and a good understanding of Java (to read MapReduce job illustrations) to comprehend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2762848722770455761?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2762848722770455761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/book-review-hadoop-definitive-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2762848722770455761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2762848722770455761'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/book-review-hadoop-definitive-guide.html' title='Book Review: Hadoop: The Definitive Guide'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/TD4p0z71nLI/AAAAAAAAAIQ/nIgqFtyN_Ww/s72-c/hadoop.htm' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3250404769441740462</id><published>2010-07-14T09:01:00.000-07:00</published><updated>2010-07-14T09:02:10.751-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Confessions Of An Economic Hitman</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TD3e_-PXHoI/AAAAAAAAAII/1AfZ0pvPd4s/s1600/200px-Confessions_of_An_Economic_Hitman_Cover.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_e5Dy8J6Cluc/TD3e_-PXHoI/AAAAAAAAAII/1AfZ0pvPd4s/s320/200px-Confessions_of_An_Economic_Hitman_Cover.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I admit that I only got 1/2 way through the book and I couldn't take it any more.&amp;nbsp; It's complete conspiracy theory trash, most of which is founded on unsubstantiated psuedo-facts.&amp;nbsp; I wanted to get into it, but I kept asking myself, "How does he even know that's true".&amp;nbsp; &lt;a href="http://en.wikipedia.org/wiki/Confessions_of_an_Economic_Hit_Man#Controversy_and_criticism"&gt;He doesn't&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Trash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3250404769441740462?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3250404769441740462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/book-review-confessions-of-economic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3250404769441740462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3250404769441740462'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/book-review-confessions-of-economic.html' title='Book Review: Confessions Of An Economic Hitman'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e5Dy8J6Cluc/TD3e_-PXHoI/AAAAAAAAAII/1AfZ0pvPd4s/s72-c/200px-Confessions_of_An_Economic_Hitman_Cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6995800004980714191</id><published>2010-07-13T15:27:00.000-07:00</published><updated>2010-07-13T15:30:35.152-07:00</updated><title type='text'>Zooming PDF files for Nook.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_e5Dy8J6Cluc/TDzl66KVmXI/AAAAAAAAAIA/AiSxmpwxBKE/s1600/PDFEdit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_e5Dy8J6Cluc/TDzl66KVmXI/AAAAAAAAAIA/AiSxmpwxBKE/s320/PDFEdit.png" /&gt;&lt;/a&gt;&lt;/div&gt;I just got a Barnes &amp;amp; Noble Nook.&amp;nbsp; It's a great little reader based on Android with a standard e-ink display and an additional LCD display for navigating quickly to the book and page you would like to read.&amp;nbsp; The most annoying feature was it's handling of PDF files.&amp;nbsp; If I chose the font "small" I got a full page display of the PDF as if it were a small print out.&amp;nbsp; Any larger font caused the PDF to be improperly re-flowed - severely re-aligning source code such to make it completely unreadable.&amp;nbsp; Worse, the "small" font preserved the thick book-like margins found in the original PDF, which caused the text to be uncomfortably small.&amp;nbsp; What I wanted was to zoom into the page, cropping out the margins.&amp;nbsp; Here's how to crop out the margins using a PC:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install pdfedit.&amp;nbsp; Under Ubuntu, it's found in the Synaptic Package Manager for one-click installation.&amp;nbsp; Under Windows, the installation process is &lt;a href="http://sourceforge.net/projects/pdfedit/"&gt;quite involved&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Open your e-book in PDF edit.&amp;nbsp; &lt;/li&gt;&lt;li&gt;Choose page-&amp;gt;edit page metrics (alt-p, d)&lt;/li&gt;&lt;li&gt;Adjust the top four boxes until the PDF is cropped the way you want it to be for the current page by changing one at a time, and applying it to the page.&amp;nbsp; Don't worry, no data is lost, and you can always just change the number back if you make a mistake.&lt;/li&gt;&lt;li&gt;Once you are sure that the numbers are set the way you want them, adjust the bottom two boxes to change all pages (Apply from = 1, How many=999999999).&lt;/li&gt;&lt;li&gt;Before doing step 2, you may have to open pdfedit and before opening a pdf, delinearize your PDF using the Tools-&amp;gt;delinearize option to open the original pdf and re-save it to another file.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;Finally, if pdfedit has any other trouble opening the file, the PDF may be damaged.&amp;nbsp; Under Ubuntu, I use the command pdftk to repair my file.&amp;nbsp; Pdftk is available in The Synaptic Package Manager.&amp;nbsp; Here's the command:&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;pdftk input.pdf output output.pdf&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6995800004980714191?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6995800004980714191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/zooming-pdf-files-for-nook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6995800004980714191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6995800004980714191'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/zooming-pdf-files-for-nook.html' title='Zooming PDF files for Nook.'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_e5Dy8J6Cluc/TDzl66KVmXI/AAAAAAAAAIA/AiSxmpwxBKE/s72-c/PDFEdit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6166444034126955414</id><published>2010-07-13T15:16:00.000-07:00</published><updated>2010-07-13T15:16:31.495-07:00</updated><title type='text'>Converting CHM to PDF for the Nook</title><content type='html'>Here's what I do to convert a CHM file to a PDF file for reading on my Nook using Ubuntu.&lt;br /&gt;&lt;br /&gt;First, install chm2pdf using the Ubuntu software installer.&amp;nbsp; Next, from the command line, use the following command: &lt;br /&gt;&lt;div class="code"&gt;chm2pdf --bottom margin5 --left margin5 --right margin5 --top margin5 --book chmFileName.chm&lt;/div&gt;And, if I get an error, change the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;--book&lt;/span&gt; to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;--continuous&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6166444034126955414?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6166444034126955414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/converting-chm-to-pdf-for-nook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6166444034126955414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6166444034126955414'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/converting-chm-to-pdf-for-nook.html' title='Converting CHM to PDF for the Nook'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6873480932768125966</id><published>2010-07-13T15:09:00.000-07:00</published><updated>2010-07-13T15:09:48.877-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: The Wealth Of Nations by Adam Smith</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TDzjE7JKOQI/AAAAAAAAAH4/aZDHbipqbSc/s1600/200px-Wealth_of_Nations.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TDzjE7JKOQI/AAAAAAAAAH4/aZDHbipqbSc/s320/200px-Wealth_of_Nations.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I listened to this book on &lt;a href="http://librivox.org/the-wealth-of-nations-book-1-by-adam-smith/"&gt;Libravox&lt;/a&gt;.&amp;nbsp; The reader did a great job, and I recommend the book to anybody who wants to read the father of Classical Economic's seminal work.&amp;nbsp; By today's standards, this would definitely be considered a "dry read".&amp;nbsp; In this multi-volume work, Smith lays out the definitive argument against mercantilism, the prosperity of a nation is dependent upon its supply of capital to the world economy.&amp;nbsp; This over-simplistic view gave way to classical economics, and the modern supply/demand method of looking at macroeconomics and microeconomics.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6873480932768125966?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6873480932768125966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/07/book-review-wealth-of-nations-by-adam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6873480932768125966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6873480932768125966'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/07/book-review-wealth-of-nations-by-adam.html' title='Book Review: The Wealth Of Nations by Adam Smith'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/TDzjE7JKOQI/AAAAAAAAAH4/aZDHbipqbSc/s72-c/200px-Wealth_of_Nations.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-2346083448234783836</id><published>2010-06-24T11:58:00.000-07:00</published><updated>2010-06-24T11:59:09.193-07:00</updated><title type='text'>Ubuntu: Fixing "Damaged Android SD Card"</title><content type='html'>Android suddenly started telling me that my SD card was "Damaged".&amp;nbsp; To fix that in Ubuntu, just mount the card and run the following:&lt;br /&gt;&lt;div class="code"&gt;sudo fsck -a /dev/sdb1&lt;/div&gt;&lt;br /&gt;The &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/dev/sdb1 &lt;/span&gt;part may be different.&amp;nbsp; To find out, just type &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dmesg&lt;/span&gt; and see the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sdb:sdb1&lt;/span&gt; in the output:&lt;br /&gt;&lt;div class="code"&gt;[12330.974901] sd 11:0:0:0: [sdb] Assuming drive cache: write through[12330.974911]  sdb: sdb1[12330.995285] sd 11:0:0:0: [sdb] Assuming drive cache: write through[12330.995289] sd 11:0:0:0: [sdb] Attached SCSI removable disk&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-2346083448234783836?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/2346083448234783836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/06/ubuntu-fixing-damaged-android-sd-card.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2346083448234783836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/2346083448234783836'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/06/ubuntu-fixing-damaged-android-sd-card.html' title='Ubuntu: Fixing &quot;Damaged Android SD Card&quot;'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1331190825343291367</id><published>2010-06-17T21:30:00.000-07:00</published><updated>2010-07-27T11:09:27.477-07:00</updated><title type='text'>Fixing Evernote's “No snapshot found to upload”</title><content type='html'>I just upgraded to the latest version of Evernote for Android.&amp;nbsp; I'm not sure what went wrong, but after the upgrade, every time I tried to create a snapshot note within the app, I received the error message   “No snapshot found to upload” right after taking the picture.&amp;nbsp; The solution: Make sure all pending notes have been sent and then delete the "Evernote" folder on the phones memory card.&lt;br /&gt;&lt;br /&gt;Don't worry, all of your data is in the cloud, and whatever was in that folder will be re-created as soon as you start Evernote again.&lt;br /&gt;&lt;br /&gt;Update 2010-07-27: Nope.&amp;nbsp; This didn't help.&amp;nbsp; The problem came back.&amp;nbsp; Apparently, if you wait a really long time between taking the picture and pressing "OK" will help.&amp;nbsp; Apparently, there is a "race condition" where Evernote expects a snapshot to exist as a file somewhere yet the file is still being written to storage.&amp;nbsp; Apparently, there is a new beta floating about that fixes the problem.&amp;nbsp; You can get it by surfing to: &lt;a href="http://s.evernote.com/androidbeta"&gt;http://s.evernote.com/androidbeta&lt;/a&gt;.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1331190825343291367?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1331190825343291367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/06/fixing-evernotes-no-snapshot-found-to.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1331190825343291367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1331190825343291367'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/06/fixing-evernotes-no-snapshot-found-to.html' title='Fixing Evernote&apos;s “No snapshot found to upload”'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5352278358574279817</id><published>2010-06-16T16:15:00.000-07:00</published><updated>2010-06-16T16:15:15.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: Beautiful Code</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TBkB5Gcli5I/AAAAAAAAAHg/6nT1LvU0cnM/s1600/beautifulCode.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TBkB5Gcli5I/AAAAAAAAAHg/6nT1LvU0cnM/s320/beautifulCode.gif" /&gt;&lt;/a&gt;&lt;/div&gt;I just finished reading &lt;a href="http://www.amazon.com/Beautiful-Code/dp/B002AWX8JG"&gt;Beautiful Code&lt;/a&gt;.  This programming book is an assortment of stories and examples of well-written code or elegant designs.  Each chapter was written by a different author and at a different level of granularity.&amp;nbsp; My overall opinion of the book was "meh".&amp;nbsp; I was expecting to see a book full of examples of beautiful code, but instead what I got was a book half full of programmers bragging about how cool their applications are.&amp;nbsp; I didn't want to read "beautiful applications"; I wanted to read "beautiful code".&amp;nbsp; Given that, there were some great chapters that included really beautiful code. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The section on MapReduce contains the most elegant description of what MapReduce is and how it is used that I've seen.&amp;nbsp; The code snippets truly are beautiful.&lt;/li&gt;&lt;li&gt;The section on "beautiful tests" was quite well written.&lt;/li&gt;&lt;li&gt;The section on Fit by Michael Feathers was a fun read.&lt;/li&gt;&lt;/ul&gt;I found myself skipping whole paragraphs and pages after reading the first two pages of certain chapters because I had no interest in Assembly Hacks or the Solaris Kernel Scheduler - what were beautiful designs, but specific to use-cases I will probably never encounter in real-life.&amp;nbsp; Fortunately, no chapter relied on the content of the previous chapter, so I got a free restart every few dozen pages or so.&lt;br /&gt;&lt;br /&gt;But worse, some of the chapters show off what I would consider to be UGLY CODE and call it beautiful.&amp;nbsp; Flip to the chapter on Perforce.&amp;nbsp; It purports to be THE chapter on "beautiful code".&amp;nbsp; On page 530, the code is well aligned and looks neatly organized, but is chock full of &lt;a href="http://en.wikipedia.org/wiki/Code_smell"&gt;Inappropriate Intimacy&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Code_smell"&gt;Duplicate Code&lt;/a&gt;. &amp;nbsp; I mean, look at this snippit:&lt;br /&gt;&lt;div class="code"&gt;case MS_BASE:               /* dumping the original */    if( selbits = selbitTab[ DL_BASE ][ diffDiff ] )    {        readFile = bf;        readFile-&amp;gt;SeekLine( bf-&amp;gt;start );        state = MS_LEG1;        break;    }case MS_LEG1:               /* dumping leg1 */    if( selbits = selbitTab[ DL_LEG1 ][ diffDiff ] )    {        readFile = lf1;        readFile-&amp;gt;SeekLine( lf1-&amp;gt;start );        state = MS_LEG2;        break;    }case MS_LEG2:               /* dumping leg2 */    if( selbits = selbitTab[ DL_LEG2 ][ diffDiff ] )    {        readFile = lf2;        readFile-&amp;gt;SeekLine( lf2-&amp;gt;start );    }    state = MS_DIFFDIFF;    break;&lt;/div&gt;Really?  Really.  This is the best they could come up with for "Beautiful Code".  It looks like some 1980's era hackers 4am jolt-ridden finger-barf.&lt;br /&gt;&lt;br /&gt;Then, he starts advising people to avoid deeply nested code by using "Case Statements and Decision Tables". &amp;nbsp; Nothing about inheritance, nothing about refactoring code to pull out duplication.&amp;nbsp; Then he goes on to say that they don't refactor variable and method names on page 532 because they are afraid that it will introduce bugs.&amp;nbsp; So, they DON'T use a statically typed language that catches linking errors at compile time because the footnote say c++?&amp;nbsp; They don't have even a semblance of proper test coverage?&amp;nbsp; No wonder Perforce feels stuck in the 1990s; the software engineers are.&lt;br /&gt;&lt;br /&gt;Avoid this book for anything other than a nice set of stories&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5352278358574279817?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5352278358574279817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/06/book-review-beautiful-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5352278358574279817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5352278358574279817'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/06/book-review-beautiful-code.html' title='Book Review: Beautiful Code'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/TBkB5Gcli5I/AAAAAAAAAHg/6nT1LvU0cnM/s72-c/beautifulCode.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5912821055813789094</id><published>2010-06-16T10:04:00.000-07:00</published><updated>2010-06-16T10:04:25.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book reviews'/><title type='text'>Book Review: The Definitive Guide to Django: Web Development Done Right</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TBkDzPZBipI/AAAAAAAAAHw/1GFref3h8t0/s1600/django.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/TBkDzPZBipI/AAAAAAAAAHw/1GFref3h8t0/s320/django.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I just finished reading &lt;a href="http://www.amazon.com/Definitive-Guide-Django-Development-Right/dp/1590597257"&gt;The Definitive Guide to Django: Web Development Done Right&lt;/a&gt; (ISBN: 978-1590597255).&amp;nbsp; Django is the most popular IOC, ORM, and MVC framework for python that borrows a lot of the Rails community's use of templates for views and Data Access structure.&amp;nbsp; As a professional programmer and web developer with a decent amount of experience with Python, this book was a very easy read.&amp;nbsp; It focused on practice rather than the theory of web design, so it makes sense for web developers familiar with other languages and/or frameworks who are going to be making the plunge into Python web development with Django.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5912821055813789094?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5912821055813789094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/06/book-review-definitive-guide-to-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5912821055813789094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5912821055813789094'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/06/book-review-definitive-guide-to-django.html' title='Book Review: The Definitive Guide to Django: Web Development Done Right'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/TBkDzPZBipI/AAAAAAAAAHw/1GFref3h8t0/s72-c/django.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8797671295778740500</id><published>2010-06-14T14:54:00.000-07:00</published><updated>2010-06-14T16:29:14.914-07:00</updated><title type='text'>The Team Chat Room</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TBa7Li5JOxI/AAAAAAAAAHE/cqgvzjY1sDQ/s1600/698px-Screenshot-XChat-_Moniker42_%40_FreeNode_-_-ubuntuforums_%28%2Btn%29-1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="274" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/TBa7Li5JOxI/AAAAAAAAAHE/cqgvzjY1sDQ/s320/698px-Screenshot-XChat-_Moniker42_%40_FreeNode_-_-ubuntuforums_%28%2Btn%29-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;IRC (Internet Relay Chat) fills a nice gap between e-mail or message boards and a teleconference.&amp;nbsp; It's short and fast, like a real verbal conversation, but it keeps a log of what has been said so if you miss something, you can go back and read it. It alerts you when people mention your name (so you can be dragged into a conversation you may be ignoring).&amp;nbsp; It also makes a decent copy/paste between computers.&lt;br /&gt;&lt;br /&gt;If you need something a little more long-form, such as what a team of programmers may need working on a complex bug, I also really like &lt;a href="https://wave.google.com/wave/"&gt;Google Wave&lt;/a&gt;, which is something like a mash up of IRC and a Wiki.&lt;br /&gt;&lt;br /&gt;I recommend that any team of more than 2 people take the time to set up a team chat room.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8797671295778740500?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8797671295778740500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/06/team-chat-room.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8797671295778740500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8797671295778740500'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/06/team-chat-room.html' title='The Team Chat Room'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/TBa7Li5JOxI/AAAAAAAAAHE/cqgvzjY1sDQ/s72-c/698px-Screenshot-XChat-_Moniker42_%40_FreeNode_-_-ubuntuforums_%28%2Btn%29-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6750162199018479821</id><published>2010-06-03T14:13:00.001-07:00</published><updated>2010-06-16T09:35:50.322-07:00</updated><title type='text'>Enable History Search Using PgUp and PgDown</title><content type='html'>Want to be able to grep your .bash_history inline?  Here's how:&lt;br /&gt;#gedit ~/.inputrc&lt;br /&gt;Add the following lines:&lt;br /&gt;&lt;div class='code'&gt;"\e[5~": history-search-backward&lt;br /&gt;"\e[6~": history-search-forward&lt;br /&gt;&lt;/div&gt;Check out /etc/inputrc for other similar bash input tricks you can add &lt;br /&gt;to your .inputrc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6750162199018479821?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6750162199018479821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/06/enable-history-search-using-pgup-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6750162199018479821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6750162199018479821'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/06/enable-history-search-using-pgup-and.html' title='Enable History Search Using PgUp and PgDown'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4282579954134887839</id><published>2010-04-24T09:42:00.000-07:00</published><updated>2010-04-24T09:50:22.532-07:00</updated><title type='text'>Ripping Audio Books On CD To MP3</title><content type='html'>Lots of people who listen to Podcasts may be interested in audio books as well.&amp;nbsp; The most popular format to purchase/rent/borrow audio books is on CD.&amp;nbsp; But, the CD player is a dying piece of hardware, so one might want to convert these CDs to MP3 files.&amp;nbsp; Unfortunately, normal MP3 conversion software will make it hard because it expects each track to be a different song on an album.&amp;nbsp; Additionally, most audio books appear to lack CDDB information, so you may have trouble tagging your audio files.&amp;nbsp; A more preferrable format would be to take each disk of the book into it's own ~70 minute audio file, just like a podcast.&amp;nbsp; Here's how to do it using Ubuntu:&lt;br /&gt;&lt;br /&gt;First, install abcde:&lt;br /&gt;&lt;div class="code"&gt;sudo apt-get install abcde lame&lt;/div&gt;&lt;br /&gt;Next, use the following command to rip the CD.&lt;br /&gt;&lt;div class="code"&gt;mkdir ./temp; cd temp; abcde -1xo mp3 -d /dev/scd0 ;find $1 -name *.mp3| while read FILE; do mv "$FILE" ../bookname01.mp3 ;done;cd ..&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's a little cheat sheet from abcde's ripper output:&lt;br /&gt;&lt;a href="http://www.xiph.org/paranoia/manual.html" shape="rect" target="_blank"&gt;http://www.xiph.org/paranoia/manual.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OUTPUT SMILIES&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&lt;br clear="none" /&gt;     :-)  Normal operation, low/no jitter&lt;br clear="none" /&gt;     :-|  Normal operation, considerable jitter&lt;br clear="none" /&gt;     :-/  Read drift&lt;br clear="none" /&gt;     :-P  Unreported loss of streaming in atomic read operation&lt;br clear="none" /&gt;     8-|  Finding read problems at same point during reread; hard to  &lt;br clear="none" /&gt;cor-rect&lt;br clear="none" /&gt;     :-0  SCSI/ATAPI transport error&lt;br clear="none" /&gt;     :-(  Scratch detected&lt;br clear="none" /&gt;     ;-(  Gave up trying to perform a correction&lt;br clear="none" /&gt;     8-X  Aborted read due to known, uncorrectable error&lt;br clear="none" /&gt;     :^D  Finished extracting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PROGRESS BAR SYMBOLS       &lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;-   Jitter correction required&lt;br clear="none" /&gt;      +   Unreported loss of streaming/other error in read&lt;br clear="none" /&gt;      !   Errors  found  after stage 1 correction; the drive is making &lt;br clear="none" /&gt;the same error through multiple re-reads, and cdparanoia  is having &lt;br clear="none" /&gt;trouble detecting them.&lt;br clear="none" /&gt;      e   SCSI/ATAPI transport error (corrected)&lt;br clear="none" /&gt;      V   Uncorrected error/skip&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally, if you want to update the ID3 tags for all of your ripped files, use &lt;a href="http://massid3lib.sourceforge.net/"&gt;tagtool&lt;/a&gt; to mass ID3 tag the folder of MP3s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4282579954134887839?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4282579954134887839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/04/ripping-audio-books-on-cd-to-mp3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4282579954134887839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4282579954134887839'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/04/ripping-audio-books-on-cd-to-mp3.html' title='Ripping Audio Books On CD To MP3'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-6096470526309356349</id><published>2010-04-14T17:03:00.000-07:00</published><updated>2010-04-14T17:03:01.609-07:00</updated><title type='text'>Removing Firefox 3's Star Button (Bookmark Button)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_e5Dy8J6Cluc/S8ZXZh1duLI/AAAAAAAAAG8/sxzzZYoWJTA/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_e5Dy8J6Cluc/S8ZXZh1duLI/AAAAAAAAAG8/sxzzZYoWJTA/s320/Screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;Sick of that little star to the right of the URL in Firefox 3?&amp;nbsp; Here's how to hide it.&amp;nbsp; edit your &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;userChrome.css&lt;/span&gt; file to add the following:&lt;br /&gt;&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;&lt;code&gt;/* Remove the Bookmark star */&lt;br /&gt;#star-button {&lt;br /&gt;display: none !important; } &lt;/code&gt;&lt;/div&gt;&lt;br /&gt;If you don't have a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;userChrome.css&lt;/span&gt;, locate the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;userChrome-example.css&lt;/span&gt; that comes with firefox, make a copy of it, and add the above text to the bottom.&amp;nbsp; I suggest replacing it with the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4076"&gt;addthis&lt;/a&gt; extension which allows bookmarking to your browser as well as dozens of other sites such as digg, instapaper, facebook, twitter, evernote, and blogger.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ffextensionguru.wordpress.com/2008/05/10/fx-3-removing-bookmark-star-button/"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-6096470526309356349?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/6096470526309356349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/04/removing-firefox-3s-star-button.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6096470526309356349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/6096470526309356349'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/04/removing-firefox-3s-star-button.html' title='Removing Firefox 3&apos;s Star Button (Bookmark Button)'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e5Dy8J6Cluc/S8ZXZh1duLI/AAAAAAAAAG8/sxzzZYoWJTA/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1023763768845083902</id><published>2010-04-06T17:25:00.001-07:00</published><updated>2010-04-06T17:25:22.175-07:00</updated><title type='text'>Stop Thunderbird From Asking For a Password Using AOL Or Gmail IMAP Accounts</title><content type='html'>IMAP is far superior to POP, and AOL and Gmail both support IMAP.&amp;nbsp; If you are using Gmail or AOL mail with Thunderbird via an IMAP connection, Thunderbird may start asking for your password over and over again.&amp;nbsp; This can be because Thunderbird is creating too many simultaneous connections to the server.&amp;nbsp; The fix it to force Thunderbird to pipeline all updates in one single connection, which can make updating folders a little slower but fix this annoying bug.&amp;nbsp; Here's how:&lt;br&gt; &lt;ul&gt;   &lt;li&gt;Click&lt;strong&gt; Edit &amp;gt; Account Settings&amp;nbsp; &lt;br&gt;     &lt;/strong&gt;&lt;/li&gt;   &lt;li&gt;Find the account which has the problem and click&lt;strong&gt; Server Settings&lt;/strong&gt; &lt;br&gt;   &lt;/li&gt;   &lt;li&gt;Click &lt;strong&gt;&amp;gt; Advanced&lt;/strong&gt;&lt;br&gt;   &lt;/li&gt;   &lt;li&gt;Change &lt;strong&gt;Maximum Number&lt;/strong&gt;&lt;strong&gt; of server connections&lt;/strong&gt;&lt;strong&gt; to cache&lt;/strong&gt; to 1.&lt;/li&gt; &lt;/ul&gt; &lt;a  href="http://kb.siteground.com/article/How_to_change_max_number_of_IMAP_connections_in_Thunderbird.html"&gt;The Source&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1023763768845083902?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1023763768845083902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/04/stop-thunderbird-from-asking-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1023763768845083902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1023763768845083902'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/04/stop-thunderbird-from-asking-for.html' title='Stop Thunderbird From Asking For a Password Using AOL Or Gmail IMAP Accounts'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3774667021996448619</id><published>2010-04-06T15:33:00.000-07:00</published><updated>2010-06-16T09:37:47.665-07:00</updated><title type='text'>Running Your Oracle Query In The Background</title><content type='html'>I hate Oracle.&amp;nbsp; That given, sometimes you have to run a query that takes FOREVER, and you want to go home with your laptop.&amp;nbsp; If you have access to a server with SQL*Plus, you can run the query there in the backgrund.&amp;nbsp; Here's how:&lt;br /&gt;&lt;br /&gt;First, create a text file containing your query.&lt;br /&gt;&lt;br /&gt;Always start with&lt;br /&gt;&lt;div class='code'&gt;SET PAGESIZE 50000SET MARKUP HTML ON TABLE "class=detail cellspacing=0" ENTMAP OFFSPOOL output.html&lt;/div&gt;Then, place your query under that.&amp;nbsp; Then, end with&lt;br /&gt;&lt;div class='code'&gt;;SPOOL OFFquit;&lt;/div&gt;To run the query, ssh into your server, &lt;br /&gt;&lt;div class='code'&gt;nohup sqlplus username/password@oracleServer @nameOfTheQuery.sql &amp;amp;&lt;/div&gt;&lt;br /&gt;Once the query is complete, you should be able to open the resulting HTML file with OpenOffice Sheet to view as a spreadsheet.&amp;nbsp; I like to paste the query into the second sheet for reference, reformat the columns to the proper space, and re-save as an XLS for a customer or an OpenDocument workbook for myself (because it's smaller and open).&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: courier new;"&gt;&lt;br clear="none" /&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;a href="http://68.142.116.68/docs/cd/B19306_01/server.102/b14357/ch6.htm#i1081008"&gt;&lt;span style="font-family: inherit;"&gt;More information&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3774667021996448619?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3774667021996448619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/04/running-your-oracle-query-in-background.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3774667021996448619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3774667021996448619'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/04/running-your-oracle-query-in-background.html' title='Running Your Oracle Query In The Background'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1183444814029362179</id><published>2010-04-06T15:19:00.001-07:00</published><updated>2010-04-06T15:19:27.510-07:00</updated><title type='text'>Make the Oracle Optimizer Smarter And Your Queries Faster</title><content type='html'>Most Oracle DBAs know this, but us programmers may not be aware that the Oracle query optimizer doesn't automatically periodically scan its data to make sure the choices it makes are accurate for the data that's in the tables.&amp;nbsp; Without doing so, the wrong indexes may be chosen, or full table scans may be run instead of far more optimal index searches.&amp;nbsp; To force the index metadata to be updated, run the following query:&lt;font face="Courier New, Courier, monospace"&gt;&lt;br&gt; &lt;/font&gt; &lt;blockquote&gt;&lt;font face="Courier New, Courier, monospace"&gt;analyze table TABLE_NAME compute statistics;&lt;/font&gt;&lt;br&gt; &lt;/blockquote&gt; &lt;a href="http://www.oradev.com/create_statistics.jsp"&gt;More Information&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1183444814029362179?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1183444814029362179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/04/make-oracle-optimizer-smarter-and-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1183444814029362179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1183444814029362179'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/04/make-oracle-optimizer-smarter-and-your.html' title='Make the Oracle Optimizer Smarter And Your Queries Faster'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5011577332879284444</id><published>2010-03-17T15:43:00.000-07:00</published><updated>2010-03-18T13:27:31.139-07:00</updated><title type='text'>Big Visible Cruise Web Updated!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/S6FZl4fKwAI/AAAAAAAAAG0/6SKO9JdWYjY/s1600-h/bvcScreenshotCropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/S6FZl4fKwAI/AAAAAAAAAG0/6SKO9JdWYjY/s320/bvcScreenshotCropped.png" /&gt;&lt;/a&gt;&lt;/div&gt;I just updated BigVisibleCruiseWeb!&amp;nbsp; I created this tool as a cross-platform web-based clone of the C# "Big Visible Cruise" as a way to monitor the status of all of your builds across any number of build servers.&amp;nbsp; It has support for filtering (with regular expressions passed in the URL) and hiding (via a menu driven interface) builds you don't care about, and a mini mode for embedding on your project wiki.&amp;nbsp; Here are some of the new features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Now includes an embedded Jetty server so you just kick the jar off to start it instead of having to deploy a .war file.&lt;/li&gt;&lt;li&gt;It now builds with maven.&lt;/li&gt;&lt;li&gt;Cruise/Hudson build feeds as well as the bvc server port can be configured on the command line.&lt;/li&gt;&lt;li&gt;Better command line logging.&lt;/li&gt;&lt;/ul&gt;If you use CruiseControl or Hudson to automate your build process, check this tool out because it only takes seconds to get up and running!&lt;br /&gt;&lt;a href="http://code.google.com/p/big-visible-cuise-web/"&gt;http://code.google.com/p/big-visible-cuise-web/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5011577332879284444?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5011577332879284444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/big-visible-cruise-web-updated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5011577332879284444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5011577332879284444'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/big-visible-cruise-web-updated.html' title='Big Visible Cruise Web Updated!'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/S6FZl4fKwAI/AAAAAAAAAG0/6SKO9JdWYjY/s72-c/bvcScreenshotCropped.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4805471496705646074</id><published>2010-03-15T14:55:00.000-07:00</published><updated>2010-03-15T14:55:01.866-07:00</updated><title type='text'>Easiest Way To Embed Jetty With A Spring Web Project</title><content type='html'>So, you have your spring project that works great inside of somethinglike Tomcat or Resin, but you want to distribute it like a normalexecutable .jar file.&amp;nbsp; Look around the Internet, and you'll find someextremely complex directions.&amp;nbsp; They don't have to be.&amp;nbsp; As an example,you want to be able to access the pages at&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://localhost:8080/cruise/&lt;/span&gt;, and you have a standard &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;WebContent&lt;/span&gt;folder that contains &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;WEB-INF&lt;/span&gt; in it.&amp;nbsp;&amp;nbsp; Just add the jetty jar files toyour classpath, and then create a main class with the following:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;package yourProject;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.webapp.WebAppContext;public class MainClass    public static void main(String[] args) throws Exception{        Server server = new Server(8080);        WebAppContext context = new WebAppContext();        context.setDescriptor("/WEB-INF/web.xml");        context.setResourceBase("WebContent");        context.setContextPath("/cruise");        context.setParentLoaderPriority(true);        server.setHandler(context);        server.start();        server.join();    }}&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4805471496705646074?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4805471496705646074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/so-you-have-your-spring-project-that.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4805471496705646074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4805471496705646074'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/so-you-have-your-spring-project-that.html' title='Easiest Way To Embed Jetty With A Spring Web Project'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-4730306638657721940</id><published>2010-03-15T10:10:00.001-07:00</published><updated>2010-03-15T10:10:44.652-07:00</updated><title type='text'>Ubuntu 9.10: How To Do Nothing When Closing The Laptop Lid</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://1.bp.blogspot.com/_e5Dy8J6Cluc/S55qFLEsSrI/AAAAAAAAAGs/lnjBN3JdOWU/s1600-h/Screenshot-744653.png"&gt;&lt;img src="http://1.bp.blogspot.com/_e5Dy8J6Cluc/S55qFLEsSrI/AAAAAAAAAGs/lnjBN3JdOWU/s320/Screenshot-744653.png"  border="0" alt="" id="BLOGGER_PHOTO_ID_5448909236269238962" /&gt;&lt;/a&gt;&lt;/p&gt;The available options for what to do when the lid is closed in "Power Management Preferences" does not include "nothing".&amp;nbsp; But, sometimes, you want your docked laptop to operate when closed.&amp;nbsp; Here's how to disable the sleep/hibernate/blank screen when the laptop lid is closed:&lt;br&gt; &lt;pre&gt;$ gconf-editor&lt;/pre&gt; &lt;ul&gt;   &lt;li&gt;Go To: apps--&amp;gt;gnome-power-manager--&amp;gt;buttons &lt;/li&gt;   &lt;li&gt;Set lid_ac and/or lid_battery to "nothing" (without the quotes).&lt;/li&gt; &lt;/ul&gt; &lt;a href="http://ubuntuforums.org/showthread.php?t=1319921"&gt;Source&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-4730306638657721940?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/4730306638657721940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/ubuntu-910-how-to-do-nothing-when.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4730306638657721940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/4730306638657721940'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/ubuntu-910-how-to-do-nothing-when.html' title='Ubuntu 9.10: How To Do Nothing When Closing The Laptop Lid'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e5Dy8J6Cluc/S55qFLEsSrI/AAAAAAAAAGs/lnjBN3JdOWU/s72-c/Screenshot-744653.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-289856990947085111</id><published>2010-03-08T22:36:00.001-08:00</published><updated>2010-03-08T22:36:45.678-08:00</updated><title type='text'>Just stumbled on the "driver" for a serial port scale I wrote in 2005 on the company owner's personal site.</title><content type='html'>We bought the scale to use in the Shipping department with the custom &lt;br&gt;shipping software I was working on.  The guy I wrote it for apparently &lt;br&gt;still has it available for clients to re-use.  I was pretty proud of it &lt;br&gt;at the time, with the commented out code for developers who want to test &lt;br&gt;how it works and the fact that it was my first forray into reading and &lt;br&gt;writing directly from USB/Serial ports using a thin wrapper around JNI.&lt;p&gt;The site:&lt;br&gt;&lt;a href="http://www.phizzypup.com/Scale_Software/scaleReader.zip"&gt;http://www.phizzypup.com/Scale_Software/scaleReader.zip&lt;/a&gt;&lt;p&gt;The guy even saved the e-mail I sent him about it:&lt;br&gt;&lt;a href="http://www.phizzypup.com/Scale_Software/ReJavaAPI.htm"&gt;http://www.phizzypup.com/Scale_Software/ReJavaAPI.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-289856990947085111?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/289856990947085111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/just-stumbled-on-driver-for-serial-port.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/289856990947085111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/289856990947085111'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/just-stumbled-on-driver-for-serial-port.html' title='Just stumbled on the &quot;driver&quot; for a serial port scale I wrote in 2005 on the company owner&apos;s personal site.'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-5214537839774381959</id><published>2010-03-08T19:45:00.000-08:00</published><updated>2010-03-08T19:49:14.361-08:00</updated><title type='text'>Mr. Kanban, Scrum Isn't So Bad.</title><content type='html'>I recently a fairly decent &lt;a  href="http://agileproductdesign.com/blog/2009/kanban_over_simplified.html"&gt;article&lt;/a&gt; that describes Kanban whilst pitting it against Scrum.&amp;nbsp; While I don't know enough about Kanban to make a decent comparison myself, I did find a few issues with the &lt;a  href="http://agileproductdesign.com/blog/2009/kanban_over_simplified.html"&gt;attack on Scrum&lt;/a&gt;.&lt;br&gt; &lt;br&gt; &lt;b&gt;Shrinking The Story:&lt;/b&gt;&lt;br&gt; &lt;br&gt; The original article states as a disadvantage of Scrum:&lt;br&gt; &lt;blockquote&gt;&lt;i&gt;Shrinking stories forces earlier elaboration and decision-making. Where product owners could write their stories fairly generally and consider many of the details later, now breaking them down into smaller stories forces more thinking earlier in a planning lifecycle.&lt;br&gt;   &lt;/i&gt;&lt;/blockquote&gt; What the author misses is that large stories inevitably have ambiguous requirements.&amp;nbsp; This is why waterfall requires extremely long planning, and short iterations require short planning.&amp;nbsp; It would seem that the larger the story, the more upfront planning is required for that story.&amp;nbsp; That makes sense for two reasons:&lt;br&gt; &lt;ol&gt;   &lt;li&gt;It's useful for the product owner and the team to estimate how long a story will take.&amp;nbsp; In Scrum this is necessary for time-boxing.&amp;nbsp; In Kanban, this may not be as necessary for the team, but it will certainly be necessary for any product owner with a boss who wants to know how long something will take for short and mid-term project planning.&lt;/li&gt;   &lt;li&gt;The more "meat" is in a story, the longer it will take to determine what needs to be completed before the developers and product owner can say the story is "done".&amp;nbsp; Larger stories require more time to hash our ambiguity that may exist in customer requirements.&amp;nbsp; &lt;br&gt;   &lt;/li&gt; &lt;/ol&gt; My current Scrum team runs at a velocity of 25-30 Scrum story points per 2-week iteration, yet we have an informal rul that we never take in a story larger than 8 points (13 being the next on the scale).&amp;nbsp; This is because we believe that stories that large come with too much ambiguity which causes stories to often be brought back into future backlogs for completion.&amp;nbsp; Now, some may say that such small slices lead to "useless features", but let us not forget that proof of progress is a valuable deliverable in and of itself.&lt;br&gt; &lt;br&gt; What we attempt to avoid is upfront design, but what we must not sacrifice is requirement divergence or misunderstanding, especially with hostile/new product owners, or product owner who tend to micro-manage teams when given the opportunity.&amp;nbsp; Where Scrum places a larger responsibility on the product owner to manage a larger backlog, Kanban places a larger responsibility on the product owner to create more specific requirements and deal with unexpected delays due to requirement divergence.&lt;br&gt; &lt;br&gt; &lt;b&gt;Testing:&lt;/b&gt;&lt;br&gt; &lt;blockquote&gt;&lt;i&gt;It&amp;#8217;s difficult to fit thorough validation of the story into a short time-box as well. So, often testing slips into the time-box after. Which leaves the nasty problem of what to do with bugs - which often get piped into a subsequent time-box.&lt;br&gt;   &lt;/i&gt;&lt;/blockquote&gt; The simple solution to this problem is to integrate the testing team into the Scrum team and make "test" a task instead of a task state.&amp;nbsp; Now, the team is responsible for estimating the time required to test the feature right along with all other development.&amp;nbsp; This is good because it places "testability" in the hands of the developer and encourages TDD.&lt;br&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-5214537839774381959?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/5214537839774381959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/mr-kanban-scrum-isnt-so-bad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5214537839774381959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/5214537839774381959'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/mr-kanban-scrum-isnt-so-bad.html' title='Mr. Kanban, Scrum Isn&apos;t So Bad.'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-1933714919138489025</id><published>2010-03-08T10:22:00.000-08:00</published><updated>2010-12-22T10:48:44.633-08:00</updated><title type='text'>Disable Caps Lock Key in Linux</title><content type='html'>I hate the caps lock key.  So, in my &lt;code&gt;~/.bash_profile&lt;/code&gt; I have the following line to disable caps lock:&lt;br /&gt;&lt;code&gt;xmodmap -e "remove lock = Caps_Lock"&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;To turn off caps lock key, enter:&lt;br /&gt;&lt;code&gt;$ xmodmap -e "remove lock = Caps_Lock"&lt;/code&gt;&lt;br /&gt;Now caps key is disabled. To enable caps key, enter:&lt;br /&gt;&lt;code&gt;$ xmodmap -e "add lock = Caps_Lock"&lt;/code&gt;&lt;/blockquote&gt;&lt;a href="http://www.cyberciti.biz/faq/linux-deactivate-caps-lock/"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-1933714919138489025?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/1933714919138489025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/disable-caps-lock-key-in-linux.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1933714919138489025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/1933714919138489025'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/disable-caps-lock-key-in-linux.html' title='Disable Caps Lock Key in Linux'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3913685606676873195</id><published>2010-03-04T10:46:00.000-08:00</published><updated>2010-03-04T10:49:02.705-08:00</updated><title type='text'>How To Get Command History In sql*plus</title><content type='html'>&lt;blockquote&gt;sql*plus does not have a command history function under Linux and Unix.  Lately I listened to Tom Kyte at one of his seminars he delivered in September in Zurich. He used a virtual Linux machine and had a command history for his sql*plus obviousely.  He told us that he used a utility called rlwrap for this.  rlwrap is a readline wrapper for shell commands which uses input from the controlling terminal.  It adds a persistent input history for each command and supports user-defined completion.&lt;/blockquote&gt;Under Ubuntu, you can install rlwrap by:&lt;br /&gt;$ &lt;code&gt;sudo apt-get install rlwrap&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And, you can start sqlplus:&lt;br /&gt;$ &lt;code&gt;rlwrap sqlplus username/password@server&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Finally, the following alias in .bashrc will allow you to start sqlplus as normal with rlwrap turned on by default:&lt;br /&gt;&lt;code&gt;alias sqlplus='rlwrap sqlplus'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sysdba.wordpress.com/2006/10/08/how-to-use-rlwrap-to-get-a-command-history-in-sqlplus/"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3913685606676873195?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3913685606676873195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/how-to-use-rlwrap-to-get-command.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3913685606676873195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3913685606676873195'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/how-to-use-rlwrap-to-get-command.html' title='How To Get Command History In sql*plus'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-3184107679881439331</id><published>2010-03-02T15:57:00.000-08:00</published><updated>2010-03-02T15:58:25.418-08:00</updated><title type='text'>Join Mp3 From The Command Line</title><content type='html'>Ever want to join a bunch of MP3 files together at the command line?&amp;nbsp; Here's how. &lt;br /&gt;&lt;br /&gt;In Linux/Mac: &lt;code&gt;cat *.mp3 &amp;gt; newfile.mp3&lt;/code&gt;&lt;br /&gt;In Windows: &lt;code&gt;copy /b *.mp3 c:\new.mp3&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ghacks.net/2008/11/18/join-mp3-from-the-command-line/"&gt;Join Mp3 From The Command Line&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-3184107679881439331?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/3184107679881439331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/03/join-mp3-from-command-line.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3184107679881439331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/3184107679881439331'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/03/join-mp3-from-command-line.html' title='Join Mp3 From The Command Line'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-8758778596451099161</id><published>2010-02-24T19:50:00.000-08:00</published><updated>2010-02-24T19:50:50.470-08:00</updated><title type='text'>SSHNotes - Waikato Linux Users Group</title><content type='html'>Want to connect to a remote SSH server and have it remember the exact state of the terminal including the running applications?  This even works when a connection is dropped.&lt;br /&gt;&lt;div class="tightenable"&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;blockquote class="tightenable"&gt;&lt;pre class="tightenable top bottom"&gt;ssh joe@home.sweet.home screen -rx&lt;br /&gt;Must be connected to a terminal.&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="tightenable"&gt;This is &lt;a class="wiki" href="http://www.wlug.org.nz/Screen"&gt;Screen&lt;/a&gt; complaining, not &lt;a class="wiki" href="http://www.wlug.org.nz/SSH"&gt;SSH&lt;/a&gt;. Well, you can provide a terminal easily by using the &lt;tt&gt;-t&lt;/tt&gt; switch: &lt;tt&gt;ssh -t user@host screen -rx&lt;/tt&gt;&lt;/div&gt;&lt;div class="tightenable"&gt;Combined with &lt;a class="wiki" href="http://www.wlug.org.nz/SSHKeys"&gt;SSHKeys&lt;/a&gt; it's excellent for reconnecting those &lt;a class="wiki" href="http://www.wlug.org.nz/IRC"&gt;IRC&lt;/a&gt; sessions with a single key/buttonpress.&lt;/div&gt;&lt;/blockquote&gt;The resulting command should look like this:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;ssh username@host.net -t 'screen -RD'&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.wlug.org.nz/SSHNotes"&gt;SSHNotes - Waikato Linux Users Group&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-8758778596451099161?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/8758778596451099161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/02/sshnotes-waikato-linux-users-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8758778596451099161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/8758778596451099161'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/02/sshnotes-waikato-linux-users-group.html' title='SSHNotes - Waikato Linux Users Group'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2643923222133320297.post-9211999763303411140</id><published>2010-02-17T11:31:00.000-08:00</published><updated>2010-02-17T11:31:02.517-08:00</updated><title type='text'>Easy Video Screen Capturing In Linux (gtk-recordMyDesktop)</title><content type='html'>&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dXCRy1RIWi8&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/dXCRy1RIWi8&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Creating a video screen capture tool for Ubuntu!&amp;nbsp; Works really well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2643923222133320297-9211999763303411140?l=blog.davidron.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davidron.com/feeds/9211999763303411140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.davidron.com/2010/02/easy-video-screen-capturing-in-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/9211999763303411140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2643923222133320297/posts/default/9211999763303411140'/><link rel='alternate' type='text/html' href='http://blog.davidron.com/2010/02/easy-video-screen-capturing-in-linux.html' title='Easy Video Screen Capturing In Linux (gtk-recordMyDesktop)'/><author><name>David Ron</name><uri>http://www.blogger.com/profile/03498490798803568055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_e5Dy8J6Cluc/SrlBBbSBKvI/AAAAAAAAADM/04JlWpf0HVE/S220/bighead.jpg'/></author><thr:total>0</thr:total></entry></feed>
