<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-6181310435977891397</id><updated>2008-08-07T10:11:06.778-04:00</updated><title type="text">cheaphack</title><link rel="alternate" type="text/html" href="http://www.cheaphack.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.cheaphack.net/feeds/posts/default" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/cheaphack" type="application/atom+xml" /><feedburner:emailServiceId>1683636</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:browserFriendly></feedburner:browserFriendly><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3621382758935900093</id><published>2008-07-30T14:24:00.011-04:00</published><updated>2008-07-30T16:30:51.100-04:00</updated><title type="text">On Proving your Identity</title><content type="html">I purchased a new Dell Latitude D630 laptop today.  I'm excited, but I was also quite cautious, since this is more than I'd ever spent on a laptop before.  Nonetheless, my old laptop is effectively dead, and I need one that can last me through the next five years of grad school.&lt;br /&gt;&lt;br /&gt;About an hour after I placed the order, I received a call from some 800 number.  I had sort of a goofy conversation with them.  Here's a summary of my conversation with him, and a later conversation I had with my bank:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Them&lt;/span&gt;: Hi this is &lt;span style="font-style: italic;"&gt;Mr. Foo&lt;/span&gt; calling from &lt;span style="font-style: italic;"&gt;Bar, Inc.&lt;/span&gt;  We contract with your bank or credit union to provide fraud monitoring and prevention.  We noticed some questionable transactions, and wanted to verify them with you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;(unimpressed by the phrase "bank or credit union") &lt;/span&gt;Umm... Thanks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Them&lt;/span&gt;:  Could you please tell me your name and the last four of your social security number?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me&lt;/span&gt;: I'd love to, but first, &lt;span style="font-weight: bold;"&gt;can you prove to me that you really are affiliated with my bank?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Them&lt;/span&gt;: Unfortunately, we cannot do that until you &lt;span style="font-weight: bold;"&gt;verify with us first&lt;/span&gt;.  Besides, it's &lt;span style="font-weight: bold;"&gt;just the last four digits&lt;/span&gt; of your social security number---what harm is there in that?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;(trying not to laugh)&lt;/span&gt; Well, I use those last four digits to prove my identity to my bank-or-credit-union, my cell phone company, my health insurance company, and even this morning to prove my identity to my University.  Those last four digits have become quite an important secret, and I don't give them out readily &lt;span style="font-style: italic;"&gt;(any more)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Furthermore, because of the structure of social security numbers, the first five digits aren't very random.  The first three digits, for instance, can be looked up as a function of the year and state of your birth, so I must assume they are public knowledge.  If I tell you my last four, then you know everything except the middle two; you would be able to narrow my social down to 1 in 100.&lt;br /&gt;&lt;br /&gt;No disrespect intended, Sir, but even if I assume that you are who you say you are, and that you have a legitimate relationship with my bank-or-credit-union, I have no assurance that your company has any decent standards for data protection, or that everyone who works at your company has good intentions.&lt;br /&gt;&lt;br /&gt;Instead, I'll have to call my bank-or-credit-union directly.  At least then, I'll know who I am speaking with.&lt;/blockquote&gt;I wasn't really trying to give this guy a hard time, but we have to protect ourselves.  Given the time-coincidence between the purchase and the call, I was pretty sure that Mr. Foo was indeed who he claimed to be.  Nonetheless, I opted to call my bank-or-credit-union to be sure, and had the whole situation cleared up.&lt;br /&gt;&lt;br /&gt;My main point here is &lt;span style="font-weight: bold;"&gt;to call attention to the failings of our everyday methods of proving our identities&lt;/span&gt;.  In nearly every context, an applicant claims and identity, and then provides a piece of knowledge that is known only to the applicant and the service provider.  This could be your username/password on a website, your name/last-4 to your phone company, or your name/credit card/expiration date/billing address to a vendor.  Variations of this scheme go on forever, and &lt;span style="font-weight: bold;"&gt;none of them is secure&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;And the failing of all of these methods is: &lt;span style="font-weight: bold;"&gt;to prove your identity, you give away your identity&lt;/span&gt;.  If the service provider on the other end (or even one bad employee at that service provider) decides to, he may impersonate you.  If someone set up a website y0urbank.com that looked exactly like yourbank.com,&lt;br /&gt;you may accidentally give them your identity.  It's even possible that your service provider acts in good faith, but all of your identifying information is stolen from their databases by some malicious agent.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;There are alternatives&lt;/span&gt;; I'll present two cryptographic solutions below.  Neither of these is my invention.  In this modern day and age---and considering that &lt;a href="http://en.wikipedia.org/wiki/Credit_card_fraud"&gt;credit card companies are liable for fraud&lt;/a&gt;---&lt;span style="font-weight: bold;"&gt;I don't know why they aren't in common use.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While I'm on the topic, I should also announce that I am creating an open-source RF keyfob that performs the first authenication scheme below.  That's why I developed &lt;a href="http://www.cheaphack.net/2008/06/implementation-of-sha-1-on-pic16-f88.html"&gt;SHA-1 for the PIC16&lt;/a&gt; late last month).  The device is still in the works, and has been delayed by the death of my laptop, but will hit the scene before I start grad school.&lt;br /&gt;&lt;br /&gt;The first solution is relatively simple.  Presume for a second that both the applicant (me) and the service provider (my bank-or-credit-union) share some secret &lt;span style="font-style: italic;"&gt;S_me&lt;/span&gt;.  You can think of this as a password, or more generally as a really long number.  Instead of giving &lt;span style="font-style: italic;"&gt;S_me&lt;/span&gt; away (and as a result, giving away my identity), I can prove that I know &lt;span style="font-style: italic;"&gt;S_me&lt;/span&gt;.  In order to authenticate:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I tell my bank-or-credit-union my purported identity "Nick Johnson."&lt;/li&gt;&lt;li&gt;My bank creates a &lt;a href="http://en.wikipedia.org/wiki/Cryptographic_nonce"&gt;nonce&lt;/a&gt; &lt;span style="font-style: italic;"&gt;N_bank&lt;/span&gt; or in other words a long random number that is different each time. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;I compare &lt;span style="font-style: italic;"&gt;N_bank&lt;/span&gt; to all of the nonces I have seen in the past.  If I have seen it before, I reject it and start from the beginning.&lt;/li&gt;&lt;li&gt;I create a second nonce &lt;span style="font-style: italic;"&gt;N_me&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;I can now calculate a magic number by concatenating the digits of &lt;span style="font-style: italic;"&gt;N_bank&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;S_me&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;N_me.  &lt;/span&gt;Please note that only the bank-or-credit-union and I could have produced this magic number, since only we know &lt;span style="font-style: italic;"&gt;S_me&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;I compute the &lt;a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function"&gt;cryptographic hash&lt;/a&gt; &lt;span style="font-style: italic;"&gt;H&lt;/span&gt; of the magic number.&lt;/li&gt;&lt;li&gt;I send &lt;span style="font-style: italic;"&gt;N_me&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;H&lt;/span&gt; to my bank-or-credit-union.&lt;/li&gt;&lt;li&gt;My bank-or-credit-union compares &lt;span style="font-style: italic;"&gt;N_me&lt;/span&gt; to all of the nonces I have sent in the past.  If my bank-or-credit-union has ever seen this before, he rejects the whole transaction, and tells me to start from the beginning.&lt;/li&gt;&lt;li&gt;My bank-or-credit-union, knowing &lt;span style="font-style: italic;"&gt;N_bank&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;S_me&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;N_me&lt;/span&gt; can now also compute &lt;span style="font-style: italic;"&gt;H&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;My bank-or-credit-union compares &lt;span style="font-style: italic;"&gt;H&lt;/span&gt;s, and if they match, can be confident that I know the secret.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This way, even if someone overhears the entire conversation, they &lt;span style="font-weight: bold;"&gt;neither learn any information&lt;/span&gt; about my secret (because of properties of the hash function), nor do they have &lt;span style="font-weight: bold;"&gt;a dialog that they can replay&lt;/span&gt; (because the nonces must change each time).  By performing this protocol again in reverse, my bank-or-credit-union can also prove it's identity to me.&lt;br /&gt;&lt;br /&gt;The problem with the first scheme is the shared secret.  The two parties must agree upon some secret, and communicate one to the other, hoping that no one overhears.  Also, although best practice is to &lt;a href="http://en.wikipedia.org/wiki/Password#Form_of_stored_passwords"&gt;store passwords as hash values&lt;/a&gt;, this scheme requires both parties to store the passwords as cleartext, making &lt;span style="font-weight: bold;"&gt;data-theft a possible issue&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;There is another algorithm to perform this sort of exchange---the classic &lt;a href="http://en.wikipedia.org/wiki/Zero-knowledge_proof"&gt;zero-knowledge proof&lt;/a&gt;.  It is more complicated conceptually, as well as in computation-time and -space, but doesn't require the service provider to store any secrets, and is &lt;span style="font-weight: bold;"&gt;very sexy&lt;/span&gt;.  I would love to employ it in my RF keyfob project, but I don't think I can make it &lt;span style="font-style: italic;"&gt;fit&lt;/span&gt; into a small, embedded microcontroller.  Let me explain it using an analogy.&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;There's one slice of Pizza left, and we both want it.  Neither of us trust the other to divide it evenly.  So, instead, we agree that one of us will cut the slice in two, and the other has first pick from the halves.  The &lt;a href="http://en.wikipedia.org/wiki/Pareto-optimal"&gt;pareto-optimal&lt;/a&gt; strategy for &lt;span style="font-weight: bold;"&gt;each player&lt;/span&gt; yields an &lt;span style="font-weight: bold;"&gt;equal&lt;/span&gt; half-slice; the first doesn't know what the second will choose, and so he must be prepared for either choice.&lt;br /&gt;&lt;br /&gt;So, what if instead of knowing a secret, suppose instead that I knew the solution to a complicated problem---so complicated that it would take years to solve it.  This knowledge can be used represent my identity, and I can prove that I know it without giving away the solution:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Both my bank-or-credit-union and I agree upon a complicated problem to which only I know the solution.&lt;/li&gt;&lt;li&gt;We repeat these steps until the bank is satisfied of my identity:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;I create a derived problem which is equally complicated to solve, but which I can solve easily since I know the solution to the original.  &lt;span style="font-style: italic;"&gt;It is important that knowing the solution to the derived problem gives no hint to the solution of the original.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I tell my bank-or-credit-union about this derived problem.  I have &lt;span style="font-weight: bold;"&gt;committed to this problem&lt;/span&gt;, and in doing so have claimed that I can demonstrate &lt;span style="font-weight: bold;"&gt;both&lt;/span&gt; that it is equivalent to the original problem &lt;span style="font-weight: bold;"&gt;and&lt;/span&gt; that I know an answer to it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I ask my bank-or-credit-union:  Which would you like to see---the equivalence, or the solution? (Which half would you like to eat?)&lt;/li&gt;&lt;li&gt;My bank-or-credit-union selects one, and I provide the requested information.&lt;/li&gt;&lt;li&gt;My bank-or-credit-union verifies my response.  If it's wrong, it rejects me.  If it's right, it only knows that I wasn't wrong.  In the worst case I predicted its choice in [4], and my bank-or-credit-union is &lt;span style="font-weight: bold;"&gt;now twice as confident&lt;/span&gt; that I know the solution to the original problem.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;This aforementioned protocol, of course, requires a satisfactory problem to perform.  The classic example is the problem of finding the &lt;a href="http://en.wikipedia.org/wiki/Hamiltonian_cycle"&gt;Hamiltonian Cycle&lt;/a&gt; on an &lt;a href="http://en.wikipedia.org/wiki/Undirected_graph"&gt;undirected graph&lt;/a&gt;.  Since this problem is &lt;a href="http://en.wikipedia.org/wiki/Np-complete"&gt;NP-Complete&lt;/a&gt;, we can make the problem arbitrarily hard by using a large enough graph.  However, it is very easy to compute the Hamiltonian Cycle while you build such a graph (or perhaps, more accurately, it is easy to add a Hamiltonian Cycle to a totally random graph).&lt;br /&gt;&lt;br /&gt;With the example above, I would generate a large graph and cycle when I open an new account with the bank, and I would tell the bank the graph, but I would keep the cycle as my secret.  The &lt;span style="font-weight: bold;"&gt;secret doesn't need to travel&lt;/span&gt;, and so we can keep closer tabs on it.&lt;br /&gt;&lt;br /&gt;Additionally, to perform the above protocol, I need some method by which I can create a derived problem.  With the Hamiltonian Cycle problem, this is also easy: I choose a new random name for each vertex in the graph, thus producing a new problem, and I perform the same substitution on the cycle, thus producing the solution to the new problem.  I have created a new problem, equally as large (and presumably, &lt;span style="font-weight: bold;"&gt;equally as difficult&lt;/span&gt; to solve), which I can prove equivalent to the original (by disclosing the random substitution), or which I can solve on demand (by applying the random substitution to the solution to the original). Even if I disclose the derived problem and its solution, my bank-or-credit-union &lt;span style="font-weight: bold;"&gt;gains no knowledge&lt;/span&gt; of the solution to the original.  To do so, it would need to solve the graph isomorphism problem to find the relationship between the two problems.  Graph isomorphism is in NP.&lt;br /&gt;&lt;br /&gt;The major problem with both of these authentication protocols is that they &lt;span style="font-weight: bold;"&gt;require a lot of computation&lt;/span&gt;---more than any human would be able to do in his head.  As a result, the human needs &lt;span style="font-weight: bold;"&gt;a piece of trusted hardware&lt;/span&gt;---analogous to a key---which can serve as his proxy in this exchange.  Such hardware exists, often in the form of smart cards.  Each implementation is a &lt;span style="font-weight: bold;"&gt;black box&lt;/span&gt;; no one is allowed to audit them to see if they really work the way they claim.  Again, sit tight and you can play with my RF keyfob project soon.&lt;br /&gt;&lt;br /&gt;However, like a key, &lt;span style="font-weight: bold;"&gt;anything you have can be stolen&lt;/span&gt;.  To use this device effectively, it should be combined with something that can't be stolen, for instance something you know.  This project is not the ultimate solution, just &lt;span style="font-weight: bold;"&gt;a step in the right direction&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/07/on-proving-your-identity.html" title="On Proving your Identity" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3621382758935900093" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3621382758935900093/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3621382758935900093" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3621382758935900093" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3012722485242815918</id><published>2008-07-28T10:41:00.006-04:00</published><updated>2008-07-31T11:17:57.259-04:00</updated><title type="text">This is New York:: NYPD Untouchable</title><content type="html">I witnessed something scary at Critical Mass last Friday.  I was riding in the crowd for a few hours---a totally peaceful night, no police harassment.  It seemed to me like the quite before a storm.&lt;br /&gt;&lt;br /&gt;But when we made it to Times Square, things changed.  Two young police officers jumped into the road among the cyclists, and knocked one to the ground.  I was immediately behind him; I didn't see him do anything illegal or even interact with the police officers.&lt;br /&gt;&lt;br /&gt;They simply assaulted him.  He tried to flee from the unlawful arrest (which is legal, since unlawful arrest is assault), and was then arrested.&lt;br /&gt;&lt;br /&gt;I admit that, for all I know, this guy was a wanted criminal.  I think this is doubtful; even if he were, I find it hard to believe that an officer could have identified him among the hundreds of cyclists and thousands of tourists in Times Square.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Either way, be very scared.  Riding a bike is a crime.&lt;br /&gt;&lt;br /&gt;UPDATE: Here's a video of it on YouTube:&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07810605351745286 visible ontop" href="http://www.youtube.com/v/oUkiyBVytRQ&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-07810605351745286 visible ontop" href="http://www.youtube.com/v/oUkiyBVytRQ&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 15px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-033411075430121595 visible ontop" href="http://www.youtube.com/v/oUkiyBVytRQ&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/a&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oUkiyBVytRQ&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/oUkiyBVytRQ&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Also seen on &lt;a href="http://gothamist.com/2008/07/28/cop_caught_on_video_assaulting_cycl.php"&gt;Gothamist&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPDATE: &lt;a href="http://www.streetsblog.org/2008/07/28/cop-assaults-critical-mass-rider-charges-filed-against-cyclist/"&gt;Streetsblog reports&lt;/a&gt;,&lt;br /&gt;&lt;blockquote&gt;Mark Taylor, an attorney with the firm representing the cyclist, says he is hopeful the charges will be dropped in light of the video evidence. Asked whether the NYPD plans to go ahead with the charges, a department spokesman said the matter is being investigated. Since the video surfaced, the officer has been put on desk duty.&lt;/blockquote&gt;I hope justice might be served for once.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/07/this-is-new-york-nypd-untouchable.html" title="This is New York:: NYPD Untouchable" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3012722485242815918" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3012722485242815918/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3012722485242815918" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3012722485242815918" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-225527771814833380</id><published>2008-07-24T19:51:00.005-04:00</published><updated>2008-07-24T20:18:48.500-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="&quot;unix is great&quot;" /><title type="text">Recovering deleted files from ext-3 filesystems</title><content type="html">Exercise for the reader:  where can you insert a space in this command to delete all of your files: "&lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?rm"&gt;rm&lt;/a&gt; *.toc" ?&lt;br /&gt;&lt;br /&gt;At work today, I managed to delete a document I had been writing for an hour and a half, just as I completed it and was about to add it to source control.  What a royal pain in the butt.&lt;br /&gt;&lt;br /&gt;It's no secret that most operating system do not actually erase data from a drive when they delete a file; rather, they update meta-data to mark the file as deleted.  For this reason, there are "undelete" utilities for various operating system.  And, although I found plenty for the &lt;a href="http://en.wikipedia.org/wiki/Ext2fs"&gt;ext-2&lt;/a&gt; filesystem, there are none for the &lt;a href="http://en.wikipedia.org/wiki/Ext3"&gt;ext-3&lt;/a&gt; filesystem.  In fact, the journaling-aspect of ext-3 actually zeroes-out some imporant structures on disk, making traditional undelete utilities virtually impossible.&lt;br /&gt;&lt;br /&gt;Still, I didn't give up.  There is a way, which I'll document here for google to find.&lt;br /&gt;&lt;br /&gt;I very quickly rebooted my computer into single-user mode.  Single-user mode was helpful, in my opinion, because there were fewer processes running---any of which could have written to a temporary file that, by chance, could have occupied the same disk sectors as my file.&lt;br /&gt;&lt;br /&gt;Next, I unmounted my /home partition.&lt;br /&gt;&lt;br /&gt;Then, I went looking for my document on the partition.  In my case, /home is /dev/sda6.  The beauty of unix is that it treats everything---even partitions on your harddrive---as files, and it has a rich set of commands to operate on files.  Here, I will literally grep my harddrive for my file.&lt;br /&gt;&lt;br /&gt;To do this, you also need to know a &lt;a href="http://en.wikipedia.org/wiki/Crib_%28cryptanalysis%29"&gt;crib&lt;/a&gt; for your file.  In my case, I knew my file contained the text "An Algebra of Dispatch Rulesets."&lt;br /&gt;&lt;br /&gt;Then, I executed this command:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?strings"&gt;strings&lt;/a&gt; &lt;span style="font-style: italic;"&gt;/dev/sda6&lt;/span&gt;|&lt;a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?fgrep"&gt;fgrep&lt;/a&gt; &lt;span style="font-style: italic;"&gt;--before=1000 --after=1000 "Algebra of Dispatch Rulesets" &gt;foo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The strings command reads every byte from the harddrive, and only outputs runs of at least 4 printable characters.  This fast pre-processing greatly reduces the work that grep has to do.&lt;br /&gt;&lt;br /&gt;I used fgrep instead of grep because searching for a fixed pattern is much faster than searching for a regex.  The --before= and --after= flags tell fgrep to print out 1000 lines of context before and after the match.&lt;br /&gt;&lt;br /&gt;After this command completed, I was lucky enought to find the final draft of my document---among a lot of crap---in the file &lt;span style="font-style: italic;"&gt;foo.&lt;/span&gt;  I removed the crap, and recovered my file.&lt;br /&gt;&lt;br /&gt;I was lucky in a couple of ways, and you may not be so lucky.  First of all, my document was written in &lt;a href="http://www.latex-project.org/"&gt;LaTeX&lt;/a&gt;---a plaintext format---which made it easy for me to identify the beginning and end of my document.&lt;br /&gt;&lt;br /&gt;Also, my disk is only about 10% full, which means the operating system has no need to &lt;a href="http://en.wikipedia.org/wiki/Fragmentation_%28computer%29"&gt;fragment&lt;/a&gt; files.  As a result, my file appeared as a single, contiguous run in &lt;span style="font-style: italic;"&gt;foo.&lt;/span&gt;  On a more crowded disk, the OS will break the file up into blocks and stores them wherever; in that case, one would have to search for each of the blocks and re-assemble them into the original.&lt;br /&gt;&lt;br /&gt;Anyway, I got my file back, and I hope you do too.&lt;br /&gt;&lt;br /&gt;Oh yeah, recovering the file took about 2 hours.  I probably should have just re-written it.&lt;br /&gt;&lt;br /&gt;UPDATE: A friend tells me that this utility can &lt;a href="http://www.xs4all.nl/%7Ecarlo17/howto/undelete_ext3.html"&gt;undelete removed file on an ext3 filesystem&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/07/recovering-deleted-files-from-ext-3.html" title="Recovering deleted files from ext-3 filesystems" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=225527771814833380" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/225527771814833380/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/225527771814833380" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/225527771814833380" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-1770242510071457658</id><published>2008-06-30T01:03:00.004-04:00</published><updated>2008-06-30T01:09:06.471-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><title type="text">flickr hack: how to remove the newfangled flash uploader using adblock</title><content type="html">When you upload photos to &lt;a href="http://flickr.com/photos/npj"&gt;flickr&lt;/a&gt; through there web interface, it will try to use their fancy flash file uploader.  Personally, I prefer the "basic uploader," which is accessible from a link at the bottom of the uploader page.&lt;br /&gt;&lt;br /&gt;Here's a quick hack on how to automatically use the basic uploader using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/10"&gt;adblock&lt;/a&gt;.  The trick is this.  First, flickr tries to insert the uploader flash object.  If javascript on that page determines that it was not loaded, it will fall back to the basic uploader.  If you use adblock to block the flash uploader, then you will automatically go to the basic uploader.&lt;br /&gt;&lt;br /&gt;So, log in to flickr, go to the upload page, and then block the following url using adblock:&lt;br /&gt;&lt;br /&gt;http://flickr.com/images/upload/yuploadcomponent.swf&lt;br /&gt;&lt;br /&gt;Quick an easy, and hella useful&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/06/flickr-hack-how-to-remove-newfangled.html" title="flickr hack: how to remove the newfangled flash uploader using adblock" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=1770242510071457658" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/1770242510071457658/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1770242510071457658" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1770242510071457658" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-7503617555045803280</id><published>2008-06-27T23:19:00.004-04:00</published><updated>2008-06-28T11:17:45.372-04:00</updated><title type="text">An implementation of SHA-1 on the PIC16 F88</title><content type="html">Here's an implementation of the &lt;a href="http://en.wikipedia.org/wiki/Sha-1"&gt;SHA-1 message digest algorithm&lt;/a&gt; for the &lt;a href="http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2553&amp;amp;param=en027586"&gt;PIC16-family of 8-bit microcontrollers&lt;/a&gt;.  I wrote it as part of a larger project (secret, until a soon-in-the-future date). I have verified it against several testcases of varying length (up to 1,000,000 characters), and it all seems to work well.&lt;br /&gt;&lt;br /&gt;The code for this implementation is 520 instruction words, though a careful coder could chop it down by perhaps as much as 64 words.  A more pressing issue is that it requires a lot of RAM--120 bytes, across two banks.  For those unfamiliar with these microcontrollers, I give perspective by saing that the PIC16F88--a relatively &lt;span style="font-style: italic;"&gt;big&lt;/span&gt; PIC16--has 368 bytes of RAM total.&lt;br /&gt;&lt;br /&gt;When using the byte-oriented API, simulation shows that an average of 685 instructions cycles are required for each message byte, or reciprocally, about 7KB/sec throughput.&lt;br /&gt;&lt;br /&gt;So, please enjoy the &lt;a href="http://nicholas.paul.johnson.googlepages.com/pic-sha1.tar.bz2"&gt;source code&lt;/a&gt;.  It works fine with &lt;a href="http://gputils.sourceforge.net/"&gt;gpasm&lt;/a&gt; and &lt;a href="http://www.dattalo.com/gnupic/gpsim.html"&gt;gpsim&lt;/a&gt;, though I haven't tried it with the windows-only tools provided by &lt;a href="http://www.microchip.com/"&gt;microchip&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/06/implementation-of-sha-1-on-pic16-f88.html" title="An implementation of SHA-1 on the PIC16 F88" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=7503617555045803280" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/7503617555045803280/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/7503617555045803280" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/7503617555045803280" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-1490129194983329256</id><published>2008-06-27T14:38:00.002-04:00</published><updated>2008-06-27T14:59:37.592-04:00</updated><title type="text">Gripe: Abusive rental agreements</title><content type="html">Daya and I have recently been considering buying a house.  Our logic has been that flipping a house in five years is favorable to renting.  In actuality, the equity built over five years in this market is quite small, and (at least for us) renting would save us money.  Oh well, I'm disappointed, but I'll get over it.&lt;br /&gt;&lt;br /&gt;Having decided not to buy, we instead signed a lease.  The last clause of this lease includes this very questionable clause (the bracketed words are my addition, for suspense):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;17. The relationship of the [tenant] and the [landlord] shall be that of a guest and an innkeeper, respectively, and nothing herein shall be construed to give the [tenant] any additional rights including, but not limited to, those of a tenant under a residential lease.  These parties specifically agree that this agreement does not establish a landlord/tenant relationship and is not governed by &lt;a href="http://www.nj-eviction.com/2A.htm"&gt;NJSA 2A18-61.1&lt;/a&gt; [sic] or &lt;a href="http://www.nj-eviction.com/2A53.htm"&gt;NJSA 2A:18-53&lt;/a&gt;, commonly known as the New Jersey eviction statute.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;So who would write such a dastardly, evil clause into their leases?  Princeton University.  In the original, "[tenant]" was written as "student", and "[landlord]" was written as "university."&lt;br /&gt;&lt;br /&gt;Despite this, the rental market in Princeton, NJ still somehow made this lease favorable; the graduate housing that Princeton will provide is at perhaps half the market rate.  We signed.  So what did we give up?&lt;br /&gt;&lt;br /&gt;NJSA 2A:18-61.1 and NJSA 2A:18-53 limit the circumstances under which a tenant may be legally evicted.  The limits laid out in law are mostly reasonable: one can be evicted if they fail to pay rent, if they are a terrorist (I'm not joking), etc.  It also allows for the eviction of tenants convicted of drug crimes (questionable...), or if you refuse to pay an increased rent (very questionable...).  Because my relationship to Princeton will be that of a guest and their inn, they can evict me not just for being a terrorist, but for whatever reason they wish at any time.&lt;br /&gt;&lt;br /&gt;I understand that Princeton basically wants the right to evict me if I drop out of grad school, but still, this is &lt;span style="font-weight: bold;"&gt;wrong&lt;/span&gt;.  I am so sick of being shat on by landlords.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/06/gripe-abusive-rental-agreements.html" title="Gripe: Abusive rental agreements" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=1490129194983329256" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/1490129194983329256/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1490129194983329256" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1490129194983329256" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-5600955987964980648</id><published>2008-06-17T22:27:00.008-04:00</published><updated>2008-06-17T23:23:00.785-04:00</updated><title type="text">Hacking Firefox 3.0 -- Removing unused menu items</title><content type="html">A co-worker convinced me to download Firefox 3.0 for &lt;a href="http://www.spreadfirefox.com/en-US/worldrecord"&gt;Firefox download day&lt;/a&gt;, and I took the bait.  So far, Firefox 3.0 seems really, really fast, but I haven't been using it for days yet.  I'm going to try to be the first guy to release a cool hack for Firefox 3.0.  Please play along here.&lt;br /&gt;&lt;br /&gt;When I use Firefox, I've noticed that there are perhaps a dozen menu items that I never use.  For instance, I &lt;span style="font-weight: bold;"&gt;never&lt;/span&gt; try to open a new window (instead, I use tabs); I &lt;span style="font-weight: bold;"&gt;never&lt;/span&gt; use any of the &lt;span style="font-style: italic;"&gt;send link/page/image to&lt;/span&gt; variants, since I use gmail and haven't ever set up a email client within firefox.  I &lt;span style="font-weight: bold;"&gt;nev&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;er&lt;/span&gt; use the &lt;span style="font-style: italic;"&gt;Work Offline&lt;/span&gt; button (I don't really know what it means).&lt;br /&gt;&lt;br /&gt;Same thing with the right-click context menus.  I don't right click a page to stop loading, instead I hit escape.  I &lt;span style="font-weight: bold;"&gt;never&lt;/span&gt; &lt;span style="font-style: italic;"&gt;copy image contents&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;set desktop background&lt;/span&gt; (in fact, my window manager is set up so that my background is a terminal window).&lt;br /&gt;&lt;br /&gt;Most importantly of all, I &lt;span style="font-weight: bold;"&gt;never never never&lt;/span&gt; mean to hit the &lt;span style="font-style: italic;"&gt;File -&gt; Quit&lt;/span&gt; menu item; most likely I mean to hit &lt;span style="font-style: italic;"&gt;File -&gt; Close Window&lt;/span&gt;, which is inconveniently located in the middle of the menu.  In terms of keystrokes, ALT-F down down down is much farther away than ALT-F up.&lt;br /&gt;&lt;br /&gt;So, If I never use these menu items, why do I have to filter through them every time I use my web browser?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_S_lLPG9im4k/SFh_bQ0qt2I/AAAAAAAAAE4/nx-jGpeVPiE/s1600-h/firefox-fix2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_S_lLPG9im4k/SFh_bQ0qt2I/AAAAAAAAAE4/nx-jGpeVPiE/s320/firefox-fix2.png" alt="" id="BLOGGER_PHOTO_ID_5213056675030415202" border="0" /&gt;&lt;/a&gt;Well, now I don't, and the screenshot at left demonstrates the newer, smoother, less-crufty layout.  Here's how you do it yourself:&lt;br /&gt;&lt;br /&gt;It turns out that all of the user interface widgets in firefox are defined in a series of &lt;a href="http://en.wikipedia.org/wiki/Xul"&gt;XUL&lt;/a&gt; files.  By modifying these files, we can make our menu layouts match our personal use cases.&lt;br /&gt;&lt;br /&gt;A moment of caution, however.  XUL files are XML documents, and they are tightly coupled with other parts of the software.  Who know how many calls times firefox calls document.getElementById() and doesn't check the return value.  Don't risk it.  Instead of &lt;span style="font-style: italic;"&gt;removing&lt;/span&gt; items from this file, or even commenting them out, we're going to set the XUL hidden="true" attribute for undesirable menu items.  Similarly, if you are moving elements, you may want to preserve the parent-child structure of the document, or you may break some XPath query hidden in firefox' gut.&lt;br /&gt;&lt;br /&gt;It should also go without saying that you should backup every file you modify.  Having said that, I'm not responsible for you.&lt;br /&gt;&lt;br /&gt;Find your firefox installation directory.  On my computer, this is /usr/local/bin/firefox; on windows, I would guess it's in C:\Program\ Files.  Within this directory, you will find a subdirectory called chrome/, which contains a series of &lt;a href="http://en.wikipedia.org/wiki/JAR_%28file_format%29"&gt;.jar&lt;/a&gt; files.  Our target is browser.jar.&lt;br /&gt;&lt;br /&gt;Copy browser.jar to browser.jar-old right now, before you forget.  Oh yeah, close firefox.&lt;br /&gt;&lt;br /&gt;Now copy browser.jar to a temporary directory, and unzip it with whatever tool you use.  If you have trouble with this step, rename it to browser.zip, and unzip that.&lt;br /&gt;&lt;br /&gt;You should see a directory called content/browser/, and in this directory, a series of .xul files.  We are interested in content/browser/browser.xul.  Open it up with vi, and look at it until you understand how it works.&lt;br /&gt;&lt;br /&gt;For our purposes, you only need to understand the meaning of a new elements.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;popupset id="mainPopupSet"&gt;&amp;lt; popupmenuset &amp;gt; - here, popup refers to popup menu.  The main popup set is the main menu bar used in firefox, and it contains the File, Edit, View, etc menus.&lt;/popupset&gt;&lt;/li&gt;&lt;li&gt;&lt;menupopup&gt;&amp;lt; menupopup &amp;gt; - this can refer to a popup menu (such as the File Menu) or to a context menu (like when you right-click on the page).&lt;/menupopup&gt;&lt;/li&gt;&lt;li&gt;&lt;menuitem&gt; &amp;lt; menuitem &amp;gt; - this refers to a menu entry, such as Open under the File Menu.&lt;/menuitem&gt;&lt;/li&gt;&lt;/ul&gt;So, to remove an unwanted menu item, first find the offending item, and then add the attribute hidden="true".&lt;br /&gt;&lt;br /&gt;And to re-order misplaced menu items, re-order the &lt;menuitem&gt; elements.&lt;br /&gt;&lt;br /&gt;When you are done yicking with the innards, re-zip the entire directory tree into an archive called browser.jar, and put it where you found the original.  Start firefox, and see how you did.&lt;br /&gt;&lt;br /&gt;If you get weird behavior, re-examine your modifications or revert to the original file.  Lather, rinse, repeat.  Enjoy.&lt;br /&gt;&lt;br /&gt;And while we're on the topic, let me throw-in a few &lt;a href="http://kb.mozillazine.org/About:config"&gt;about:config&lt;/a&gt; tweaks that I find completely necessary for Firefox 3.  I got most of these from &lt;a href="http://lifehacker.com/software/firefox-2/geek-to-live--top-firefox-2-config-tweaks-209941.php"&gt;LifeHacker.&lt;/a&gt;&lt;br /&gt;&lt;/menuitem&gt;&lt;ul&gt;&lt;li&gt;dom.disable_window_open_feature.menubar, dom.disable_window_move_resize, dom.disable_window_move_resize, dom.disable_window_move_resize, dom.disable_window_move_resize, dom.disable_window_open_feature.titlebar, dom.disable_window_open_feature.titlebar &lt;span style="font-weight: bold;"&gt;must all be set to false&lt;/span&gt; to avoid annoying behavior;&lt;/li&gt;&lt;li&gt;browser.tabs.closeButtons = 2, to put the close tab button on the right, not on each tab (like firefox 1.5);&lt;/li&gt;&lt;li&gt;browser.backspace_action = 0, so that backspace is equivalent to the Back button;&lt;/li&gt;&lt;li&gt;browser.chrome.toolbar_tips = false, to hide tool-tips; and,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;browser.tabs.tabMinWidth = 75, so it will show more tabs before scrolling them.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/06/hacking-firefox-30-removing-unused-menu.html" title="Hacking Firefox 3.0 -- Removing unused menu items" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=5600955987964980648" title="7 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/5600955987964980648/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/5600955987964980648" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/5600955987964980648" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3798056806845768244</id><published>2008-04-27T15:25:00.008-04:00</published><updated>2008-04-27T16:36:04.170-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tool" /><category scheme="http://www.blogger.com/atom/ns#" term="bike" /><category scheme="http://www.blogger.com/atom/ns#" term="headset" /><category scheme="http://www.blogger.com/atom/ns#" term="single-serving" /><category scheme="http://www.blogger.com/atom/ns#" term="bike tool" /><category scheme="http://www.blogger.com/atom/ns#" term="press" /><category scheme="http://www.blogger.com/atom/ns#" term="lathe" /><category scheme="http://www.blogger.com/atom/ns#" term="diy" /><category scheme="http://www.blogger.com/atom/ns#" term="bikes" /><title type="text">Lesson in humility: failed headset crown race press</title><content type="html">Part of doing-it-yourself is failing to do it yourself.  It's not a bad thing unless you refuse to learn from it.  Up until now, I had made it a point to only post my successfuly hacks/tweaks/mods/etc to this blog.  However, today's post is abouta well-planned diy tool that didn't work.  Let's try to learn something from it.&lt;br /&gt;&lt;br /&gt;While doing my annual bike tune-up, I realized that part of my headset was installed incorrectly.  I designed and built this tool in an attempt to fix that.&lt;br /&gt;&lt;br /&gt;First, a bit of terminology.&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-style: italic;"&gt;press&lt;/span&gt; is simply a tool that works by pressing things together, in contrast to a jack which pushes things apart.  There are lots of kinds of presses: simple ones use a screw, complicated ones use pneumatic or hydraulic pressure.&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-style: italic;"&gt;bearing&lt;/span&gt; is a mechanical component that acts to reduce the friction between two parts which move relative to one another.  A &lt;span style="font-style: italic;"&gt;ball bearing&lt;/span&gt; is a bearing which uses balls to accomplish this (though &lt;a href="http://en.wikipedia.org/wiki/Bearing_%28mechanical%29#Types"&gt;many other types exist&lt;/a&gt;: the brass bushings on cantilever brakes are an example of non-ball bearings).&lt;br /&gt;&lt;br /&gt;And now some bike terminology.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.sheldonbrown.com/gloss_e-f.html#fork"&gt;fork&lt;/a&gt; is the fork-shaped piece of a bike which straddles the front wheel (n.b. the things on the back are called the stays, and are NOT a fork).  The &lt;a href="http://www.sheldonbrown.com/gloss_st-z.html#steerer"&gt;steer tube&lt;/a&gt; is the tube which extends up from the fork to the &lt;a href="http://www.sheldonbrown.com/gloss_st-z.html#stem"&gt;stem&lt;/a&gt;, which connects to the handlebars.  The fork &lt;a href="http://www.sheldonbrown.com/gloss_cn-z.html#crown"&gt;crown&lt;/a&gt; connects the steer tube to the two tines of the fork.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.sheldonbrown.com/gloss_ha-i.html#headset"&gt;headset&lt;/a&gt; is a pair of bearings which connect the fork to the rest of the frame, allowing you to steer without much friction.  Those two bearings in the headset are &lt;a href="http://www.sheldonbrown.com/gloss_cn-z.html#cup"&gt;cup-and-cone&lt;/a&gt; style bearings.  These types of bearings are popular in older bikes, but are being gradually replaced with &lt;a href="http://www.sheldonbrown.com/gloss_ca-g.html#cartridge"&gt;cartridge&lt;/a&gt; bearings.  This is unfortunate, since cup-and-cone bearings can be adjusted for a prolonged life, while cartridge bearings must eventually be thrown out and replaced.  Nonetheless, because the main force on headset bearings are thrust forces (parallel to the axis of rotation), and because of the size of the bearings, cup-and-cone style bearings remain the standard for headsets.&lt;br /&gt;&lt;br /&gt;A cup-and-cone bearing consists of three pieces: two &lt;span style="font-style: italic;"&gt;races&lt;/span&gt;, and a set of &lt;span style="font-style: italic;"&gt;balls&lt;/span&gt;.  Sometimes, those balls are held in a ring formation by an unnecessary, though helpful piece of metal or plastic called the &lt;span style="font-style: italic;"&gt;retainer&lt;/span&gt;.  One of the two races is concave (the &lt;span style="font-style: italic;"&gt;cup&lt;/span&gt;), and the other is convex (the &lt;span style="font-style: italic;"&gt;cone&lt;/span&gt;).  The &lt;span style="font-style: italic;"&gt;fork crown race&lt;/span&gt; is the cone which is seated on the steer tube just above the crown, on what is called the &lt;span style="font-style: italic;"&gt;crown race seat&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The crown race is press-fit onto the crown race seat, which is to say that the crown race seat is slightly larger in diameter (1.185") than the internal diameter of the crown race (1.180").  This minor difference in diameter (only 0.005 inches) is enough to make it hard to install, though once installed, it may as well be a piece of the steer tube.&lt;br /&gt;&lt;br /&gt;So, as I was stripping my bike down for its annual paint job, I noticed that the crown race was incorrectly seated, and I decided to remedy it.  It only took a few seconds for me to decide that I wouldn't be able to press it on by hand, and so I went forth building a tool.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2443861335/" title="[3/8] DIY Headset Crown-race press :: Second attempt :: All the pieces by nickjohnson, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3149/2443861335_b2558eea12_m.jpg" alt="[3/8] DIY Headset Crown-race press :: Second attempt :: All the pieces" style="float: left; margin-right: 1em;" height="240" width="180" /&gt;&lt;/a&gt;I tried two variations on the same design.  The first attempt failed: as I tightened the drive bolt, it worked well until the steel bar bent, and then the plastic snapped, and ultem shrapnel ricocheted off of my luckily-closed eyelids.  Although a failure, it worked for a while; the race was halfway pressed onto the race seat. I was encouraged to try again, using a heavier construction that hopefully wouldn't snap, crackle and pop.&lt;br /&gt;&lt;br /&gt;I have annotated the picture on the left.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2443861325/" title="[1/8] DIY Headset Crown-race press :: Second attempt :: The race guide by nickjohnson, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3109/2443861325_7390ddb919_m.jpg" alt="[1/8] DIY Headset Crown-race press :: Second attempt :: The race guide" style="float: right; margin-left: 1em;" height="180" width="240" /&gt;&lt;/a&gt;I used my lathe to turn a piece a ultem plastic (a metal replacement, similar to delrin) into a race guide.  The race guide had a 1.125" hole bored through the center of it, so it could slide along the length of the steer tube, and had a larger recess bored at one end of that hole to snugly fit the crown race.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2443861339/" title="[4/8] DIY Headset Crown-race press :: Second attempt :: The set-up by nickjohnson, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2285/2443861339_32c4f183a5_m.jpg" alt="[4/8] DIY Headset Crown-race press :: Second attempt :: The set-up" style="float: left; margin-right: 1em;" height="240" width="180" /&gt;&lt;/a&gt;I then drilled and tapped two holes on either end of the race guide, and used bolts to fasten the race guide to a bar of steel placed between the two tines of the fork.  A third bolt--the &lt;span style="font-style: italic;"&gt;drive bolt&lt;/span&gt;--past through the center of that steel bar against an ultem plunger, which pressed against the other side of the fork.&lt;br /&gt;&lt;br /&gt;Again, I have annotated the picture on the left.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2443861343/" title="[5/8] DIY Headset Crown-race press :: Second attempt :: Pressing by nickjohnson, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2229/2443861343_515073d049_m.jpg" alt="[5/8] DIY Headset Crown-race press :: Second attempt :: Pressing" style="float: right; margin-left: 1em;" height="180" width="240" /&gt;&lt;/a&gt;I wrapped some fabric around the new paint on the fork, and began torquing the drive bolt.  Just like the first time, it began working.  In fact, this second attempt put the race close to the right position.&lt;br /&gt;&lt;br /&gt;But alas, it too failed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2443902369/" title="[8/8] DIY Headset Crown-race press :: Second attempt :: Decapitation by nickjohnson, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2040/2443902369_0b09b3be7f_m.jpg" alt="[8/8] DIY Headset Crown-race press :: Second attempt :: Decapitation" style="float: left; margin-right: 1em;" height="240" width="180" /&gt;&lt;/a&gt;The failure was very similar to the first time.  First, the steel bars bent.  And again, since it seemed so close to being complete, I chanced tightening even further.  Unlike my first attempt, however, the plastic never broke.  Instead, the press tore the head off of one of the hanger bolts.&lt;br /&gt;&lt;br /&gt;Disheartened, I decided I would need to try a different technique.  But what?  I couldn't easily make this design larger, since I was already working with the largest plastic stock I had available.  I read and re-read Sheldon Brown's advice, until it came to me.&lt;br /&gt;&lt;br /&gt;Duh!  I have a lathe.&lt;br /&gt;&lt;br /&gt;I chucked the crown race, and took a few (i.e. added) a few thousandths to the race's internal diameter.  The race still had to be pressed onto its seat, but I could do that under hand power using the race guide I had already built.&lt;br /&gt;&lt;br /&gt;So, as I mentioned earlier, there is a lesson hiding in here somewhere.  I'll try to be thorough  it down, but please let me know if I elide anything:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesson 1&lt;/span&gt;: Keep it simple, stupid (KISS).  This is the prime directive of engineering.  By elaborating the design, I added too many points of potential failure. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesson 2&lt;/span&gt;: Determine which problem constraints are true constraints, and which are only constraints in name / by convention.  The crown race should be tight on the crown race seat so that the steer tube doesn't rattle within the bearing.  But does it need to be press fit?  There will be no motion between crown race and steer tube, so long as the bearings are doing their job.  By increasing the internal diameter, I allowed easier installation, but without sacrificing holding power.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesson 3&lt;/span&gt;: Wear eye protection.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/04/lesson-in-humility-failed-headset-crown.html" title="Lesson in humility: failed headset crown race press" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3798056806845768244" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3798056806845768244/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3798056806845768244" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3798056806845768244" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-640884063669378843</id><published>2008-04-27T14:50:00.003-04:00</published><updated>2008-04-27T15:10:49.066-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tune-up" /><category scheme="http://www.blogger.com/atom/ns#" term="bike" /><category scheme="http://www.blogger.com/atom/ns#" term="maintenance" /><category scheme="http://www.blogger.com/atom/ns#" term="bicycle" /><category scheme="http://www.blogger.com/atom/ns#" term="race" /><category scheme="http://www.blogger.com/atom/ns#" term="chainring" /><category scheme="http://www.blogger.com/atom/ns#" term="sugino sucks" /><title type="text">Spring bike maintenance</title><content type="html">Spring is finally here, even in the frigid New York City, and time has come for my annual bike tune-up.  Sure, I could take it to a bike shop, but then I'd miss out on all the greasy hands, the hundreds of little cuts on my hands, the OCD adjustments that a bike offers, and the feeling of triumph of riding the optimized bike.&lt;br /&gt;&lt;br /&gt;Now, I admit that my hand was forced into doing a tune-up.  Work has kept me busy enough that I just put off the repairs, one weekend after another.  It was a mechanical failure that got my focused.&lt;br /&gt;&lt;br /&gt;Daya, Chris and I were at Ben's surprise birthday party at a brewery on the ground floor of the Empire State Building.  Eventually, we got sick of paying $7 / pint, and decided to go back to Brooklyn.  Our destination was a bar called "Alligator Lounge," serving $5 drafts and a free pizza with every drink (no, really).  We set up a race: Daya and Chris took the subway, I rode my bike.&lt;br /&gt;&lt;br /&gt;I took 5th Ave down to Union Square Park, and got onto Broadway.  I kept flying south until I hit Grand St, realized I went too far, and backtracked to Kenmare.  I took the Williamsburg Bridge, landed in ... Williamsburg, and then started looking for the bar.  People on the streets tried to give helpful directions, but each pointed me in the wrong direction.  Finally, when the alligator lounge was in sight, I started pedaling from a read light, and then ...&lt;br /&gt;&lt;br /&gt;My chain fell off.&lt;br /&gt;&lt;br /&gt;This is rare, but not unheard of.  I have my bike rigged with only 1 chainring up front, and no front deraileur.  Thus, as the rear deraileur shifts from side to side, there is a slight chance (say, once in 200 miles) that my chain will fall off.&lt;br /&gt;&lt;br /&gt;But not this time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2444824150/" title="Sugino Chainring Failure by nickjohnson, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2222/2444824150_3ed2f1b8f6_m.jpg" alt="Sugino Chainring Failure" style="float: left; margin-right: 1em;" height="180" width="240" /&gt;&lt;/a&gt;As I started to put my chain back on, I noticed that &lt;a href="http://flickr.com/photos/npj/sets/72157604751073443/"&gt;my chainring had inexplicably bent&lt;/a&gt; itself beyond repair.  My bike could be pushed, but not ridden, and I was still miles from home.  Knowing that I had lost the race, but that I should have won, I pushed my bike the last few blocks.  Daya and Chris were there, smug with their victory.  This was the first time I had lost a Subway-versus-bicycle race, and I was not happy.&lt;br /&gt;&lt;br /&gt;But I digress; this post is about my spring bike tune-up.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I replaced my broken 48T chainring with a new 53T chainring.  This has upped my ratio significantly, but still in my comfort zone.  I also replaced the chain, and put on a new 8-speed 11-28 cassette (same as before).  I put on new brake shoes, bought new cycling shoes and installed new cleats.&lt;br /&gt;&lt;br /&gt;But that's the less interesting part of the tune-up.  I also did some work on my headset, and I repainted.  Each of those is a big enough task to warrant their own posts.  So, those posts come next over the next few hours.  Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/04/spring-bike-maintenance.html" title="Spring bike maintenance" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=640884063669378843" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/640884063669378843/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/640884063669378843" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/640884063669378843" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3819778985344479739</id><published>2008-04-26T23:37:00.003-04:00</published><updated>2008-04-26T23:43:47.383-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="wheel" /><category scheme="http://www.blogger.com/atom/ns#" term="bike" /><category scheme="http://www.blogger.com/atom/ns#" term="rim" /><category scheme="http://www.blogger.com/atom/ns#" term="building wheels" /><category scheme="http://www.blogger.com/atom/ns#" term="bicycle" /><category scheme="http://www.blogger.com/atom/ns#" term="spoke" /><category scheme="http://www.blogger.com/atom/ns#" term="bikes" /><title type="text">Shout-out to Dennis Ferron</title><content type="html">Dennis recently linked to me from his blog, and I wanted to say thanks, and to point out a particularly cool post.  &lt;a href="http://dennisferron.blogspot.com/2008/04/ferrons-guaranteed-no-mess-no-mixups.html"&gt;Ferron's Guaranteed No Mess No Mixups Method for Swapping Rims without Relacing&lt;/a&gt; is something that I wished I had happened upon years ago.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The problem:&lt;/span&gt; you have a new rim, and you want to build a wheel.  This task is typically a pain, though some people enjoy doing it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The special circumstance:&lt;/span&gt; you already have an old wheel built.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The critical observation:&lt;/span&gt;  in addition to re-using the spokes and hub from the old wheel, &lt;span style="font-weight: bold;"&gt;you can preserve the information&lt;/span&gt; stored in the old wheel's lacing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The method:  &lt;/span&gt;put the two wheels side by side.  Transfer one spoke at a time from the old wheel to the new (in careful order), and you save your self a lot of hassel.&lt;br /&gt;&lt;br /&gt;Well done Dennis.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/04/shout-out-to-dennis-ferron.html" title="Shout-out to Dennis Ferron" /><link rel="related" href="http://dennisferron.blogspot.com/2008/04/ferrons-guaranteed-no-mess-no-mixups.html" title="Shout-out to Dennis Ferron" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3819778985344479739" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3819778985344479739/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3819778985344479739" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3819778985344479739" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-9155824564437023593</id><published>2008-04-11T08:40:00.003-04:00</published><updated>2008-04-11T08:46:28.974-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="one-liner" /><category scheme="http://www.blogger.com/atom/ns#" term="short" /><category scheme="http://www.blogger.com/atom/ns#" term="rambling" /><category scheme="http://www.blogger.com/atom/ns#" term="update" /><title type="text">One liner updates</title><content type="html">I have accepted Princeton's offer.  In September, I will be a graduate student at the Computer Science Department at Princeton University.&lt;br /&gt;&lt;br /&gt;The weather has been beautiful recently.&lt;br /&gt;&lt;br /&gt;Work is going well.  I work at a rate of one todo list page per day.  There, I have observed quite a bit about ruby on rails, and I think I'll have to post about that soon.&lt;br /&gt;&lt;br /&gt;My mother is coming to visit soon.&lt;br /&gt;&lt;br /&gt;Although I had a minor in math, I still think that  taxes are confusing.  The astute reader will note that math is not arithmetic.&lt;br /&gt;&lt;br /&gt;I just went through a week of infirmity... Something gastrointestinal.  I'm happy to report that has passed.&lt;br /&gt;&lt;br /&gt;I've been playing with my lathe a lot.  I built a crank puller, as I said I would.  Now I just need to convince myself to stop making minor changes to it, and to move on to a new project.&lt;br /&gt;&lt;br /&gt;My apartment has a mouse.  I'm trying really hard to kill it, but it is apparently smart enough to take the cheese off of the traps without dying.  Bastard!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/04/one-liner-updates.html" title="One liner updates" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=9155824564437023593" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/9155824564437023593/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/9155824564437023593" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/9155824564437023593" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-4581153255834409922</id><published>2008-03-30T19:37:00.003-04:00</published><updated>2008-03-30T20:00:38.966-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="improvised" /><category scheme="http://www.blogger.com/atom/ns#" term="tool" /><category scheme="http://www.blogger.com/atom/ns#" term="single-serving" /><category scheme="http://www.blogger.com/atom/ns#" term="one-time-use" /><category scheme="http://www.blogger.com/atom/ns#" term="diy" /><category scheme="http://www.blogger.com/atom/ns#" term="make" /><title type="text">Single-serving tools</title><content type="html">Every so often, you find yourself in need of a unique tool to fit the situation.  Most of the time, such a tool can be bought.  Though, because of their limited need, stores must sell these for a higher price to average out the lesser demand.  Compounding this fact, no one wants to pay a lot for a tool they'll only use once.&lt;br /&gt;&lt;br /&gt;I've collected a list of all the one-time, single-serving tools from recent memory.  If you have similar single-serving tools, I'd like to see them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2375704088/" title="Improvised Headset Press by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2em;" src="http://farm3.static.flickr.com/2089/2375704088_d9d1ef4fa3_m.jpg" alt="Improvised Headset Press" height="180" width="240" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;(1) An improvised headset press.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I needed to install the bearing cups to a &lt;a href="http://en.wikipedia.org/wiki/Threadless_headset"&gt;1-1/8" threadless headset&lt;/a&gt; on the bicycle I was building. But, I was only going to do this one time, so I didn't feel like buying a tool, even if it only cost $20.&lt;br /&gt;&lt;br /&gt;My solution was this. A 1/2" screw is used to push two soft plastic plates together. These, in turn, push the cups into the headset. The plates were made out of some plastic from an old cutting board.&lt;br /&gt;&lt;br /&gt;For best results, stick the cups in the freezer for half an hour--they will contract slightly and fit more easily.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346344923/" title="Have you ever needed a really long allen wrench? [1/2] by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2em;" src="http://farm3.static.flickr.com/2290/2346344923_1d72fcf434_m.jpg" alt="Have you ever needed a really long allen wrench? [1/2]" height="240" width="180" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;(2) An exceptionally long allen wrench.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Have you ever needed a really long allen wrench?  Well, I did when I was constructing &lt;a href="http://www.flickr.com/photos/npj/2347189116/"&gt;the drawer set for my new lathe&lt;/a&gt;.  Local hardware stores didn't sell allen wrenches this long--at least not in metric--so I built my own.&lt;br /&gt;&lt;br /&gt;Take a normal allen wrench and hacksaw-off the bend.  It's hardened steel, so it will mess up your blade--use a worn-out blade.  Take a length of 3/8 round steel, bore a 1/4" hole at one end, at least 1/2" deep.  Insert the hex bit, and then weld it on to the rod.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346344925/" title="Have you ever needed a really long allen wrench? [2/2] by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2em;" src="http://farm3.static.flickr.com/2315/2346344925_ab4e5c1615_m.jpg" alt="Have you ever needed a really long allen wrench? [2/2]" height="180" width="240" /&gt;&lt;/a&gt;Also, bend the far end of the rod, or weld on some sort of handle.  I used my lathe to turn the rod down a bit, making it easier to bend.&lt;br /&gt;&lt;br /&gt;Ultimately, this 5mm wrench will reach more than nine inches deep into a 1/2" hole.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346344927/" title="Need a way to measure angles? by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2em;" src="http://farm4.static.flickr.com/3140/2346344927_46ae227098_m.jpg" alt="Need a way to measure angles?" height="180" width="240" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;(3) An easy way to measure angles.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I moved into my apartment, I immediately devised a plan to build an long shelf above head level in the hallway.  Because this apartment had been sliced off of a single family residence, it had an awkward hallway in the wrong place.  The hallway space seems like a significant fraction of my apartment, and without the shelf it would all be lost.&lt;br /&gt;&lt;br /&gt;The problem was that the walls in this hallway didn't meet at right angles.  It's very ad-hoc, with three turns at angles around 13-31 degrees.  I needed to measure these angles or the wood wouldn't meet right.&lt;br /&gt;&lt;br /&gt;Sure, protractors are cheap, but one wasn't available when I had my inspiration.&lt;br /&gt;&lt;br /&gt;I built this out of some 1" extruded aluminum angle-stock and a small machine screw, nut an washers.  The trick? A hole is drilled on each bar, 3.5" from the pivot point.  For any angle, the two holes and the pivot point make an &lt;a href="http://en.wikipedia.org/wiki/Isosceles_triangle"&gt;isosceles triangle&lt;/a&gt;.  Then, if I measure the distance "h" between those two holes, I can calculate the angle between those bars as 2 * sin ( h / 7 ).&lt;br /&gt;&lt;br /&gt;The shelves, by the way, look great and line up perfectly.&lt;br /&gt;&lt;br /&gt;So, anyone else have single-serving tools to share?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/03/single-serving-tools.html" title="Single-serving tools" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=4581153255834409922" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/4581153255834409922/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/4581153255834409922" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/4581153255834409922" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3677088191405877538</id><published>2008-03-25T23:50:00.002-04:00</published><updated>2008-03-26T00:54:32.070-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mods" /><category scheme="http://www.blogger.com/atom/ns#" term="minilathe" /><category scheme="http://www.blogger.com/atom/ns#" term="modifications" /><category scheme="http://www.blogger.com/atom/ns#" term="lathe" /><category scheme="http://www.blogger.com/atom/ns#" term="7x12" /><title type="text">My minilathe, and several mods thereof</title><content type="html">It's been a while.  There are various excuses for that, but the main excuse is that I've been putting in long days at &lt;a href="http://www.msnap.com/"&gt;my new job&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2317832112/" title="Lathe has arrived by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2ex;" src="http://farm3.static.flickr.com/2304/2317832112_ff339ed760_m.jpg" alt="Lathe has arrived" height="180" width="240" /&gt;&lt;/a&gt;The big news (on the diy/hacking/modding front) is the arrival of my &lt;a href="http://www.toolsnow.com/browse.cfm/4,876.html"&gt;minilathe&lt;/a&gt;.  I had been dreaming about owning a minilathe for a long time.  I had always been frustrated by the cost and accessibility of various machine parts; to me, it's torture when you have a great idea and no way to build it.  I looked forward to all of the rights and responsibilities given to lathe owners.&lt;br /&gt;&lt;br /&gt;This lathe is just one brand of a common chinese lathe, sold by &lt;a href="http://www.toolsnow.com/browse.cfm/4,876.html"&gt;Cummins&lt;/a&gt;, &lt;a href="http://www.harborfreight.com/cpi/ctaf/displayitem.taf?Itemnumber=93799"&gt;Harbor Freight&lt;/a&gt;, &lt;a href="http://www.grizzly.com/products/7-x-12-Mini-Metal-Lathe/G8688"&gt;Grizzly&lt;/a&gt;, and others.&lt;br /&gt;One benefit of this oft rebranded tool is that many online communities have sprung up about how to use or modify it, for example the right-wing &lt;a href="http://groups.yahoo.com/group/7x10minilathe/"&gt;7x10 minilathe group&lt;/a&gt;.  However, the Cummins model is in a class by itself.  It is simultaneously the cheapest, and shipped with the most accessories, including a faceplate, a 3-jaw chuck with both internal and external jaws, 5 HSS tool bits, a tailstock chuck, a dead center, a set of change gears, a steady rest and a follower rest.  It is a great value.&lt;br /&gt;&lt;br /&gt;Let me first say that, despite the limitations inherent to small lathe, this lathe is quality.  Every moving part has a gib or some other way to adjust it.  Although each part may slowly wear out, the designers have provided the end user with a way to compensate.&lt;br /&gt;&lt;br /&gt;Let's compare it to the famous &lt;a href="http://sherline.com/lathes.htm"&gt;Sherline Mini-lathes&lt;/a&gt;.  Among hobby machinists, Sherlines have a good reputation for quality, and are comparable to my Cummins in size.  However, Sherlines do not include change gears and a feed screw -- necessities for cutting internal / external threads -- nor do they include a compound slide, thus one cannot cut bevels.  Oh yeah, Sherlines cost more too.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346334639/" title="Lathe has arrived by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2ex;" src="http://farm3.static.flickr.com/2405/2346334639_126f8fda91_m.jpg" alt="Lathe has arrived" height="240" width="180" /&gt;&lt;/a&gt;Enough about comparisons, on to the juicy stuff.  I unpacked the lathe.  The first thing you need to do with a machine like this is take it apart.  I took it down to it's solid pieces, cleaned off the factory grease, re-greased. re-assembled and adjusted it.  These preliminaries are critical, since they give you a good understanding of how the machine all works, and yield a certain confidence toward using or modifying the machine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346334651/" title="Lathe Mod #1 by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2ex;" src="http://farm4.static.flickr.com/3126/2346334651_1ba9be7e58_m.jpg" alt="Lathe Mod #1" height="180" width="240" /&gt;&lt;/a&gt;So, what modifications have I done?  First the simple shit:  I removed and recycled the two chip guards.  Then, I removed the plastic do-hickey covering the emergency stop button.  Perhaps I'm misunderstanding it, but it seems much safer to have a clear path between my left hand and the stop button.  Additionally, I replaced &lt;a href="http://flickr.com/photos/npj/2347189112/"&gt;the bolts that secured the hand wheels&lt;/a&gt;, since they tended to hit my knucles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346334653/" title="Lathe Mod #2a by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2ex;" src="http://farm4.static.flickr.com/3162/2346334653_ba3948a2ed_m.jpg" alt="Lathe Mod #2a" height="180" width="240" /&gt;&lt;/a&gt;Next, I grabbed some strong magnets pulled from a scrap hard drive, and used them to keep track of the various chucks.  I find that the use of a magnet is just slightly entertaining, perhaps only on the subconscious level, but that is enough that I never forget to replace the key.  I don't imagine I'll ever accidentally leave it in the chuck.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2346344917/" title="Lathe Mod #3 by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2ex;" src="http://farm3.static.flickr.com/2148/2346344917_8dda0e1a27_m.jpg" alt="Lathe Mod #3" height="180" width="240" /&gt;&lt;/a&gt;I don't own a grinder with which I can grind my tool bits, but I can put a small arbor-mounted grinding wheel in my lathe.  The beauty of this is that I can use my lathe's compound slide to get a precise angle onto the tool bits.  Similarly, I realized that I can use fragments of &lt;a href="http://flickr.com/photos/npj/2347189120/"&gt;hackway blades to shim-up the cutting tool&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2347189116/" title="Lathe Mod #5 by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2ex;" src="http://farm3.static.flickr.com/2048/2347189116_7844b69625_m.jpg" alt="Lathe Mod #5" height="180" width="240" /&gt;&lt;/a&gt;My lathe came with a lot of accessories, and suddenly I had nowhere to keep them all, let alone work.  So, I went to work building a drawer set.  I collected a bunch of scrap wood and plastic from around the neighborhood (and trash day in Brooklyn contains enough wood to build a few houses, I'm sure).  The drawer set is sturdy as hell.  I added in a few solid brass drawer pulls that I found at the Park Slope Flea Market to finish the effect.  So much of this sort of improvised building involves moments of inspiration.  This &lt;a href="http://flickr.com/photos/npj/2347189118/"&gt;simple allen wrench holder&lt;/a&gt; is one such example.&lt;br /&gt;&lt;br /&gt;Most recently, I built a apron chip guard, inspired by the &lt;a href="http://www.varmintal.com/alath.htm#Chip_Guard"&gt;one that Varmint Al made&lt;/a&gt;.  One failing of the minilathe design is that it leaves the gears behind the apron exposed, and poised to collect metal chips from the cutting action.  As Jobst Brandt &lt;a href="http://sheldonbrown.com/brandt/chain-care.html"&gt;once said&lt;/a&gt;, "Commercial abrasive grinding paste is made of oil and silicon dioxide," and so I was concerned about these chips, even though the gears were otherwise greased.  So, here is how I built it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2363153968/" title="Lathe mob #7 [1/6] by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2ex;" src="http://farm3.static.flickr.com/2341/2363153968_7836703b62_m.jpg" alt="Lathe mob #7 [1/6]" height="180" width="240" /&gt;&lt;/a&gt;Cut a sheet of 1/8"-thick pastic to the rough contours of the lathe's apron. I used some plastic that used to be part of a printer's enclosure.  Drill a hole large enough for the gear's shaft (I cut mine 7/8" since I had that bit available, though smaller would do).  Drill and countersink five holes around the perimiter of the chip guard.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2363153970/" title="Lathe mob #7 [2/6] by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2ex;" src="http://farm4.static.flickr.com/3031/2363153970_79c4dc3d00_m.jpg" alt="Lathe mob #7 [2/6]" height="240" width="180" /&gt;&lt;/a&gt;Transfer those holes from the plastic chip guard onto the back side of the apron using a center punch. Drill and tap those holes. I used a #36 drill, and a 6-32 tap, though anything of similar size will work.  The apron is made of cast iron, which is a surpisingly soft metal. Nonetheless, proceed with caution so you don't break your tap, and use lot's of wd40.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2363153976/" title="Lathe mob #7 [3/6] by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2ex;" src="http://farm4.static.flickr.com/3091/2363153976_fb2f28387a_m.jpg" alt="Lathe mob #7 [3/6]" height="180" width="240" /&gt;&lt;/a&gt;This is a view of the back side of the apron after the five holes have been drilled and tapped.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2363153980/" title="Lathe mob #7 [4/6] by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2ex;" src="http://farm4.static.flickr.com/3268/2363153980_472c6ef8aa_m.jpg" alt="Lathe mob #7 [4/6]" height="180" width="240" /&gt;&lt;/a&gt;Clean out all metal chips from the area, and re-install the gears.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2363153984/" title="Lathe mob #7 [5/6] by nickjohnson, on Flickr"&gt;&lt;img style="float: right; margin-left: 2ex;" src="http://farm3.static.flickr.com/2241/2363153984_dd8d81501d_m.jpg" alt="Lathe mob #7 [5/6]" height="180" width="240" /&gt;&lt;/a&gt;Drench the gears in a heavy grease.  I used an old hacksaw blade as a spatula to really muck it into the nooks and crannies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2363153990/" title="Lathe mob #7 [6/6] by nickjohnson, on Flickr"&gt;&lt;img style="float: left; margin-right: 2ex;" src="http://farm4.static.flickr.com/3220/2363153990_24d15a3604_m.jpg" alt="Lathe mob #7 [6/6]" height="180" width="240" /&gt;&lt;/a&gt;Install the chip guard. It is secured down by five 6-32 machine screws.  Re-install the apron onto the lathe, and rejoice in your apron's newfound ability to repel chips!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/03/my-minilathe-and-several-mods-thereof.html" title="My minilathe, and several mods thereof" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3677088191405877538" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3677088191405877538/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3677088191405877538" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3677088191405877538" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-724109349925709170</id><published>2008-03-07T19:50:00.005-05:00</published><updated>2008-03-07T20:12:08.660-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="reuse" /><category scheme="http://www.blogger.com/atom/ns#" term="pwm" /><category scheme="http://www.blogger.com/atom/ns#" term="lamp" /><category scheme="http://www.blogger.com/atom/ns#" term="color" /><category scheme="http://www.blogger.com/atom/ns#" term="led" /><category scheme="http://www.blogger.com/atom/ns#" term="diy" /><title type="text">Multi-color lamp from (some) reused materials</title><content type="html">I've seen this style of fabric-draped, muted-light lamp all over new york recently.  I decided to build my own, and make it glow funny colors.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2316967687/" title="Lamp schematic by nickjohnson, on Flickr"&gt;&lt;img style="margin: 3px; float: left;" src="http://farm4.static.flickr.com/3121/2316967687_09c507fefe_m.jpg" alt="Lamp schematic" height="180" width="240" /&gt;&lt;/a&gt;The schematic is really simple; I wanted to keep it that way.  A PIC16 is used to create three PWM signals.  Those three signals feed into three NPN transistors to drive a stack of colored LEDs.  I proper design would use resistors both at the base and the emitter, but I was lazy last night.&lt;br /&gt;&lt;br /&gt;Also, this thing has &lt;a href="http://nicholas.paul.johnson.googlepages.com/glow.tar.bz2"&gt;source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2317768960/" title="Lamp Board - Obverse by nickjohnson, on Flickr"&gt;&lt;img style="margin: 3px; float: right;" src="http://farm4.static.flickr.com/3148/2317768960_eb0a3821d7_m.jpg" alt="Lamp Board - Obverse" height="180" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;Tryin' to keep it simple.  I put it on some perf board, and wire wrapped it.  I tried to space the LEDs evenly on both sides of the board.  The obverse:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2317768962/" title="Lamp Board - Reverse by nickjohnson, on Flickr"&gt;&lt;img style="margin: 3px; float: left;" src="http://farm4.static.flickr.com/3292/2317768962_b902c0f8eb_m.jpg" alt="Lamp Board - Reverse" height="180" width="240" /&gt;&lt;/a&gt;And the reverse.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2316967681/" title="Lamp wire-frame by nickjohnson, on Flickr"&gt;&lt;img style="margin: 3px; float: right;" src="http://farm3.static.flickr.com/2274/2316967681_8f990dc201_m.jpg" alt="Lamp wire-frame" height="180" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;Then, I made a frame out of two coat hangers.  I wrapped them with some packaging material from my new job's recent Ikea visit, and sewed it on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2316967683/" title="Lamp Shade by nickjohnson, on Flickr"&gt;&lt;img style="margin: 3px; float: left;" src="http://farm3.static.flickr.com/2271/2316967683_40c767dcc0_m.jpg" alt="Lamp Shade" height="180" width="240" /&gt;&lt;/a&gt;It starts to look a little bit better as more sewing is done.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, it looks like this in the dark:&lt;br /&gt;&lt;br /&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/7xqzfh2oUQo"&gt;  &lt;embed src="http://www.youtube.com/v/7xqzfh2oUQo" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/03/multi-color-lamp-from-some-reused.html" title="Multi-color lamp from (some) reused materials" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=724109349925709170" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/724109349925709170/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/724109349925709170" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/724109349925709170" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3807153646615583817</id><published>2008-03-03T20:01:00.003-05:00</published><updated>2008-03-03T20:13:47.568-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="brooklyn" /><category scheme="http://www.blogger.com/atom/ns#" term="tig welding" /><category scheme="http://www.blogger.com/atom/ns#" term="metal working" /><category scheme="http://www.blogger.com/atom/ns#" term="freegan" /><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="123 tompkins" /><category scheme="http://www.blogger.com/atom/ns#" term="welding" /><category scheme="http://www.blogger.com/atom/ns#" term="bed-stuy" /><category scheme="http://www.blogger.com/atom/ns#" term="events" /><title type="text">Last minute notice: Free class on TIG Welding tomorrow</title><content type="html">Christian just told me that &lt;a href="http://123communityspace.org/"&gt;123 Tompkins Community Space&lt;/a&gt; (&lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=123+tompkins,+brooklyn&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=34.450489,59.765625&amp;amp;ie=UTF8&amp;amp;ll=40.695916,-73.946271&amp;amp;spn=0.008053,0.014591&amp;amp;z=16&amp;amp;iwloc=addr"&gt;map&lt;/a&gt;) is offering a free workshop on &lt;a href="http://en.wikipedia.org/wiki/Tig_welding"&gt;TIG welding&lt;/a&gt; Tomorrow, 4 March 2008, at noon-o-clock.  I don't think I can make it (see note about new job in previous post), but I wish I could.  Why?&lt;br /&gt;&lt;br /&gt;Well, I say that I know how to weld, by which I mean I can use an oxy-acetaline kit, and I can use a MIG welder.  Still, that limits me to steel.  TIG welding, on the other hand, can be used to weld a greater variety of metals, such as aluminum, magnesium, copper, and alloys thereof.  If you're interesting in bicycle frame building, for instance, this is the kind of welding you want to learn (in addition, of course, to brazing).&lt;br /&gt;&lt;br /&gt;Additionally, I'll plug this by reminding everyone that it's &lt;span style="font-style: italic;"&gt;free&lt;/span&gt;, rare for anything educational in NYC.  Show up, enjoy it, and... you know, leave a donation if you have fun.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/03/last-minute-notice-free-class-on-tig.html" title="Last minute notice: Free class on TIG Welding tomorrow" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3807153646615583817" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3807153646615583817/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3807153646615583817" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3807153646615583817" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-2871251570889935794</id><published>2008-03-03T19:34:00.004-05:00</published><updated>2008-03-03T19:52:50.200-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="princeton" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="stirling engine" /><category scheme="http://www.blogger.com/atom/ns#" term="princeton university" /><category scheme="http://www.blogger.com/atom/ns#" term="stirling" /><category scheme="http://www.blogger.com/atom/ns#" term="metal lathe" /><category scheme="http://www.blogger.com/atom/ns#" term="rambling" /><category scheme="http://www.blogger.com/atom/ns#" term="software engineer" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><category scheme="http://www.blogger.com/atom/ns#" term="lathe" /><category scheme="http://www.blogger.com/atom/ns#" term="graduate school" /><title type="text">It's been too long</title><content type="html">My appologies for taking a week or so off from the blog.  I assure you there is more to come.  Here are some of my excuses for slacking on the blog:&lt;br /&gt;&lt;br /&gt;I have started a new job, where I work as a Java developer, though so far our work has mostly been assembling Ikea furniture.  The office is awesome--on vibrant Franklin Ave in Crown Heights, Brooklyn.  I like how every five minutes or so someone stops by to ask "so, what is this place?"  Apparently, the office was an abandoned/condemned building for many years, and though people are glad it's no longer rat infested, the neighborhood really wants another restaurant, lounge, or other public space.  The job has been keeping me busy, but in a good way.&lt;br /&gt;&lt;br /&gt;I've heard from a few Graduate schools.  What? I forgot to mention that I applied to a few PhD in CS programs?  Yeah, I did.&lt;br /&gt;&lt;br /&gt;So far, Princeton has made me a good offer, and CMU and UPenn have rejected me.  More schools are pending.  At the moment, it looks like I'll be moving to small town Jersey unless Columbia wants me.  On a related note: does anyone out there live in Princeton?  What do you think of it?  Of particular interest to me are cultural events, bike-friendliness, a leftish-leaning populace, and urbanity (ha!).&lt;br /&gt;&lt;br /&gt;I purchased &lt;a href="http://www.toolsnow.com/browse.cfm/4,876.html"&gt;this lathe&lt;/a&gt; today, and am looking forward to its arrival.  As far as metal lathes are concerned, this one is dirt cheap (though still an expensive tool).  I plan to fit this into the &lt;span style="font-style: italic;"&gt;cheap&lt;/span&gt;hack mission by working with scrap materials.  I anticipate my first project will be a &lt;a href="http://sheldonbrown.com/gloss_cn-z.html#crankpuller"&gt;crank puller&lt;/a&gt;, followed by fancy brass crank bolts and top bolts, working my way into &lt;a href="http://en.wikipedia.org/wiki/Stirling_engine"&gt;Stirling engines&lt;/a&gt;.  Don't worry, you will be posted.&lt;br /&gt;&lt;br /&gt;I have two projects on the way: a stylish lamp made from recycled materials, and a bicycle generator built with an old air conditioner.  Stay tuned for more absolutely cheap diy technology.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/03/its-been-too-long.html" title="It's been too long" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=2871251570889935794" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/2871251570889935794/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/2871251570889935794" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/2871251570889935794" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-4177546572428555761</id><published>2008-02-22T11:23:00.004-05:00</published><updated>2008-02-22T11:38:13.152-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="reuse" /><category scheme="http://www.blogger.com/atom/ns#" term="electronics" /><category scheme="http://www.blogger.com/atom/ns#" term="charge coupled device" /><category scheme="http://www.blogger.com/atom/ns#" term="ccd" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><title type="text">More on the Mystery CCD</title><content type="html">&lt;a href="http://www.cheaphack.net/2008/02/mystery-ccd-help-me-identify-this-part.html"&gt;Yesterday I posted&lt;/a&gt; about a mystery CCD that I found in a flatbed scanner.  It has no part number on it; all I knew was that it has 22-pins.  I was hoping that it was like an LCD module---multiple vendors but a single footprint.  Sadly, this is not the case.&lt;br /&gt;&lt;br /&gt;Proof by counterexample: Toshiba produces at least two 22-DIP CCDs with incompatible footprints: the &lt;a href="http://www.chinaicmart.com/pdf/pdf_down.asp?id=642299"&gt;TCD1707D&lt;/a&gt; and the &lt;a href="http://www.chinaicmart.com/pdf/pdf_down.asp?id=642407"&gt;TCD2905D&lt;/a&gt;.  From my analysis below, I now know that this CCD is neither of those.&lt;br /&gt;&lt;br /&gt;I pulled out the continuity tested and started tracing connections.  Here's what I've found:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;buffered input 1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;buffered output 1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;+12V&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;buffered input 2&lt;/li&gt;&lt;li&gt;buffered input 2 (8 and 9 are the same)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;odd, see below&lt;/li&gt;&lt;li&gt;buffered input 3&lt;/li&gt;&lt;li&gt;+12V&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;buffered output 2&lt;/li&gt;&lt;li&gt;buffered output 3&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;buffered input 4&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;li&gt;GND&lt;/li&gt;&lt;/ol&gt;By "buffered input," I mean that the pin is driven by a 74HC04 inverted, through a resistor.  By "buffered output," I mean that the pin is fed into a simple transistor inverter.  By "odd", I mean that two '04 inverters are put in series and drive themselves through a capacitor.  The output also drives this pin through a resistor.&lt;br /&gt;&lt;br /&gt;Since this device has three outputs, I infer this is a color CCD.  I suppose I could have read the packaging on the scanner, but I threw it out before I thought to check.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/more-on-mystery-ccd.html" title="More on the Mystery CCD" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=4177546572428555761" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/4177546572428555761/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/4177546572428555761" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/4177546572428555761" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-4168216147593925796</id><published>2008-02-21T21:11:00.002-05:00</published><updated>2008-02-21T21:14:43.632-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="lunar" /><category scheme="http://www.blogger.com/atom/ns#" term="lunar eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="moon" /><title type="text">Photos from last night's full lunar eclipse</title><content type="html">&lt;p style=""&gt;Here are some photos of last night's full lunar eclipse.&lt;br /&gt;&lt;/p&gt;&lt;p style=""&gt;&lt;a href="http://www.flickr.com/photos/npj/2282180055/" title="Lunar Eclipse 2008, circa 9pm by nickjohnson, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3034/2282180055_d566d134ac_m.jpg" alt="Lunar Eclipse 2008, circa 9pm" height="236" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;c. 9pm&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style=""&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2282969050/" title="Lunar Eclipse 2008, circa 10pm by nickjohnson, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2084/2282969050_8a0fefe1fd_m.jpg" alt="Lunar Eclipse 2008, circa 10pm" height="214" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;c. 10pm&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style=""&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/npj/2282180217/" title="Lunar eclipse 2008, circa 11pm by nickjohnson, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2361/2282180217_e06287ec21_m.jpg" alt="Lunar eclipse 2008, circa 11pm" height="229" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;c. 11pm&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/photos-from-last-nights-full-moon.html" title="Photos from last night's full lunar eclipse" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=4168216147593925796" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/4168216147593925796/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/4168216147593925796" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/4168216147593925796" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-1310724340770103613</id><published>2008-02-21T20:56:00.003-05:00</published><updated>2008-02-21T21:00:42.338-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="reuse" /><category scheme="http://www.blogger.com/atom/ns#" term="charge coupled device" /><category scheme="http://www.blogger.com/atom/ns#" term="ccd" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><title type="text">Mystery CCD: Help me identify this part</title><content type="html">&lt;a href="http://www.flickr.com/photos/npj/2283027544/" title="Mystery CCD by nickjohnson, on Flickr"&gt;&lt;img style="margin: 3px; float: right;" src="http://farm3.static.flickr.com/2327/2283027544_2ff1c58e80_m.jpg" alt="Mystery CCD" height="180" width="240" /&gt;&lt;/a&gt;I pulled this out of a flatbed scanner.  It's a linear charge-coupled device (CCD).  I want to use it in a project (see below), but I don't have any datasheet.  All I know is that it has 22 pins.  Any pointers would be greatly appreciated.&lt;br /&gt;&lt;br /&gt;So what do I want to use it for?  I want to put it next to a radioactive mass and use it to generate truly random numbers.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/mystery-ccd-help-me-identify-this-part.html" title="Mystery CCD: Help me identify this part" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=1310724340770103613" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/1310724340770103613/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1310724340770103613" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1310724340770103613" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-1961851591367805305</id><published>2008-02-20T18:24:00.002-05:00</published><updated>2008-02-20T18:24:53.075-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="lunar" /><category scheme="http://www.blogger.com/atom/ns#" term="lunar eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="events" /><category scheme="http://www.blogger.com/atom/ns#" term="park slope" /><category scheme="http://www.blogger.com/atom/ns#" term="astronomy" /><category scheme="http://www.blogger.com/atom/ns#" term="moon" /><title type="text">Update: Where to watch tonight's lunar eclipse</title><content type="html">According to &lt;a href="http://onlytheblogknowsbrooklyn.typepad.com/only_the_blog_knows_brook/2008/02/lunar-eclipse-t.html"&gt;Only the Blog Knows Brooklyn&lt;/a&gt;, a good place to watch tonight's lunar eclipse in Park Slope is at 9th St and 7th Ave. Here, an amateur astronomer with a telescope will be letting people have a nice glimpse, and talking about what's going on.&lt;br /&gt;&lt;br /&gt;About 8:45pm -- 10pm.  Don't miss it or you have to wait until 2010!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/update-where-to-watch-tonights-lunar.html" title="Update: Where to watch tonight's lunar eclipse" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=1961851591367805305" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/1961851591367805305/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1961851591367805305" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/1961851591367805305" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-557637996654087093</id><published>2008-02-18T16:50:00.002-05:00</published><updated>2008-02-18T16:53:54.625-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="events" /><category scheme="http://www.blogger.com/atom/ns#" term="make" /><category scheme="http://www.blogger.com/atom/ns#" term="makenyc" /><title type="text">Meet me at Make:NYC #4</title><content type="html">The fifth meeting of &lt;a href="http://www.makenyc.org/?p=51"&gt;Make:NYC&lt;/a&gt; will take place this Saturday, 23 Feb 2008, noon-o-clock at 325 Gold, 2nd floor, Brooklyn.&lt;br /&gt;&lt;br /&gt;There will be seminars on soldering and LEDs (whoo hoo??), but more importantly, there will be show and tell. &lt;br /&gt;&lt;br /&gt;Now I just have to put a thingy together for the meeting.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/meet-me-at-makenyc-4.html" title="Meet me at Make:NYC #4" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=557637996654087093" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/557637996654087093/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/557637996654087093" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/557637996654087093" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-5726390702345565652</id><published>2008-02-17T11:04:00.004-05:00</published><updated>2008-02-17T11:48:47.170-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="reuse" /><category scheme="http://www.blogger.com/atom/ns#" term="trash" /><category scheme="http://www.blogger.com/atom/ns#" term="urbanity" /><category scheme="http://www.blogger.com/atom/ns#" term="waste management" /><category scheme="http://www.blogger.com/atom/ns#" term="compost" /><category scheme="http://www.blogger.com/atom/ns#" term="scavenger" /><category scheme="http://www.blogger.com/atom/ns#" term="deposits" /><category scheme="http://www.blogger.com/atom/ns#" term="Recycling" /><category scheme="http://www.blogger.com/atom/ns#" term="urban effect" /><title type="text">All packaging should have a deposit</title><content type="html">You simply don't see soda cans or bottles on the streets of Brooklyn.  Similarly, it's sometimes hard to find scrap metal on the streets (I'm the kind of guy who looks for that stuff).  You do, however, see plenty of paper products, such as food-wrappers, and tons of plastic bags.&lt;br /&gt;&lt;br /&gt;What is the distinction?&lt;br /&gt;&lt;br /&gt;Anything that can be redeemed for money--even small deposits of $0.05/ea--is actively scavenged and turned into cash.  This is a beautiful consequence of urban society.  There are so many people here, and the bell curve of income extends so far to either extreme, that material scavenging is (relatively) proffitable to some.  There are homeless people who canvas all the streets of Brooklyn looking for any material that have a deposit.  A single can is worth shit, but if you fill a shopping cart with them, you can get a good meal or whatever.  In effect, we pay the homeless to clean up certain types of trash, and they do it.&lt;br /&gt;&lt;br /&gt;As metal prices have risen over the last few years, this is true for scrap metal too.  Copper, brass, and aluminum have gone through the roof.  If someone leaves some left over copper plumbing pipe on the street, it will be collected and redeemed at a scrap yard.  Again, the homeless are in effect paid to clean up the streets.&lt;br /&gt;&lt;br /&gt;Even failing that, New York offers free curbside pickup and recycling of glass, plastics, metals and papers.  The variety of recyclable is much broader than I have seen elsewhere.  For example, you can leave more than metal cans on the curb, but anything which is "mostly metal," such as old bike frames, refrigerators, air conditioners, toasters, etc.&lt;br /&gt;&lt;br /&gt;I often think about systems in which the remaining trash--the paper and bags on the streets--is similarly collected and recycled or reclaimed.  There are a few difficulties with that, but I believe they can be overcome.&lt;br /&gt;&lt;br /&gt;Paper-as-food-packaging is often not recycled because it has food scraps on it--an overzealous blot of mustard, meat juices, whatever--and unlike metal or plastic food containers, paper products cannot be washed before recycling.  If the city tried to offer recycling of this kind of paper, recycling bins would attract animals, and recycling plants would need to perform additional steps to purify the fiber.  As much as I demonize these discarded food wrappers, I am old enough to remember when McDonalds used to put each hamburger in a styrofoam container, and I recognize they are the lesser of evils.&lt;br /&gt;&lt;br /&gt;Perhaps the only way to reuse this grade of paper would be to compost it, and then use it in municiple parks, donate it to community gardens, and sell it to homeowners or landscaping companies.  There is precedent to suggest this could work.  Many municipalities dredge their waste treatment facilities, and sell this as compost.  Also, I know that some beer breweries sell their waste as compost.&lt;br /&gt;&lt;br /&gt;Plastic bags are also tricky.  Native New Yorkers may not realize this, but people really go crazy with the bags here.  In my native Virginia, people would always ask if you wanted a bag if it were clear that you could get along without one.  When I moved here, I was surprised to learn that they &lt;span style="font-style: italic;"&gt;always&lt;/span&gt; try to give you a bag.  I had never thought of putting cups of coffee into a bag until I moved here.  I've bought single, self-contained products, like a gallon of milk, and sure enough they'll put it in a bag if you're not quick enough to exclaim "but it's already got a handle!"&lt;br /&gt;&lt;br /&gt;Plastic bags can be recycled into new plastic bags, or into fiber to create materials such as polar fleece.  It's perhaps not the best reuse, but it is reuse.  However, the city does not pick up plastic bags on the curb.  The consumer's recycling options are limited; I am fortunate enough to be a member of the Park Slope Food Coop, which will recycle many of these bags.&lt;br /&gt;&lt;br /&gt;Now that I have established the potential for the reuse of paper and plastic, we need only implement a system by which these materials are collected.  I propose one solution: deposits for paper and plastic.  I know this is possible, because they do it elsewhere.&lt;br /&gt;&lt;br /&gt;Without doing too much research, I know that there is an additional cost per-bag at stores in France and Ireland.  This is a tax to encourage people to bring their own bags, and I think it's great.  But what if we could not just implement that tax, but also return it per bag returned?  And for the case of paper, what if fast-food restaurants would serve you a burger on a plate, and charge a packaging tax for wrapped food to-go?&lt;br /&gt;&lt;br /&gt;It's difficult, but it could make New York cleaner.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/all-packaging-should-have-deposit.html" title="All packaging should have a deposit" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=5726390702345565652" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/5726390702345565652/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/5726390702345565652" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/5726390702345565652" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-3963427316397485552</id><published>2008-02-17T00:18:00.001-05:00</published><updated>2008-02-17T00:20:25.051-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="night" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="lunar" /><category scheme="http://www.blogger.com/atom/ns#" term="quote depth exceeded" /><category scheme="http://www.blogger.com/atom/ns#" term="lunar eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="events" /><category scheme="http://www.blogger.com/atom/ns#" term="moon" /><title type="text">Lunar eclipse, Wednesday night</title><content type="html">Slashdot &lt;a href="http://science.slashdot.org/article.pl?sid=08/02/16/1746242"&gt;reports&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://slashdot.org/%7EKingArthur10/" rel="nofollow"&gt;KingArthur10&lt;/a&gt; writes &lt;i&gt;"It will be the last lunar eclipse until December 2010, and it should be spectacular. Shades of turquoise and red will pour over the moon's surface as it moves into the Earth's shadow around 8:43pm EST. As NASA reports: 'Transiting the shadow's core takes about an hour. The &lt;a href="http://science.nasa.gov/headlines/y2008/13feb_lunareclipse.htm"&gt;first hints of red appear around 10 pm EST&lt;/a&gt; (7 pm PST), heralding a profusion of coppery hues that roll across the Moon's surface enveloping every crater, mountain and moon rock, only to fade away again after 11 pm EST (8 pm PST). No special filter or telescope is required to see this spectacular event. It is a bright and leisurely display visible from cities and countryside alike. While you're watching, be alert for another color: turquoise. Observers of several recent lunar eclipses have reported a flash of turquoise bracketing the red of totality ... The source of the turquoise is ozone.' So, all of you amateur astronomers need to get out there and take pictures. It &lt;a href="http://flickr.com/search/?q=lunareclipse"&gt;might be worthwhile sharing them&lt;/a&gt; on sites like SpaceWeather or Flickr so that our Asian, European, African, and Australian brethren can witness the sight as well."&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-7340324799078970";
/* 728x90, created 8/4/08 */
google_ad_slot = "1609028911";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://www.cheaphack.net/2008/02/lunar-eclipse-wednesday-night.html" title="Lunar eclipse, Wednesday night" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6181310435977891397&amp;postID=3963427316397485552" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://www.cheaphack.net/feeds/3963427316397485552/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3963427316397485552" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6181310435977891397/posts/default/3963427316397485552" /><author><name>Nick Johnson</name><uri>http://www.blogger.com/profile/09742551843387605596</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-6181310435977891397.post-5755908395405376719</id><published>2008-02