<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUIDQH0zfSp7ImA9WhBSFUk.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157</id><updated>2013-02-22T07:39:31.385-08:00</updated><category term="ruby" /><category term="essays" /><category term="plugins rails" /><category term="psychology" /><category term="harper" /><category term="javascript" /><category term="git" /><category term="git-tmbundle" /><category term="vim" /><category term="textmate" /><category term="solutions" /><category term="learning" /><category term="nerd" /><category term="asthma" /><title>Tim, the Enchanter</title><subtitle type="html">What manner of man are you that can summon up code without C# or Java?</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://tim.theenchanter.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/TimTheEnchanter" /><feedburner:info uri="timtheenchanter" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEYBR344eCp7ImA9WhNSFks.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-1579957623421663957</id><published>2012-10-27T13:37:00.003-07:00</published><updated>2012-10-30T23:49:16.030-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-30T23:49:16.030-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="psychology" /><category scheme="http://www.blogger.com/atom/ns#" term="harper" /><category scheme="http://www.blogger.com/atom/ns#" term="learning" /><title>Spaced Repetition Learning Systems: Achieving Flow in Rote Memorization</title><content type="html">My 5-year-old daughter and I have been working on her flash cards using the old physical decks for some time. Not having much of a system other than just cycling through the same old deck started to feel wasteful: I didn't have a good way to prioritize the cards with which she'd particularly struggled, so we spent the largest majority of the time going through words she knew really well. Even more, it seemed to discourage her from learning new words as hard words were shown too infrequently between a long stream of easies that the fluctuation between boredom and frustration stressed her out.&lt;br /&gt;
&lt;br /&gt;
For some time friends of mine have recommended to me the Anki flash card system; Anki is an implementation of the Spaced Repetition Learning System: a system of learning based on common-sense principles such as showing at greater frequency cards with which the learner struggles, and less frequently those that have been mastered.&lt;br /&gt;
&lt;br /&gt;
Using this system, it seems that my daughter gets a well-balanced mix of words she's already mastered, words she's learning, and brand new words, and in the end that seems to help keep her in the &lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_784612689"&gt;&lt;/span&gt;optimal state of flow&lt;span id="goog_784612690"&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;while learning [1]! This is corroborated by her being excited to do the flash cards each evening.&lt;br /&gt;
&lt;br /&gt;
After using this system 15 minutes a day, in just ONE WEEK my daughter has mastered all 100 of the sight words her teacher had assigned! I am so proud of her!&lt;br /&gt;
&lt;br /&gt;
If you'd like to learn more about the Anki system:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://ankiweb.net/"&gt;https://ankiweb.net/&lt;/a&gt;&lt;/div&gt;
&lt;a href="https://ankiweb.net/"&gt;&lt;br /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span style="margin-left: 1em; margin-right: 1em;"&gt;&lt;a href="https://ankiweb.net/"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-PTJDD2Z2v28/UIxEIFM8mFI/AAAAAAAABJo/kmi_nT3OWZs/s1600/icon175x175.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://ankiweb.net/"&gt;Anki&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
It runs on all the OS's and devices, including iOS, Mac OS, Android, and the web. (the developer seems to fund his efforts through iOS sales, as that is the only platform for which he charges, and notably, a charge I was happy to pay.)&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;[1] - Flow is the"...&amp;nbsp;mental state of operation in which a person performing an activity is fully immersed in a feeling of energized focus, full involvement, and enjoyment in the process of the activity" [&lt;a href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;Wikipedia&lt;/a&gt;]. One of the requirements to reach "flow" is an optimal balance between challenge and ability.&lt;/li&gt;
&lt;/ul&gt;
</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/1579957623421663957/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=1579957623421663957" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1579957623421663957?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1579957623421663957?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/fVGEm7m0i3M/spaced-repetition-learning-systems.html" title="Spaced Repetition Learning Systems: Achieving Flow in Rote Memorization" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-PTJDD2Z2v28/UIxEIFM8mFI/AAAAAAAABJo/kmi_nT3OWZs/s72-c/icon175x175.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2012/10/spaced-repetition-learning-systems.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYHQX4-fyp7ImA9WhVbEU0.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-7070336867701989670</id><published>2012-05-26T23:46:00.000-07:00</published><updated>2012-05-27T00:18:50.057-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-27T00:18:50.057-07:00</app:edited><title>Danger: Dragons</title><content type="html">Promote safety with this effective warning tool:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.mediafire.com/view/?yaalthns8nfpdth"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-7uJXqxFsNls/T8HNM5njnNI/AAAAAAAABI4/AfVctq6UWNE/s1600/dragons.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.mediafire.com/view/?yaalthns8nfpdth"&gt;Download PDF&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Dragon silhouette lifted from &lt;a href="http://watyrfall.deviantart.com/art/Vector-Dragon-Silhouette-258596256"&gt;Kary&lt;/a&gt;&amp;nbsp;(who in turn lifted it from &lt;a href="http://limner-stock.deviantart.com/art/Stock-Metal-Dragon-17335274"&gt;Here&lt;/a&gt;).&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/7070336867701989670/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=7070336867701989670" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/7070336867701989670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/7070336867701989670?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/xI98FlZYChY/danger-dragons.html" title="Danger: Dragons" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-7uJXqxFsNls/T8HNM5njnNI/AAAAAAAABI4/AfVctq6UWNE/s72-c/dragons.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2012/05/danger-dragons.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEFRX4_fyp7ImA9WhVbE08.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-1265514684636857138</id><published>2012-05-24T10:06:00.002-07:00</published><updated>2012-05-29T13:16:54.047-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-29T13:16:54.047-07:00</app:edited><title>Celiac disease</title><content type="html">As some of you may have heard, this week I was diagnosed with celiac disease. I was shocked, as I went in to be tested for something else. There is a small chance that the diagnosis could be wrong, so further blood tests at being run to confirm the diagnosis.&lt;br /&gt;
&lt;br /&gt;
Celiac disease is a genetic disease, but some people who have the gene sequence do not develop symptoms. "According to the University of Chicago Celiac Disease Center, if you are a first-degree relative (parent, child, brother or sister) of a person with celiac disease, you have a 1 in 22 chance of developing the disease in your lifetime. If you are a second-degree relative (aunt, uncle, niece, nephew, grandparent, grandchild or half-sibling), your risk is 1 in 39". (&lt;a href="http://celiacdisease.about.com/od/celiacdiseasefaqs/f/FAQ- FamilyRisk.htm"&gt;link&lt;/a&gt;). So odds are, if you're related to me: you're probably safe, but watch out for it. It manifests in a lot of different ways, and is very hard to diagnose by dietary experiments.&lt;br /&gt;
&lt;br /&gt;
Gluten is in EVERYTHING, and figuring out whether or not it contains gluten is very complex, since it is often not specifically labeled as other common allergens are. Brown rice syrup, lunch meats, dressings, soy sauce, imitation bacon, and many other innocent sounding foods SOMETIMES DO contain gluten (&lt;a href="http://www.celiac.org/index.php? option=com_content&amp;view=article&amp;id=138&amp;Itemid=239"&gt;link&lt;/a&gt;). It doesn't matter if I consume a little bit of gluten, or a lot of gluten: a small amount is all it takes to trigger auto-immune response, which in turns causes the damage. I went off of grains for 4 weeks during my low glycemic diet, but likely still consumed other products containing gluten during that time; this may be why I and other doctors missed the association.&lt;br /&gt;
&lt;br /&gt;
To my friends and family reading this: I fear my diet, now even more restrictive than ever, will be more of a burden for others than it is for myself. I want to be clear: I have absolutely zero expectation that anyone prepare any special food for me at any family function, gathering, or party. It's stressful to others, and it's stressful to me. I'll plan on bringing my own food, or waiting until I get home to eat. So please, if you say, "I'm sorry I forgot to plan something for you, Tim", know that I will be mad (only for a brief second) for not honoring my wishes to not worry about me or feel any induced stress from my dietery needs. I'm very serious about this.&lt;br /&gt;
&lt;br /&gt;
(I will be grateful if you do remember, and do plan something. I just don't expect it. I will need to dissect the ingredient list, and please don't be disappointed if I find a possible of source of gluten.)&lt;br /&gt;
&lt;br /&gt;
Thank you.&lt;br /&gt;
&lt;br /&gt;
&lt;a href ="http://en.wikipedia.org/wiki/Coeliac_disease"&gt;Further reading on Wikipedia&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
Update: Blood test results confirmed the diagnosis.</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/1265514684636857138/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=1265514684636857138" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1265514684636857138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1265514684636857138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/UveoYz4mSYk/celiac-disease.html" title="Celiac disease" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://tim.theenchanter.com/2012/05/celiac-disease.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkANQ30-eCp7ImA9WhVbE08.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-2346095139678772345</id><published>2012-03-26T00:04:00.031-07:00</published><updated>2012-05-29T13:53:12.350-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-29T13:53:12.350-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="asthma" /><title>Asthma</title><content type="html">&lt;p&gt;Over the last few years, I&amp;#8217;ve developed a few onsets of asthma: I&amp;#8217;ve had a few successful remissions, and a few regressions of the disease. This post will serve as a log to best describe my experience with asthma, what I&amp;#8217;ve done successfully send it in remission in the past, what I belive I brought it on for me, and what I am currently doing to try and send it into remission again.&lt;/p&gt;&lt;h2&gt;Hypothesis for how I developed asthma&lt;/h2&gt;&lt;p&gt;My current hypothesis for what I did to develop adult onset asthma has been a combination of the following:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Poor, &lt;span class="caps"&gt;POOR&lt;/span&gt; diet. (At one job, about 1 year before I developed had my first onset of asthma, I ate pretzels for lunch most days during a week&amp;#8230; horrible, &lt;span class="caps"&gt;HORRIBLE&lt;/span&gt; idea). Lots of refined sugar and flour. Hardly any fruits or vegetables. Lots of ice cream, milk, etc. (completely the opposite of how I eat now)&lt;/li&gt;
 &lt;li&gt;High stress&lt;/li&gt;
 &lt;li&gt;Irregular sleep / continual sleep deficit&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I theorize that the above weakened my immune system to the point that a chronic infection (such as Chlamydia Pneumonia or Micoplasma) was able to settle in my lungs.&lt;/p&gt;&lt;h2&gt;A brief log&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;2002-2004&lt;/strong&gt; &amp;#8211; While living in Argentina, I get sick a lot. Sinus infections, Bronchitis and Pneumonia seemed to be my constant companions. This may have been when I picked up the alleged bug, if it&amp;#8217;s what I have. It&amp;#8217;s possible for it to hide out in your body, relatively asymptomatic.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2007-12&lt;/strong&gt; &amp;#8211; Asthma onsets. For several months, I use a Primatine mist inhaler (now off the market, thanks &lt;a href="http://communities.washingtontimes.com/neighborhood/forbidden-table-talk/2012/jan/28/global-warming-verses-affordable-inhalers-truth-ev/"&gt;Al Gore&lt;/a&gt;) to keep lungs open, but after a while the inflammation becomes so great that it doesn&amp;#8217;t matter if I use the inhaler, lungs are open but not much air getting to the bloodstream. I see a naturopath who prescribes a better diet, some supplements, and to eat more yogurt. I try it, with no success. I see Dr. Hugo Rodier, who puts me on a special low-glycemic diet, with supplements (Probiotics, silver shield, Constant Health drink, slippery elm, herbal anti-parasite, vitamin D, Omega 3), and in a few days the asthma goes away. When I introduce milk back into my diet, asthma returns, so I conclude that I&amp;#8217;m now allergic to milk. I&amp;#8217;m free from asthma for a year+, breathing well, although I constantly clear my throat and cough (lots of people notice).&lt;/p&gt;&lt;p&gt;(Sometimes I was able to get away with a little bit of milk without a flare-up, so it&amp;#8217;s obvious to me, in hind site, that milk was not the only problem. I was able to eat can&amp;#8217;t-belive-it&amp;#8217;s-not-butter for a while)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2009-04&lt;/strong&gt; &amp;#8211; Asthma returns. My diet had &amp;#8220;fallen off the bandwagon&amp;#8221; since I figured my asthma was caused by milk, so therefore I could eat as much candy and sugar as I desired, so long as I avoided milk and ate the occasional fruit or vegetable. Rodier puts me back on the diet: Low glycemic, silver shield, Paracleanse (herbal anti-parasite), Constant Health, vitamin D, Omega 3, probiotics. Asthma goes away within 2 days. I finish the diet, and continue asthma free.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2011-07&lt;/strong&gt; &amp;#8211; Asthma begins to return. I have attacks that I am unable to associate directly from milk consumption, but assume that I must have consumed some accidentally (Whey is in bread, sauces, etc.). I can overcome the attacks with a simple anti-histamine (Benadryl).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2011-09&lt;/strong&gt; &amp;#8211; I see an allergist. It&amp;#8217;s confirmed that I&amp;#8217;m allergic to grass, pet dander, milk, mold, fungus, &lt;span class="caps"&gt;EVERYTHING&lt;/span&gt;. He also does a lung test and concludes that I have asthma. I tell him I feel fine enough. He gives me a bunch of free sample drugs, among which is a steroidal inhaler, Ciclesonide. I take it. I breath better. But I&amp;#8217;m hesitant to continue taking it because of the side-effects. I&amp;#8217;m told I need it, otherwise I will have an attack and a rescue inhaler won&amp;#8217;t work for me. Also, going on with asthma untreated will scar my lungs and permanently damage them. Reluctantly, I continue using the inhaler.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2011-11&lt;/strong&gt; &amp;#8211; I go off the inhaler for a while and am fine for a week. Then the asthma came back. I refill the inhaler. I cut sugar from my diet, and wheat. Neither seemed to help. I see a conventional doctor, he gives me a steroid burst pill pack, asthma goes away for a week. I seem to be doing fine.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2011-12&lt;/strong&gt; &amp;#8211; Asthma spirals downward. I suspect acid reflux problems, doctor starts me on Prilosec. I can&amp;#8217;t sleep, every time I lay down, I can&amp;#8217;t breathe. I get a space heater, air humidifier and a better vacuum. It seems to help. I do Dr. Rodier&amp;#8217;s diet again, this time without Paracleanse or Silver shield, but with the addition of &lt;span class="caps"&gt;SAM&lt;/span&gt;-e and a &lt;span class="caps"&gt;MSM&lt;/span&gt; sulfur supplement. I stop the Prilosec and do a compounded anti-biotic (can&amp;#8217;t remember which one) and anti-fungal burst, coupled with probiotics. After a week, I seem to notice a small improvement, then I return to original asthma state. Acid reflux symptoms appear to be mostly gone / no longer noticeable.&lt;br /&gt;&lt;br /&gt;
 (I also change my eating patterns to not eat 1-2 hours before bed).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-01&lt;/strong&gt;  I start immunotherapy (allergy shots), I go 3 times a week. My asthma does not get worse or better with injections, leading me to believe that the asthma is not entirely caused by allergies. My asthma doesn&amp;#8217;t respond to antihistamines any longer, I feel the same either way.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-02&lt;/strong&gt; I see Dr. Rodier again, and we hit it again with Gentamicin and anti-fungal (still taking probiotics). Same story: a little improvement after a week, then return. My diet consists primarily of hand-prepared Salads and smoothies (usually organic ingredients, sometimes not), with the occasional deviation when eating out. Any item with sugar in the first 3 ingredients (or higher that 20% sugars) is avoided.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03&lt;/strong&gt; I stumble upon the research of Dr. David Hahn, Jim Quinlan&amp;#8217;s story (&lt;a href="http://www.asthmastory.com/"&gt;http://www.asthmastory.com/&lt;/a&gt;) and Dave Oshinsky&amp;#8217;s story (&lt;a href="http://oshinsky.org/asthma.htm"&gt;http://oshinsky.org/asthma.htm&lt;/a&gt;). I tell Dr. Hugo Rodier about it, present &lt;a href="http://www.asthmastory.com/research/asthmamdinfov14.pdf"&gt;Dr. David Hahn&amp;#8217;s recommended treatment protocol&lt;/a&gt;, to which Dr. Hugo Rodier says, &amp;#8220;from my research, he seems to be barking up the right tree&amp;#8221;. He prescribes it to me, along with another anti-fungal (fungal infections are a risk when taking antibiotics, he says), Vancomycin.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03-15&lt;/strong&gt; I fly to California for a conference. There, I start the treatment protocol, kicking off with three daily 750mg  Zithromax tablets to burst, then one 750mg tablet per week. I had horrible asthma essentially the whole trip. (Especially our hotel room, I felt as if the building were trying to kill me.)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03-16&lt;/strong&gt; On the second night of my trip, at about 4:30 AM, being unable to sleep for 7 hours, I was about ready to change my flight and take the first plane out of there, missing the rest of the tech conference I flew down there to attend. Just as I about clicked the button to confirm my change, it occurred to me that I may be having problems with the bedding. Sure enough, comforter / pillows were all stuffed with feathers, and that was driving my lungs crazy. Switched to hypoallergenic and did OK the rest of the trip, but not great.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03-21&lt;/strong&gt; I have a dull, faint ear ache that comes and goes during the day. Using the nasaline seems to make it feel better. Nasaline also seems to help reduce inflammation in my lungs.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03-24&lt;/strong&gt; I have an asthma attack all night long that nearly sends me to the E.R. room. I have been taking Ciclesonide twice a day. I hit the albuterol, not much improvement. I took an oral prednisone. Not sure how long it takes to kick in. I notice that I have anxiety, so I also take &lt;span class="caps"&gt;SAM&lt;/span&gt;-e (&lt;i&gt;side note: I&amp;#8217;m persuaded that &lt;span class="caps"&gt;SAM&lt;/span&gt;-e works, have noticed a correlation between improved ambition, excitement for life, and general happiness the day after I take a &lt;span class="caps"&gt;SAM&lt;/span&gt;-e, and this persuasion came after skepticism and disbelief that it did anything at all, so I took it on and off until I started to notice a trend&lt;/i&gt;). After two hours, anxiety subsides, lungs function well enough that I don&amp;#8217;t feel like I&amp;#8217;m suffocating. I sleep&lt;/p&gt;&lt;p&gt;All this while I&amp;#8217;ve been able to climb at the gym. I have less asthma, it seems, when I engage in strenuous physical activity.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03-25&lt;/strong&gt; I take two oral steroids during the day, ciclesonide twice, and one rescue inhaler hit. I feel pretty crappy, but make it through the day. A few times during the day I felt good, then bad, it goes in cycles. At one point it was uncomfortable to read out loud because I was short of breath. During the night I take the dog for a short half-mile run (haven&amp;#8217;t jogged in a while). I come back, lungs hurt, I cough up a bunch of stuff, I feel like I can breath well.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-03-28&lt;/strong&gt; The ciclesonide is no longer working. I feel horrible whether I take it or not. It&amp;#8217;s clear to me that my condition is worsening. Earlier it was suggested to me to switch to Advair (or something with a long-acting beta-antagonist). I execute the suggestion and Advair works! I can breathe amazing. I love it, but don&amp;#8217;t love the side-effects that Advair brings with it (increase risk of death, eye cataracts, etc.)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-16&lt;/strong&gt; I see my asthma doc, and a pulmonologist. I tell them of worsening symptoms. Spirometry test shows 81% FEV1 ratio, again. Asthma doc suggests I start Singulair, gives me a sample. I see the pulmonologist. He congratulates my dietary efforts, says he has heard of Dr. Hahn&amp;#8217;s treatment and has tried it 3 times, 1 time having success. Encouraged me to continue it. Said he thinks I just need more coticosteroids based on the wheezing he is hearing, and in his opinion, he doesn&amp;#8217;t think that I&amp;#8217;ll be able to get this under control with diet (although he admitted that he could be wrong). In the short term, I believe he&amp;#8217;s right, in the long term, I hope he&amp;#8217;s wrong.  Singulair seems to help right away, but not much.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-18&lt;/strong&gt; Singulair does seem to help, but don&amp;#8217;t really notice a huge difference. Still not breathing well: Every moment alive is a moment struggling for breath. Feeling &lt;span class="caps"&gt;LOTS&lt;/span&gt; of neck pain. Feeling &lt;span class="caps"&gt;VERY&lt;/span&gt; depressed, and consider that if I do continue this way, I would prefer my life to end sooner than later (although this is followed by renewed determination to overcome this as I think of the pain my family would feel should I depart, and even though it doesn&amp;#8217;t seem like it now, it&amp;#8217;s possible that I will fully overcome this). I read about Singulair being associated with increased risk of suicide and wonder if it&amp;#8217;s affecting me that way, but I think it&amp;#8217;s more the desperation of feeling so sick, continually getting worse, and not knowing why.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-20&lt;/strong&gt; Asthma continues to worsen. After I inhale Advair, I feel even more wheezy, and am no longer getting the same effect. When I started Advair, I felt great, but now on Advair, I feel so short of breath that I can&amp;#8217;t comfortably talk. I feel I should look up the ingredients in Advair, and discover that Advair has milk in it. In the prior year, I was tested positve for milk allergies. I tell my allergy doctor and he quickly switched my prescription to Dulera. The night after taking Dulera, I feel amazing again.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-21&lt;/strong&gt; I have an asthma attack after sitting in a musty cheap movie theatre for about 50 minutes. I sense it coming on, and have to leave the movie early because it gets so bad that I feel I&amp;#8217;m about to lose consciousness. Take rescue inhaler, two puffs 5 minutes apart, doesn&amp;#8217;t work. I barely feel good enough to drive home. I sleep poorly.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-22&lt;/strong&gt; I travel to Europe for business. At the beginning of the trip, on the plane and in London for the first few days, I&amp;#8217;m certain I made one of the biggest mistakes of my life, and consider flying home early to go to the hospital. I use my rescue inhaler every couple of days. I breathe OK if I&amp;#8217;m outside, but the second I step into a building (new building old building, any building), I start to feel breathing difficulties.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-22&lt;/strong&gt; I travel to Europe for business. At the beginning of the trip, on the plane and in London for the first few days, I&amp;#8217;m certain I made one of the biggest mistakes of my life, and consider flying home early to go to the hospital. I use my rescue inhaler every couple of days. I breathe OK if I&amp;#8217;m outside, but the second I step into a building (new building old building, any building), I start to feel breathing difficulties.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-28&lt;/strong&gt; Something changes. I feel amazing. I&amp;#8217;m still taking Dulera and Singulair, but I feel like I don&amp;#8217;t have Asthma symptoms any more. It&amp;#8217;s incredible.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-04-03&lt;/strong&gt; I return home. By the night time I notice I&amp;#8217;m starting to feel worse again.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-04&lt;/strong&gt; I see my allergy doc. Starting to feel worse again since returning home from Europe. Peak flow is at a consistent 81% FEV1 ratio (has been all along, since Sept 2009). Doc comments on how spooky it is that I&amp;#8217;m that consistent. Together we decide to see if I respond to prednasone and my FEV1 ratio increases. I begin immediately a schedule of 40/40/40/40/30/20/10mg&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-08&lt;/strong&gt; I have one of the worst attacks I&amp;#8217;ve experienced in a while. It felt weird: I was breathing really shallow. I felt sweaty one moment, then not, then again. I went down and used my rescue inhaler, it didn&amp;#8217;t seem to yield any immediate results, but maybe it at least had a calming psychological effect on me knowing that I would be ok? Took a hot shower. Still not breathing well, felt resistance breathing in as well as breathing out (that&amp;#8217;s a new sensation for me, or at least the first time I&amp;#8217;ve experienced it). I wake up Laura and tell her I may need to go to the hospital. The strangest thing is I was blowing really well on the peak flow meter all while feeling short of breath: I felt like a 520, but was blowing easily a 620. Typically 620 is what I blow when I am feeling really good. For a moment I think maybe the bronchodilator (rescue inhalor) had its effect on opening my lungs and how I was feeling was lagging slightly behind? I feel really discouraged that I&amp;#8217;m having asthma attacks while on Prednasone, one of the strongest asthma medications known (and a very harmful one to be on long-term).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-09&lt;/strong&gt; I see Dr. Coy again (Primary care physician, not asthma doc). He comments on how strange it is that I have difficulties breathing on Prednasone. He hears wheezing. My mom mentions earlier that I may have anxiety. I feel confident that anxiety is definitely not the source of the problem, but am willing to admit that perhaps being on anxiety medication will help a little. Dr. Coy agrees that I am showing symptoms that are definitely not anxiety, but that it&amp;#8217;s worth a shot to see if it helps me breath a little better. Dr. Coy suggests I may have &lt;span class="caps"&gt;GERD&lt;/span&gt; again (we experimented with this earlier with the Prilosec). Growing tired of this approach and growing impatient, &amp;#8220;I don&amp;#8217;t care how expensive it is! I want to know what&amp;#8217;s going on in my body, and run whatever tests we can! How can we eliminate the possibility of &lt;span class="caps"&gt;COPD&lt;/span&gt;?&amp;#8221; He suggests a CT scan. I go get one, it comes back normal (what a relief! But also&amp;#8230; still don&amp;#8217;t know what&amp;#8217;s wrong with me).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-10&lt;/strong&gt; I schedule an appointment with a GI doc to confirm / rule out &lt;span class="caps"&gt;GERD&lt;/span&gt;. The theory is acid reflux may be causing acid to enter my trachea, causing inflammation and wheezing in my lungs. I&amp;#8217;m feeling more heartburn recently and have to take antacids frequently (For the past several weeks I carry them with me). Doc says, &amp;#8220;try Prilosec for a bit&amp;#8221;. I tell him no, I want to know what&amp;#8217;s wrong, I want an endoscopy done, I don&amp;#8217;t care about the cost. We schedule an appointment for the following Thursday (a whole week of waiting).  I see an &lt;span class="caps"&gt;ENT&lt;/span&gt; specialist, he&amp;#8217;s little help (probably rightfully so): &amp;#8220;Tough problem you have there, that&amp;#8217;s out of my area, good luck with that.&amp;#8221;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-11&lt;/strong&gt; I am &lt;span class="caps"&gt;VERY&lt;/span&gt; cautious about over eating, eating 4 hours within bed, and snacking all day long. I focus on giving my digestive system breaks. Consequently, my wheezing goes down significantly. I no longer feel it to be difficult to breath. I still have some shortness of breath at times.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-17&lt;/strong&gt; Endoscopy does not find evidence of &lt;span class="caps"&gt;GERD&lt;/span&gt; as I suspect, however, while looking around they discovered evidence of Celiac disease. Further biopsy and blood test both confirm.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-19&lt;/strong&gt; I begin a gluten free diet. I&amp;#8217;m feel as if I&amp;#8217;m getting better, but still take Dulera at the same dosage (no long on Singulair). At times I feel &amp;#8220;air hunger&amp;#8221;, even though my lungs are well open. Taking anxiety medication helps quickly (Alprazolam).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2012-05-25&lt;/strong&gt; I&amp;#8217;ve continued with the antibiotic treatment faithfully. My asthma is doing much better, but the problem seems to be very complex and it is difficult to attribute which things I&amp;#8217;ve attempted have been fruitful. When I was on the Prednasone, I felt worse than I ever had before, but by simply eating smaller dinners, being careful not to overeat, elavate my head during rest, I felt a large, immediate, measurable improvement in wheezing. Then the anxiety medications seemed to solve the air hunger. Late last year, when I originally suspected &lt;span class="caps"&gt;GERD&lt;/span&gt; for the first time, I tried to pay close attention to not eat so close before bed, and it didn&amp;#8217;t seem to yield the same effects of relief as it has recently, but then again, my asthma wasn&amp;#8217;t as bad back then as it was in April. Certainly I might suspect the celiac disease to be the major player, but I &lt;span class="caps"&gt;DID&lt;/span&gt; go wheat-free for several weeks (although it&amp;#8217;s possible I was getting gluten from an unknown source, a supplement, a sauce, a salad dressing, who knows). Celiac disease is associated with impaired immunity (&lt;a href="http://www.cuh.org.uk/resources/pdf/patient_information_leaflets/PIN1124_coeliac_disease.pdf"&gt;even pneumonia&lt;/a&gt;), so a &lt;span class="caps"&gt;CPN&lt;/span&gt; or Mycoplasma infection doesn&amp;#8217;t seem totally far-fetched. My asthma did start to let-up in late April, about 7-8 weeks in to the treatment. I&amp;#8217;ve decided that I&amp;#8217;ll continue the antibiotic treatment (2 more weeks remaining), and of course, the strict gluten-free, milk-free diet with an emphasis on whole, unrefined, unprocessed foods.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;I plan to continue updating this post as I progress in my recovery.&lt;/p&gt;&lt;hr /&gt;&lt;h2 style="vertical-align:middle;"&gt;Conclusion / Summary&lt;/h2&gt;&lt;p&gt;I am told that the antibiotic therapy will not show any results for at least 4-6 weeks, and maybe not even for 12 weeks. As of 2012-05-27, it&amp;#8217;s been 10 weeks, and I do feel that symptoms are definitely improving, but it&amp;#8217;s complex and truly difficult to know what to attribute what to.  In retrospect, it seemed like my asthma spiraled out of control after I began using the Ciclesonide. I suspected that Ciclesonide impaired my immune system such that the ongoing, perpetual battle between the alleged microbe and my immune system was made very unfair for my immune system, and the microbe took deeper root. However, now I doubt that to be the case.  Here&amp;#8217;s what I know:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;My asthma became signifacantly worse since starting Coticosteroids.&lt;/li&gt;
 &lt;li&gt;My asthma has improved since starting the antibiotic treatment, at about 7-8 weeks, right about as expected.&lt;/li&gt;
 &lt;li&gt;My asthma improved since switching from Advair to Dulera, although it did seem to get much worse for a few days.&lt;/li&gt;
 &lt;li&gt;My asthma seems to have improved since focusing on eating less at night, 3-4 hours before sleeping, elevating head at night, taking antacids, although it didn&amp;#8217;t seem to respond quite that way 4 months earlier when I&amp;#8217;d tried to pay attention to that.&lt;/li&gt;
 &lt;li&gt;My breathing problems also seem to be caused by anxiety.&lt;/li&gt;
 &lt;li&gt;I have Celiac Disease.&lt;/li&gt;
 &lt;li&gt;I make a lot of theories.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;None of the information linked here is intended to be medical advice. Zithromax is not a side-effect free drug. If you need asthma medications, and you go off of them prematurely, it could put you at risk. Consult with your own physician / allergist before taking any drugs.&lt;/p&gt;&lt;p&gt;I want to publically thank Dave Oshinsky for corresponding with me in a very helpful and responsible way.&lt;/p&gt;&lt;h2&gt;Links / Further research&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="http://www.deancare.com/Foundation/research/asthma-research/"&gt;Dr. David Hahn&amp;#8217;s profile page with Dean Care&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.cpnhelp.org/patient_stories"&gt;A collection of patient stories of people successfully treated for CPn (Chlamydia Pneumoniae&lt;/a&gt; (Interestingly enough, my story parallels very closely with some of these)&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.asthmastory.com/"&gt;Jim Quinlan&amp;#8217;s report of successfully treating his asthma with Dr. Hahn&amp;#8217;s method.&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.asthmastory.com/"&gt;Dave Oshinsky&amp;#8217;s report&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/7751703"&gt;Chlamydia pneumoniae impairs cilia in lungs&lt;/a&gt; (Cilia is responsible for pushing up foreign particles and fluids out of your lungs)&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.asthmahookworm.com/"&gt;Hookworm infection reported to help with auto-immune disorders&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/11737672"&gt;Chlamydia Pneumonia found in 50% of asthma children. Decreased lung function followed those infected&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/2346095139678772345/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=2346095139678772345" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2346095139678772345?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2346095139678772345?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/Spb-5M0unwU/asthma.html" title="Asthma" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2012/03/asthma.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUASXk8fip7ImA9Wx9SGUk.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-7811537077939291268</id><published>2010-11-30T12:33:00.000-08:00</published><updated>2010-12-09T16:50:48.776-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-09T16:50:48.776-08:00</app:edited><title>Building MySQL multiarch (32/64 bit) client libraries on OS X</title><content type="html">&lt;p&gt;Getting the mysql gem to build can be a pain.  Especially if you have installed the 64-bit version of mysql and are using a 32-bit version of ruby&lt;/p&gt;

&lt;p&gt;You can check the build arch of an executable/library via the &lt;code&gt;file&lt;/code&gt; command, such as:&lt;/p&gt;

&lt;pre&gt;
$ file `which ruby`
/Users/timcharper/Developer/.rvm/rubies/ruby-1.8.6-p383/bin/ruby: Mach-O executable i386
$ file /usr/local/mysql/lib/libmysqlclient.dylib 
/usr/local/mysql/lib/libmysqlclient.dylib: Mach-O 64-bit dynamically linked shared library x86_64
&lt;/pre&gt;

&lt;p&gt;See how those disagree?  If you're using &lt;a target='_blank' href='https://github.com/mxcl/homebrew'&gt;homebrew&lt;/a&gt; (which you should be!), you can build the client libs/tools only (universal style) as follows:&lt;/p&gt;

&lt;pre&gt;
brew install mysql --client-only --universal
&lt;/pre&gt;

&lt;p&gt;Then, to install the gem, you need to pass some fancy flags to get the mysql gem to link against your new libraries:&lt;/p&gt;

&lt;pre&gt;
HOMEBREW_PREFIX=/usr/local # if your prefix differs, modify this line

gem install mysql -- --with-opt-include=$HOMEBREW_PREFIX/include/mysql/ --with-opt-lib=$HOMEBREW_PREFIX/lib/mysql --without-mysql-config
&lt;/pre&gt;

&lt;p&gt;Your gem should build with no errors, and your new shiny universal mysql client libraries should serve you well in the future if you use both 32-bit and 64-bit rubies.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/7811537077939291268/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=7811537077939291268" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/7811537077939291268?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/7811537077939291268?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/0eO88FhVYxc/building-mysql-universal-3264-bit.html" title="Building MySQL multiarch (32/64 bit) client libraries on OS X" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/11/building-mysql-universal-3264-bit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENQXc6eSp7ImA9WxFUFkQ.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-2797948720810887216</id><published>2010-06-27T20:22:00.001-07:00</published><updated>2010-06-27T20:28:10.911-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-27T20:28:10.911-07:00</app:edited><title>A Series of Impossible Events</title><content type="html">&lt;p&gt;So, Saturday we hiked to Stewart Falls w/the kiddos.   Ok, Mikkie rode on my shoulders most of the way, and walked maybe 1/20th of the time (I had to teach her several times that my eyeballs were not a good place for her to cling to for support&amp;#8230; nor my mouth, my throat, my ears&amp;#8230;. where&amp;#8217;s a baby girl to hold on to?).&lt;/p&gt;


 &lt;p&gt;Anyways&amp;#8230; the strangest of coincidences.   Of the 20 odd people we must&amp;#8217;ve passed on the trail that Saturday Evening, one face struck a vein of familiarity, and the name &amp;#8220;Gwen&amp;#8221; came to mind. Risking an awkward moment of &amp;#8220;oh, I&amp;#8217;m sorry, I mistook you for someone I knew&amp;#8221;, I turned around and said her name aloud, waiting to see if she would respond. To my surprise, she stopped, turned around, and not only did it turn out to be her, she was there with both Brandon, and Jill (two other very prominent people in my childhood whom I hadn&amp;#8217;t seen nor talked to for at least 5 years)!   We talked for a bit, had a brief round of catching up, and both commented on the impossible odds that were beaten for us to both be on that trail, crossing at the same time, on that day.   And how funny it is was that I, Jill and Brandon passed us by without noticing (Jill and I were best of friends between the ages of 2 and 10, a friendship that unfortunately dwindled to the status of &amp;#8220;acquaintances&amp;#8221; when I moved to another neighborhood).&lt;/p&gt;


 &lt;p&gt;This isn&amp;#8217;t all: earlier that day I was helping my friend Ronny move into his new house. I became acquainted with another fellow helper, whose first name I&amp;#8217;d only asked: Jake. After some good conversation, the subject of where we lived came up, to which he said South Jordan, and I said Saratoga Springs. He said &amp;#8220;Saratoga Springs, I have a brother who lives in Saratoga Springs&amp;#8221;. &amp;#8220;Oh really?&amp;#8221; I asked, &amp;#8220;which part&amp;#8221;.   He couldn&amp;#8217;t remember the name, so I asked how far out. &amp;#8220;Way out there&amp;#8230; like passed Jacob&amp;#8217;s Ranch&amp;#8221; he replied (my memory faintly recalls the word &amp;#8220;boonies&amp;#8221; used to describe the distance).   I started naming the neighborhoods as I could remember them (Saratoga Springs is organized like that), and when I named ours, he said &amp;#8220;yeah, that&amp;#8217;s it.&amp;#8221; I felt certain that it must be someone I knew, so I asked what his brothers name was, and it turned out to be my next door neighbor!   And to comment on how further these seemingly impossible odds were aligned, in that very moment, after we made this connection, Mark called his brother Jake on his cell phone.   Wanting to capitalize on this moment, I asked Jake if he&amp;#8217;d let me answer it.   He agreed, and Mark was pretty confused as to why his neighbor was answering his brother&amp;#8217;s phone.   It turns out that Ronny&amp;#8217;s wife&amp;#8217;s family and my neighbor Mark&amp;#8217;s family were friends while growing up in California.&lt;/p&gt;


 &lt;p&gt;I&amp;#8217;m still somewhat amazed at how all of that came together yesterday, and not just one coincidence, but two, occurred.   I wonder how often we pass down the same road as a childhood friend, or pass each-other in a crowded mall, without giving notice to the occasion.&lt;/p&gt;


 &lt;p&gt;This isn&amp;#8217;t particularly edifying in anyway, but I suppose it could serve to remind one to toss a spark to kindle an old friendship, and take a moment to notice and admire the little things.&lt;/p&gt;


 &lt;p&gt;Anyways&amp;#8230;. as you were.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/2797948720810887216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=2797948720810887216" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2797948720810887216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2797948720810887216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/GEK3XAfRVqY/series-of-impossible-events.html" title="A Series of Impossible Events" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/06/series-of-impossible-events.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQERX0zeyp7ImA9WxFXEUQ.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-5287783767422368260</id><published>2010-05-18T00:12:00.000-07:00</published><updated>2010-05-18T08:41:44.383-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-18T08:41:44.383-07:00</app:edited><title>Hyper Inflation in the USA?</title><content type="html">&lt;p&gt;
I found this documentary on our economy informative: &lt;a href="http://www.youtube.com/watch?v=eb1n1X0Oqdw"&gt;http://www.youtube.com/watch?v=eb1n1X0Oqdw&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I wouldn't ignore that there could be some sensationalism in the film to try and sell gold, but in spite of that I think the material in it is solid. Essentially, it's stating our economy hasn't recovered from the recession, any sign indicating that we have recovered is actually just inflation occurring, and our country can either make some radical changes now to cut spending and prevent the economic collapse and hyper inflation, or be forced to make some radical changes after our economy collapses.
&lt;/p&gt;

&lt;p&gt;
I'd encourage everyone to watch at least the first 10 minutes and evaluate whether or not you wish to invest a full 55 minutes of your life to watching the whole thing.
&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/5287783767422368260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=5287783767422368260" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/5287783767422368260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/5287783767422368260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/vOWUDdGPqEY/hyper-inflation-in-usa.html" title="Hyper Inflation in the USA?" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/05/hyper-inflation-in-usa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFSXY8cCp7ImA9WxFQF0o.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-6459603480664286972</id><published>2010-05-12T19:32:00.000-07:00</published><updated>2010-05-13T11:31:58.878-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-13T11:31:58.878-07:00</app:edited><title>Whose Line Is It, Anyways?</title><content type="html">&lt;p&gt;Funny story: we decided to install a fence recently. A few days ago, I get a call from Mark (the guy installing the fence) saying that while he was digging fence-posts, he went straight through my neighbors sprinkler line which ran nice and snug along the property line. We comment about what a bad idea it is to install a sprinkler line there, and I call my neighbor to inform him of the misfortune and begin working towards a solution. He tells me there's no way his sprinkler line is on the property line, we assert that the line is indeed on the property line, have checked with the city, and have measured and verified that the property line is indeed where the markers say it is.&lt;/p&gt;

&lt;p&gt;Since I felt it was his fault for having the line so close to the property line, part of me didn't feel I was obligated to do anything to help fix it. However, wanting to keep good feelings between neighbors, and since it was in fact my idea to install the fence, I agreed to buy the material to fix the lines if he'll agree to help me do the work. Saturday comes, I bought the pipe and fittings, and my neighbor and I are digging up the grass to fix the line. Once again, I note how obviously close his sprinkler line is on the property line, and even in one spot it clearly comes into my yard an inch! Then, a thought comes to my mind: "what if it's really my sprinkler line? That would be kind of funny, wouldn't it?" I joke about this out loud. Then we look at each-other, and the joke quickly turns into a prime suspect (one that neither of us had thought of until this point). The city irrigation water was now turned on, so I run and flip on my irrigation valve and cycle through my sprinklers. Hilarity ensues as water sprays everywhere, clearly verifying that my neighbor was in fact right: his sprinkler line WASN'T close to the property line at all, but mine was!!!&lt;/p&gt;

&lt;p&gt;I told my neighbor he could go home, that this was my responsibility and I needed to fix it. However, he was really cool, stayed and helped anyways, saying "I don't care whose fault it is, just that it gets fixed". That was awesome of him and made me feel grateful to have such a good neighbor. More so, I'm extremely grateful that we were able to laugh about it instead of me feeling like a complete idiot (as opposed to just a partial idiot).&lt;/p&gt;

&lt;p&gt;A couple of things in retrospect:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;    When discussing what to do to fix the line, I was really glad I put into practice a few principles I'd learned from the fantastic book on negotiating "Getting to Yes". Had I engaged in positional bargaining (this is your fault so you fix it!) instead of principled negotiation (do you agree that it's fair if...), I would have felt like a lot bigger idiot in the end. Being slow to jump to positions saved a lot of face and made what could have been a big drama, a funny story instead. (trying to avoid "tooting my own horn" here while lending witness to the superiority of principled negotiation over positional bargaining, and the effectiveness of the mentioned book in teaching the subject)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;If you must err (which, being human, we will), err on the side of mercy. I'm grateful to still have a good relationship with my neighbor, and even if it really was his line, how much is amicability between neighbors worth? I'm not advocating that we be soft negotiators and dart straight to any agreement that's unfair to us, there's a line there, somewhere :)
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;What's the worst neighborly dispute you've had with a neighbor?  How did you resolve it?&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/6459603480664286972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=6459603480664286972" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/6459603480664286972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/6459603480664286972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/s_UxS6fTXWM/whose-line-is-it-anyways.html" title="Whose Line Is It, Anyways?" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/05/whose-line-is-it-anyways.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUER3w4eip7ImA9WxBVEko.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-5609930486807056328</id><published>2010-02-06T11:36:00.000-08:00</published><updated>2010-02-15T14:50:06.232-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T14:50:06.232-08:00</app:edited><title>Emacs baggage</title><content type="html">&lt;p&gt;In a prior post, I articulated why I liked Emacs. There are plenty of reasons, certainly! This week, however, I rethought of my decision to switch completely over to Emacs. It has a lot of baggage holding it into the past, and I get the feeling it needs to be reborn (an Emacs rewrite in clojure would be awesome). Leaving Emacs and returning back to my TextMate editing environment has turned out to be a relatively good experience: even though I miss a few features, I don't miss the fiddling. &lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;I really did give Emacs a fair shake. I wrote a campfire mode (a chat client for 37 signals campfire right within Emacs), contributed several improvements to a few scripts, submitted a variety of scripts to the ELPA, and otherwise invested a plethora of hours into learning it.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;At first, the cool features that Emacs has kept me going. It was a lot of investment, and I found myself thinking "it will get easier, the overhead will go away". After two months, it still hasn't.  Emacs is full of 80% complete features, so lots of things bugged me, constantly requiring my attention to fix. When you fiddle with Emacs, some issues don't manifest themselves until the next time you try to start it. Therefore, every time I started up Emacs, something would fail somewhere. In the end, this was throwing gravel into the engine of my productivity.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;Another thing I noticed: my wrists seemed to have more problems when I was using Emacs. For whatever reason, TextMate seems to be easier on my wrists. TextMate might require more keystrokes then Emacs to perform certain editing tasks, but the movements aren't as awkward.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;There is no question that Emacs is more extensible than TextMate or vim. But, in the end, even after several months of usage, I still found myself more productive using simpler editors that just worked well out of the box.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;I will probably continue to use Emacs in some form or another, probably for LaTeX and Clojure. For really quick editing jobs, I still prefer vim, because it is really powerful and starts up fast. But, as far as Ruby on Rails development goes, I'm not sure it gets any better than TextMate.&lt;/p&gt;

&lt;a title="View EmacsBaggage on Scribd" href="http://www.scribd.com/doc/26485105/EmacsBaggage" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;EmacsBaggage&lt;/a&gt; &lt;object id="doc_251845017454112" name="doc_251845017454112" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=26485105&amp;access_key=key-80aiq3gl0bdmbula0jy&amp;page=1&amp;viewMode=list"&gt;  &lt;/object&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/5609930486807056328/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=5609930486807056328" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/5609930486807056328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/5609930486807056328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/IA177bcNBxU/emacs-baggage.html" title="Emacs baggage" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/02/emacs-baggage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8CSH04fip7ImA9WhVRF0g.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-7228932803134256762</id><published>2010-01-30T14:19:00.002-08:00</published><updated>2012-03-26T02:24:29.336-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-26T02:24:29.336-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><title>Getting ruby to use readline instead of libedit</title><content type="html">I prefer readline for a variety of reasons:
&lt;ul&gt;&lt;li&gt;I'm used to it, it's the same command editor that powers bash
&lt;/li&gt;&lt;li&gt;It's very powerful.&lt;/li&gt;&lt;li&gt;In Ruby, it doesn't block other threads from running while waiting for input.&lt;/li&gt;&lt;/ul&gt;When I installed ruby 1-9 using rvm, it got compiled against libedit.  I didn't feel like reinstalling, so I followed &lt;a href="http://www.jorgebernal.info/development/fixing-snow-leopard-ruby-readline"&gt;these instructions over here&lt;/a&gt;.

&lt;p&gt;I'd thought that `&lt;code&gt;port install readline&lt;/code&gt;` would suffice, but it didn't.  I had to install &lt;code&gt;readline-6.0&lt;/code&gt; from source.  Ruby doesn't compile against &lt;code&gt;readline-5.0&lt;/code&gt;, it just spits out a load of errors. The following is what I did, if you would like to follow along:&lt;/p&gt;

Install readline: (I use &lt;a href="https://github.com/mxcl/homebrew"&gt;homebrew&lt;/a&gt;, see &lt;a href="http://www.jorgebernal.info/development/fixing-snow-leopard-ruby-readline"&gt;here&lt;/a&gt; for an alternative method)

&lt;pre&gt;
brew install readline
&lt;/pre&gt;

Then, go into the src ext/readline folder where rvm built your ruby.  Mine was &lt;code&gt;~/.rvm/src/ruby-1.9.1-p378/ext/readline&lt;/code&gt;.

&lt;pre&gt;
cd ~/.rvm/src/ruby-1.9.1-p378/ext/readline # &amp;lt;- your path will vary
ruby extconf.rb --with-readline-dir=/usr/local/Cellar/readline/6.0
&lt;/pre&gt;

Make sure you see this line in the output:

&lt;pre&gt;
checking for readline/readline.h... yes
&lt;/pre&gt;

Then, build it:

&lt;pre&gt;
make
&lt;/pre&gt;

When it finishes, run &lt;code&gt;otool -l readline.bundle&lt;/code&gt;.  You should see this:

&lt;pre&gt;
       name /usr/local/lib/libreadline.6.0.dylib (offset 24)
 time stamp 2 Wed Dec 31 17:00:02 1969
    current version 6.0.0
compatibility version 6.0.0
&lt;/pre&gt;

If you see &lt;code&gt;libedit&lt;/code&gt; anywhere in that output, it didn't link against &lt;code&gt;libreadline&lt;/code&gt;.  Failure.

Now, if it's all successful, install the new readline.bundle.

&lt;pre&gt;
  make install
&lt;/pre&gt;

Good luck!

&lt;hr /&gt;
&lt;p&gt;Update:&lt;/p&gt;

&lt;p&gt;If another version of Ruby is used to run the extconf.rb then the target version of Ruby for which you are compiling read line, you will get another stream of build errors, perhaps something like this:&lt;/p&gt;

&lt;pre&gt;
gcc -I. -I. -I/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin9.0 -I. -DHAVE_READLINE_READLINE_H -DHAVE_READLINE_HISTORY_H -DHAVE_RL_DEPREP_TERM_FUNCTION -DHAVE_RL_COMPLETION_APPEND_CHARACTER -DHAVE_RL_BASIC_WORD_BREAK_CHARACTERS -DHAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS -DHAVE_RL_BASIC_QUOTE_CHARACTERS -DHAVE_RL_COMPLETER_QUOTE_CHARACTERS -DHAVE_RL_FILENAME_QUOTE_CHARACTERS -DHAVE_RL_ATTEMPTED_COMPLETION_OVER -DHAVE_RL_LIBRARY_VERSION -DHAVE_RL_EVENT_HOOK -DHAVE_RL_CLEANUP_AFTER_SIGNAL -DHAVE_REPLACE_HISTORY_ENTRY -DHAVE_REMOVE_HISTORY -I/usr/local/include   -fno-common -arch ppc -arch i386 -Os -pipe -fno-common  -c readline.c
readline.c: In function ‘readline_readline’:
readline.c:82: error: ‘rb_io_t’ undeclared (first use in this function)
readline.c:82: error: (Each undeclared identifier is reported only once
readline.c:82: error: for each function it appears in.)
readline.c:82: error: ‘ofp’ undeclared (first use in this function)
readline.c:82: error: ‘ifp’ undeclared (first use in this function)
readline.c: In function ‘filename_completion_proc_call’:
readline.c:703: error: ‘filename_completion_function’ undeclared (first use in this function)
readline.c:703: warning: assignment makes pointer from integer without a cast
readline.c: In function ‘username_completion_proc_call’:
readline.c:730: error: ‘username_completion_function’ undeclared (first use in this function)
readline.c:730: warning: assignment makes pointer from integer without a cast
readline.c: In function ‘readline_readline’:
readline.c:82: error: ‘rb_io_t’ undeclared (first use in this function)
readline.c:82: error: (Each undeclared identifier is reported only once
readline.c:82: error: for each function it appears in.)
readline.c:82: error: ‘ofp’ undeclared (first use in this function)
readline.c:82: error: ‘ifp’ undeclared (first use in this function)
readline.c: In function ‘filename_completion_proc_call’:
readline.c:703: error: ‘filename_completion_function’ undeclared (first use in this function)
readline.c:703: warning: assignment makes pointer from integer without a cast
readline.c: In function ‘username_completion_proc_call’:
readline.c:730: error: ‘username_completion_function’ undeclared (first use in this function)
readline.c:730: warning: assignment makes pointer from integer without a cast
lipo: can't open input file: /var/folders/jz/jzGJ6Q4BFumSODlDitruR++++TM/-Tmp-//ccvDT283.out (No such file or directory)
make: *** [readline.o] Error 1
&lt;/pre&gt;

&lt;p&gt;To resolve, run extconf.rb with the same version of Ruby for which you are recompiling readline.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Update 2:&lt;/p&gt;

&lt;p&gt;ruby 1.8.6 and ruby 1.8.7 appear to have their threads (and signals) blocked by readline now.  This seems to be a recent development as I have used readline with ruby 1.8.6 without blocking threads in a past build.&lt;/p&gt;

&lt;p&gt;Ruby 1.9.1 doesn't currently block threads with readline&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Update 3:&lt;/p&gt;

I have updated this entire post, consolidating and simplifying the content. Then I renumbered the updates. My blog is not immutable.</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/7228932803134256762/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=7228932803134256762" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/7228932803134256762?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/7228932803134256762?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/oltzW2DBSow/getting-ruby-to-use-readline-instead-of.html" title="Getting ruby to use readline instead of libedit" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/01/getting-ruby-to-use-readline-instead-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IER3g5fip7ImA9WxBRGEk.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-1431638936148750672</id><published>2010-01-06T22:00:00.001-08:00</published><updated>2010-01-06T22:25:06.626-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-06T22:25:06.626-08:00</app:edited><title>Open in Emacs finder droplet</title><content type="html">Here's a handy finder droplet to open a file in Emacs (for MacOS X):

&lt;a href="http://www.mediafire.com/file/zmzqbwoyozz/OpenInEmacs.zip"&gt;OpenInEmacs&lt;/a&gt;

Here's how you install it / use it: 

&lt;a href="http://screencast.com/t/MWM4ZTQ0N"&gt;Demo Video&lt;/a&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/1431638936148750672/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=1431638936148750672" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1431638936148750672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1431638936148750672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/VxYgjCgHL1s/open-in-emacs-finder-droplet.html" title="Open in Emacs finder droplet" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://tim.theenchanter.com/2010/01/open-in-emacs-finder-droplet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCQnY9eip7ImA9WxBTGU8.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-9022714180889015641</id><published>2009-12-12T12:26:00.000-08:00</published><updated>2009-12-15T16:31:03.862-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-15T16:31:03.862-08:00</app:edited><title>Bash Commandline editing</title><content type="html">&lt;p&gt;Back when I was at Lone Star Ruby Conference, &lt;a href="http://adamstacoviak.com/"&gt;Adam Stacoviak&lt;/a&gt;, a friend of mine that I met there, told me that I needed to do a screencast about bash. I didn't act on it until recently, at church, we had a lesson about how important it is to share with others what we know. That was enough to get me off my rear end and put something together.&lt;/p&gt;

&lt;p&gt;One of my goals was to make it concise, trying to avoid wasting a lot of time saying things that didn't really contribute to the concepts conveyed. I've got to tell you, trying to produce a high-quality screencast is a lot of hard work! I managed to produce one that is only 13 minutes long, so I can't imagine the amount of effort that goes into producing a one-hour long screencast -- writing the script, recording this material, editing, polishing, and ensuring that the information is clear. If you have ever pirated a screencast, you are a really, REALLY big jerk :-) they deserve to get paid every penny they earn. (I'm going to be giving mine away for free, so you don't have to worry about that here.  If it benefits you, pay it forward and do share something you know with the world)&lt;/p&gt;

&lt;p&gt;I had the honor of publishing it through a site that my friend Eric Berry operates, &lt;a href="http://teachmetocode.com/"&gt;teachmetocode.com&lt;/a&gt;, joining the ranks of a few other fine gentleman as publishers there. I recorded it with Camstasia studio for the Mac, having received a sponsorship license through teachmetocode.com. Overall, it did the job, but I think it lacked a lot of key features that would have made editing less tedious. (Like being able to group clips together, for example)&lt;/p&gt;

Click here to view the screencast: &lt;a href="http://teachmetocode.com/screencasts/bash-command-line-editing"&gt;Bash Command Line Editing&lt;/a&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/9022714180889015641/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=9022714180889015641" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/9022714180889015641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/9022714180889015641?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/W3KSetjSa-M/bash-commandline-editing.html" title="Bash Commandline editing" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://tim.theenchanter.com/2009/12/bash-commandline-editing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCQ3o5eip7ImA9WxJWEkw.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-949183681469299966</id><published>2009-06-16T20:57:00.000-07:00</published><updated>2009-06-16T20:59:22.422-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-16T20:59:22.422-07:00</app:edited><title>Universal Healthcare</title><content type="html">&lt;p&gt;In response to those who claim that Universal Healthcare is our right because it promotes the general public welfare: I&amp;#8217;m with you that there are some issues with our current health care system.  But do you really thing that letting the government take it over is the way to go?&lt;/p&gt;
&lt;p&gt;From my perspective it seems that less government interference (and less big pharma special interests group pushing policies that big them a leg up on others) would best promote the general welfare you speak of.  Consider veterinarians.  Or, contrast private and public health care service in any country that has implemented the scheme.  Consider the benefits of competition.&lt;/p&gt;
&lt;p&gt;It seems that placing it all in the hands of a bureaucracy would be much worse that what we have now: no accountability to produce and no competition to innovate = less health care available, less efficiency, and less (virtually no) medical advances. Also, why would you want to become a doctor, only to become a slave to what will sure to be a bureaucratic mess, especially one where your rights are considered to be inferior to those who are ill. Thus we lose the incentive to attract (and reward) the best talent.&lt;/p&gt;
&lt;p&gt;I believe we have a right to choose whom to exchange with to acquire health care, and even to study medicine ourselves and provide for ourselves and our family healthcare.  But, when we start to claim right to the fruits of the labor of others, we are on dangerous ground.  We are only respecting freedom so long as it applies to us, and we are infringing on the blessings of liberty of those around us.&lt;/p&gt;
&lt;p&gt;I believe we both have the same values and want to bless the lives of others &amp;#8211; no-one wants more people to go hungry or sick.  This is sincerely what I believe on the subject.&lt;/p&gt;
&lt;p&gt;Thanks for sharing your opinion.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/949183681469299966/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=949183681469299966" title="24 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/949183681469299966?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/949183681469299966?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/Zx4ZfAs-670/universal-healthcare.html" title="Universal Healthcare" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>24</thr:total><feedburner:origLink>http://tim.theenchanter.com/2009/06/universal-healthcare.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4FRXg4fCp7ImA9WxVWEUo.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-2816649910785487170</id><published>2009-02-20T16:16:00.000-08:00</published><updated>2009-02-20T16:41:54.634-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-20T16:41:54.634-08:00</app:edited><title>How to escape arguments in bash</title><content type="html">&lt;p&gt;Today I was trying to write a convenience wrapper script that ran commands remotely on a server (for one of the people we work with).  But, for some reason, ssh handles arguments in a completely suprising (and annoyingly inconvenient) manner that completely ignores quotes.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;
timcharper@timcharper:~ $ ssh my_server grep "4 5 6" ./
grep: 5: No such file or directory
grep: 6: No such file or directory
&lt;/pre&gt;
&lt;p&gt;Grrr&amp;#8230;. this made me feel &lt;span class="caps"&gt;ANGRY&lt;/span&gt;.  Because of this, I couldn&amp;#8217;t use the &amp;#8220;$@&amp;#8221; trick to splat all the arguments on the end and just move on with life.  But it&amp;#8217;s cool, because I&amp;#8217;ve got a thick table to bang my head against, combined with an overly-aggressive problem-solving drive that won&amp;#8217;t accept no for an answer.&lt;/p&gt;
&lt;p&gt;So, I came across an &lt;a href="http://stackoverflow.com/questions/407523/bash-escape-a-string-for-sed-search-pattern"&gt;awk trick&lt;/a&gt; to escape every character in a string, and another trick to iterate over arguments.  Combining the two techniques did the trick, and I can now properly pass command line arguments through an ssh wrapper script.  Since it depends on bash and awk, and bash and awk are on &lt;span class="caps"&gt;EVERY&lt;/span&gt; &lt;span class="caps"&gt;POSIX&lt;/span&gt; system out there, it&amp;#8217;s a winner.&lt;/p&gt;
&lt;h1&gt;The working script:&lt;/h1&gt;
&lt;pre&gt;
#!/bin/sh
CMD=""

for (( i = 1; i &amp;lt;= $# ; i++ )); do
  eval ARG=\$$i
  CMD="$CMD $(echo "$ARG" | awk '{gsub(".", "\\\\&amp;amp;");print}')"
done

ssh my_server cd /path/to/app \&amp;amp;\&amp;amp; RAILS_ENV=production $CMD
&lt;/pre&gt;
&lt;p&gt;Surprisingly, this is quite bullet broof, and properly escapes strings and preserves arguments like:&lt;/p&gt;
&lt;pre&gt;
./remote.sh grep "hello there" . -R
./remote.sh grep "So I says to the typewriter, \"Hey, I'm in quotes\"" . -R
./remote.sh grep "\"" . -R
&lt;/pre&gt;
&lt;p&gt;I wish somebody had posted a solution like this for me to find, so, here you go.  If you came here looking for this solution, I probably saved you an hour of your life, and a lot of stress to boot.  You&amp;#8217;re welcome.&lt;/p&gt;
&lt;p&gt;Have you ever wasted more than an hour on a trivial problem like this?  Is there an easier way to do this?&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/2816649910785487170/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=2816649910785487170" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2816649910785487170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2816649910785487170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/h4eY_2hmoE8/how-to-escape-arguments-in-bash.html" title="How to escape arguments in bash" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://tim.theenchanter.com/2009/02/how-to-escape-arguments-in-bash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MNR3o7fyp7ImA9WxRUFE0.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-8749122769438327402</id><published>2008-11-22T01:30:00.001-08:00</published><updated>2008-11-22T19:04:56.407-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-22T19:04:56.407-08:00</app:edited><title>The Most Rockin' Carpool Site on the Web</title><content type="html">&lt;p&gt;&lt;a href="http://mycarpoolrocks.com/"&gt;&lt;img src="http://img81.imageshack.us/img81/2981/mycarpoolrocksgv5.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Introducing &lt;a href="http://mycarpoolrocks.com/"&gt;MyCarpoolRocks.com&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This blog post marks the second launch party for &lt;a href="http://mycarpoolrocks.com/"&gt;MyCarpoolRocks.com&lt;/a&gt;, a ride sharing site so easy to use your 80 year old grandma could figure it out, and so awesome it&amp;#8217;s going to be the talk of every college and work party.&lt;/p&gt;
&lt;h2&gt;Why ride sharing is awesome&lt;/h2&gt;
&lt;p&gt;For the past several months I&amp;#8217;ve been actively pursuing ride sharing.  My reasons are more economic than environmental (interestingly enough the two intersect here).  Here&amp;#8217;s why I think ride-sharing is awesome:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;We (my wife and I) continue saving an extra car payment, and get along just fine with our vehicle which we&amp;#8217;ve completely paid off&lt;/li&gt;
 &lt;li&gt;Save wear and tear on said vehicle&lt;/li&gt;
 &lt;li&gt;Lower monthly payment for auto insurance&lt;/li&gt;
 &lt;li&gt;Less gas money&lt;/li&gt;
 &lt;li&gt;The ability to be productive during my commute time (I&amp;#8217;ve got a stomach of steel when it comes to getting car sick, my stomach is awesome!)&lt;/li&gt;
 &lt;li&gt;Opportunities to socialize with car-pool partners.&lt;/li&gt;
 &lt;li&gt;Helping to shrink government by being less dependent on government to make my transportation more cost effective. (OK, this will not be a political post)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why I created a ride sharing site&lt;/h2&gt;
&lt;p&gt;Months ago when I was searching for a carpooling website to organize carpools in my church and community, and I found myself in Goldie Locks&amp;#8217; shoes, except the baby cub spit in his porridge and wet his bed.  I couldn&amp;#8217;t find a carpooling site that was &amp;#8220;just right&amp;#8221; &amp;#8211; one I could recommend without any reservations.  They were either difficult to figure out, or it was difficult to modify your commute once you&amp;#8217;ve recorded it, or protect your privacy without listing your house as 5 miles away, or required &lt;span class="caps"&gt;WAY&lt;/span&gt; &lt;span class="caps"&gt;TOO&lt;/span&gt; &lt;span class="caps"&gt;MUCH&lt;/span&gt; information to sign up.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t pretend to be so smart that I can create the perfect carpooling site, but I decided I was certainly going to try.  I started out with these objectives in mind:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;Any user must be able to &lt;span class="caps"&gt;INSTANTLY&lt;/span&gt; understand the tool&lt;/li&gt;
 &lt;li&gt;The sign up form should be as short and quick as possible (no email verifications!)&lt;/li&gt;
 &lt;li&gt;It should be fun&lt;/li&gt;
 &lt;li&gt;It should use be very visual (IE &amp;#8211; if you can convey the information visually on a map, or control input visually without using a drop down box, do it)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How I built &lt;a href="http://mycarpoolrocks.com/"&gt;MyCarpoolRocks.com&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I used the following libraries / gems&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://github.com/rails/open_id_authentication/tree/master"&gt;open_id_authentication&lt;/a&gt; (with &lt;a href="http://openidenabled.com/ruby-openid/"&gt;ruby-openid&lt;/a&gt;) &amp;#8211; providing services to authenticate against open id servers.  This plug-in is &lt;span class="caps"&gt;FANTASTIC&lt;/span&gt;.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://github.com/technoweenie/restful-authentication/tree/master"&gt;restful_authentication&lt;/a&gt; &amp;#8211; very great plugin by technoweenie to handle user authentication.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://gravatarplugin.rubyforge.org/"&gt;gravatar&lt;/a&gt; &amp;#8211; Does the job to display user gravatars on your site.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://github.com/timcharper/indicator/tree/master"&gt;indicator&lt;/a&gt; &amp;#8211; indicator helper methods and javascript.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.loonsoft.com/recaptcha/"&gt;recaptcha&lt;/a&gt; &amp;#8211; Put recaptcha&amp;#8217;s on your website.  Worked great!&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://rspec.info/"&gt;rspec and rspec story runner&lt;/a&gt; to test.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://github.com/timcharper/uber-builder/tree/master"&gt;uber-builder&lt;/a&gt; &amp;#8211; A fine form builder library.  Render the same form partial as a static form and get your view for free.  Supports various layout styles like tables, ul / li, etc. and does not get in your way.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;To host, I got a Linode slice.  They&amp;#8217;ve been really great so far.&lt;/li&gt;
 &lt;li&gt;Bought the domain from http://danggood.com/&lt;/li&gt;
 &lt;li&gt;I made heavy use of rails ActiveRecord named_scopes.  Man they are awesome.&lt;/li&gt;
 &lt;li&gt;As for Google maps, I coded straight against their JavaScript &lt;span class="caps"&gt;API&lt;/span&gt;.  I wrote a resizable rectangle control for Google Maps even (contact me if you&amp;#8217;re interested in it).  Google Maps&amp;#8217; &lt;span class="caps"&gt;API&lt;/span&gt; is very awesome and does not need any Ruby on Rails helpers to work with maps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Lessons Learned (so far)&lt;/h2&gt;
&lt;h3&gt;User case studies are &lt;span class="caps"&gt;KING&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;I can&amp;#8217;t tell you how important this is: after you implement any idea, find somebody who has never seen what you&amp;#8217;ve been working on, and preferably is not well acquainted with what you have been doing.  Watch them try to go through the site, take notes on what confused them, and try to see things from their point of view as they are stumbling through it.  Resist the urge to help them, unless they get totally frustrated.  Just sit back and quietly observe.  Then, take feedback by the shovel-full.&lt;/p&gt;
&lt;p&gt;After &lt;span class="caps"&gt;EXCRUCIATING&lt;/span&gt; user testing from my good friends and family (thanks, you guys so rock), I was able to iron out some pretty serious road blocks that would not have even been aware of otherwise.&lt;/p&gt;
&lt;h3&gt;Don&amp;#8217;t fall in love with your own ideas&lt;/h3&gt;
&lt;p&gt;Your love affair with your ideas will almost inevitably lead to failure.  Why?  Because we all have blind spots, and it often takes the collaboration of several minds to get a clear picture.&lt;/p&gt;
&lt;p&gt;When you get feedback from your user case studies, don&amp;#8217;t be afraid to throw away code, or completely rearrange or restructure things.&lt;/p&gt;
&lt;p&gt;For example: at first, the sign up process consisted of two parts: &amp;#8220;search for matches&amp;#8221; and &amp;#8220;register your commute&amp;#8221;.  I really liked it that way &amp;#8211; it provided flexibility.  I even had the search address being stored in a session and auto-populating in the commute registration form.&lt;/p&gt;
&lt;p&gt;When my tester got very confused, and couldn&amp;#8217;t understand why she was being asked for her address twice, I was tempted to explain to her why it was so awesome that way.  Instead, I sought to understand her point of view.  Her view was more enlightened than mine, and I saw that the flexibility I as in love with was ultimately wasn&amp;#8217;t adding value but detracting from it by complicating things.  The refactoring was painful, but was also one of the greatest improvements I&amp;#8217;d made since the first prototype of the site.&lt;/p&gt;
&lt;h3&gt;Be an information elitist&lt;/h3&gt;
&lt;p&gt;Don&amp;#8217;t be afraid to scrap things &amp;#8211; put every piece of information on trial, especially when you are asking your user for information: are you needed to get the job done, is your existence warranted?  Persecute without mercy.&lt;/p&gt;
&lt;h3&gt;Make a clear path for the user that involves sign up.&lt;/h3&gt;
&lt;p&gt;I believe you&amp;#8217;ve got to guide a user down a path that leads them to sign up.  In my first launch attempt, I just showed a search form and let them search.  Not wanting to force people to register, people got on the site, searched, and said &amp;#8220;oh, that&amp;#8217;s cool&amp;#8221;.  Then they missed the tiny &amp;#8220;add your commute now!&amp;#8221; link and closed their browser.  Gone, probably never to return again.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Building &lt;a href="http://mycarpoolrocks.con/"&gt;MyCarpoolRocks.com&lt;/a&gt; has been a fun and rewarding.  I hope it gets to live up to its potential and create widespread value in my community wherever it finds itself getting heavy use.&lt;/p&gt;
&lt;p&gt;Feedback and criticism in the spirit of peer review is most welcome.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/8749122769438327402/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=8749122769438327402" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/8749122769438327402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/8749122769438327402?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/KdHye01wwkE/most-rockin-carpool-site-on-web.html" title="The Most Rockin' Carpool Site on the Web" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>7</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/11/most-rockin-carpool-site-on-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDRHk8eCp7ImA9WxRQEEw.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-705595117810406094</id><published>2008-10-02T22:27:00.000-07:00</published><updated>2008-10-03T00:41:15.770-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-03T00:41:15.770-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><title>How to has_many :through a has_many :through</title><content type="html">&lt;p&gt;So, I&amp;#8217;ve got 3 models:&lt;/p&gt;
&lt;pre&gt;
  User -&amp;lt; UserConversation &amp;gt;- Conversation -&amp;lt; Message

  (where -&amp;lt; is has many, &amp;gt;- is belongs to, ... etc)
&lt;/pre&gt;
&lt;p&gt;I wanted, in this application, to be able to filter to all messages for a given user.&lt;/p&gt;
&lt;pre&gt;
  User#messages.find(message_id)
&lt;/pre&gt;
&lt;p&gt;So, naturally, I first reached for this:&lt;/p&gt;
&lt;pre&gt;
  class User &amp;lt; ActiveRecord::Base
    ...
    has_many :user_conversations
    has_many :conversations, :through =&amp;gt; :user_conversations
    has_many :messages, :through =&amp;gt; :conversations
  end 

  class UserConversation &amp;lt; ActiveRecord::Base
    belongs_to :user
    belongs_to :conversation
  end

  class Conversation &amp;lt; ActiveRecord::Base
    has_many :user_conversations, :dependent =&amp;gt; :destroy
    has_many :messages, :dependent =&amp;gt; :destroy
  end

  class Message &amp;lt; ActiveRecord::Base
    belongs_to :conversation
  end
&lt;/pre&gt;
&lt;p&gt;Which&amp;#8230; is completly &lt;span class="caps"&gt;WRONG&lt;/span&gt; and yields results like the following:&lt;/p&gt;
&lt;pre&gt;

  &amp;gt;&amp;gt; User.first.messages

  ActiveRecord::StatementInvalid: SQLite3::SQLException: no such
  column: conversations.user_id: SELECT "messages".* FROM "messages"
  INNER JOIN conversations ON messages.conversation_id =
  conversations.id    WHERE (("conversations".user_id = 1)) 
&lt;/pre&gt;
&lt;p&gt;So, apparently ActiveRecord doesn&amp;#8217;t support joins like that.  Sure, I could resort to manually specifying the finder_sql in the join and skip the has_many :through business, but then I&amp;#8217;d lose the that cool ability to apply additional scopes after this &amp;#8211; major &lt;span class="caps"&gt;FAIL&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;So, I came up with a clever way to get around it.&lt;/p&gt;
&lt;pre&gt;
  class User &amp;lt; ActiveRecord::Base
    ...
    has_many :user_conversations
    has_many :conversations, :through =&amp;gt; :user_conversations

    def messages
      Message.for_user(self)
    end
  end

  class Message &amp;lt; ActiveRecord::Base
    belongs_to :conversation
    
    named_scope :for_user, lambda { |user| user = user.id if user.is_a?(User); { :joins =&amp;gt; {:conversation =&amp;gt; :user_conversations}, :conditions =&amp;gt; ["user_conversations.user_id = ?", user]}}
  end
&lt;/pre&gt;
&lt;p&gt;And&amp;#8230; now we can do things like:&lt;/p&gt;
&lt;pre&gt;
  user.messages.find(1)
  user.messages.matching_subject("boogy man")
&lt;/pre&gt;
&lt;p&gt;etc., etc.  Hurray for named_scope.  So.. there's still a few issues.  Namely, it's not REALLY an association - no "create" or "build" methods.&lt;/p&gt;
&lt;p&gt;Dear web: what do think about this?  Got a better way to implement the above scenario?&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/705595117810406094/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=705595117810406094" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/705595117810406094?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/705595117810406094?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/fA0gLzx7B1I/how-to-hasmany-through-hasmany-through.html" title="How to has_many :through a has_many :through" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/10/how-to-hasmany-through-hasmany-through.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUECSXY7fip7ImA9WxdaFk8.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-6167505886467848283</id><published>2008-08-24T18:25:00.001-07:00</published><updated>2008-08-24T18:27:48.806-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-24T18:27:48.806-07:00</app:edited><title>Now we know they're lying</title><content type="html">&lt;p&gt;
&lt;a href="http://img48.imageshack.us/img48/8625/boogerbobnowweknowtheyrvo0.png"&gt;&lt;img src='http://img223.imageshack.us/img223/3702/boogerbobnowweknowtheyruw8.png'/&gt;&lt;/a&gt;
&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/6167505886467848283/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=6167505886467848283" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/6167505886467848283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/6167505886467848283?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/Qg0uyjqP-94/now-we-know-theyre-lying.html" title="Now we know they're lying" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/08/now-we-know-theyre-lying.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcGQno-fip7ImA9WxBTGUQ.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-3148019768316538840</id><published>2008-08-23T23:07:00.000-07:00</published><updated>2009-12-16T11:50:23.456-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-16T11:50:23.456-08:00</app:edited><title>Autoscroll in Safari, Firefox</title><content type="html">&lt;h1&gt;The Autoscroll Bookmarklet&lt;/h1&gt;
&lt;p&gt;Bookmarklets are actually a cool little concept &amp;#8211; make a link that runs a JavaScript command and inject code into any web-page.  Brilliant!  Combine this with an obsessive computer nerd with some free time on a Saturday evening (for example, me), and you get following:&lt;/p&gt;
&lt;p style='margin-top:40px;'&gt;&lt;span style='font-size:70px;'&gt;&lt;a href="javascript:/*The%20Autoscroll%20Bookmarket:Tim%20Harper:http://tim.theenchanter.com*/var%20_ss_interval_pointer;_ss_speed=1;_ss_speed_pairs=[[0,0],[1,200.0],[1,120.0],[1,72.0],[1,43.2],[1,25.9],[2,31.0],[4,37.2],[8,44.8],[8,26.4],[16,32.0]];_ss_last_onkeypress%20=%20document.onkeypress;_ss_stop=function(){clearTimeout(_ss_interval_pointer)};_ss_start=function(){_ss_abs_speed=Math.abs(_ss_speed);_ss_direction=_ss_speed/_ss_abs_speed;_ss_speed_pair=_ss_speed_pairs[_ss_abs_speed];_ss_interval_pointer=setInterval(%27scrollBy(0,%27+_ss_direction*_ss_speed_pair[0]+%27);%20if((pageYOffset%3c=1)||(pageYOffset==document.height-innerHeight))%20_ss_speed=0;%27,_ss_speed_pair[1]);};_ss_adj=function(q){_ss_speed+=q;if(Math.abs(_ss_speed)%3e=_ss_speed_pairs.length)_ss_speed=(_ss_speed_pairs.length-1)*(_ss_speed/Math.abs(_ss_speed))};_ss_quit=function(){_ss_stop();document.onkeypress=_ss_last_onkeypress;};document.onkeypress=function(e){if((e.charCode==113)||(e.keyCode==27)){_ss_quit();return;};if(e.charCode%3e=48&amp;&amp;e.charCode%3c=57)_ss_speed=e.charCode-48;else%20switch(e.charCode){case%2095:_ss_adj(-2);case%2045:_ss_adj(-1);break;case%2043:_ss_adj(2);case%2061:_ss_adj(1);break;};_ss_stop();_ss_start();};_ss_stop();_ss_start();"&gt;Autoscroll&lt;/a&gt;&lt;/span&gt; &amp;#8211; &lt;small&gt;The Bookmarklet&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Works in Safari and Firefox.  If you&amp;#8217;re lucky it might work in Opera, Camino, and Konqueror.  If you&amp;#8217;re at least as lucky as &lt;a href="http://www.youtube.com/watch?v=uW7im0RbEEc"&gt;this guy&lt;/a&gt;, it might work in IE.&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;Usage&lt;/h2&gt;
&lt;p&gt;Click the really big link above to activate auto-scroll (you may want to make your window small enough to have significant scroll space&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the buttons to push:&lt;/p&gt;
&lt;table&gt;
 &lt;tr&gt;
  &lt;td&gt; 0-9       &lt;/td&gt;
  &lt;td&gt; : Set scroll speed, 0 being stand-still and 9 being skim-speed &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt; &amp;#8211;         &lt;/td&gt;
  &lt;td&gt; : Decrease speed                                               &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt; =         &lt;/td&gt;
  &lt;td&gt; : Increase speed                                               &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt; shift + &amp;#8211; &lt;/td&gt;
  &lt;td&gt; : Decrease speed quickly                                       &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt; shift + = &lt;/td&gt;
  &lt;td&gt; : Increase speed quickly                                       &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt; q    &lt;/td&gt;
  &lt;td&gt; : Quit                                                         &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;Installation:&lt;/h2&gt;
&lt;p&gt;If you&amp;#8217;d like to pack this sweet action with you, drag the &amp;#8220;Autoscroll&amp;#8221; link to your bookmarks tool bar.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/3148019768316538840/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=3148019768316538840" title="30 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/3148019768316538840?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/3148019768316538840?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/ahyjnyzeuQU/autoscroll-in-safari-firefox.html" title="Autoscroll in Safari, Firefox" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>30</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/08/autoscroll-in-safari-firefox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMESXo5fyp7ImA9WxdaFU8.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-1891824018073645180</id><published>2008-08-23T14:19:00.000-07:00</published><updated>2008-08-23T14:20:08.427-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-23T14:20:08.427-07:00</app:edited><title>How to Daemonize Any Process</title><content type="html">&lt;p&gt;I&amp;#8217;ve been passively looking for a tip like this for a while.  Often times, I&amp;#8217;ll need to run a command on a server that takes a good 30 minutes to run (like loading a database dump for example).  Normally, I&amp;#8217;ll run the command in the background, followed by this:&lt;/p&gt;
&lt;pre&gt;
while true; do sleep 60; date; done
&lt;/pre&gt;
&lt;p&gt;This has been my timeout prevention to keep commands from dying &amp;#8211; yes it&amp;#8217;s a pretty stinking lame solution.&lt;/p&gt;
&lt;p&gt;Especially lame when the server drops the connection anyways.&lt;/p&gt;
&lt;h2&gt;nohup saves the day&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://img98.imageshack.us/img98/4028/nohupch6.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;If you need to run a &lt;span class="caps"&gt;REALLY&lt;/span&gt; long command remotely that won&amp;#8217;t die with an &lt;span class="caps"&gt;SSH&lt;/span&gt; time out, then &amp;#8220;nohup&amp;#8221; is your friend.&lt;/p&gt;
&lt;p&gt;nohup shields the commands from &amp;#8220;&lt;span class="caps"&gt;HUP&lt;/span&gt;&amp;#8221; signals &amp;#8211; a signal that is sent to all child processes upon disconnecting from a terminal, that normally will stop your process (gracefully).&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;
nohup cat the_entire_internet.sql.bz2 | bunzip2 | mysql the_internet_production &amp;amp;
&lt;/pre&gt;
&lt;p&gt;And then, nohup will probably say something like &lt;code&gt;"nohup: ignoring input and redirecting stderr to stdout"&lt;/code&gt;, but it&amp;#8217;s of little consequence.  You&amp;#8217;re safe to quit your terminal and your process will be safely fostered by &lt;code&gt;/sbin/launchd&lt;/code&gt; after you take it&amp;#8217;s parent away.  Ya big mean lug.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/1891824018073645180/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=1891824018073645180" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1891824018073645180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/1891824018073645180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/CJxQkIwczuM/how-to-daemonize-any-process.html" title="How to Daemonize Any Process" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/08/how-to-daemonize-any-process.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUENR3c5fSp7ImA9WxdUFUg.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-2619112354878451113</id><published>2008-07-31T17:30:00.000-07:00</published><updated>2008-07-31T18:21:36.925-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-31T18:21:36.925-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vim" /><category scheme="http://www.blogger.com/atom/ns#" term="solutions" /><title>crontab: temp file must be edited in place</title><content type="html">&lt;p&gt;This is an error message I ran into after upgrading vim from 7.0 to 7.1, after editing a crontab file:&lt;/p&gt;


&lt;pre&gt;
  crontab: temp file must be edited in place
&lt;/pre&gt;

 &lt;p&gt;What was weird is this error message went away if I deleted my &lt;code&gt;~/.vimrc&lt;/code&gt; file.  If &lt;code&gt;~/.vimrc&lt;/code&gt; was blank, the error message was still there, so it wasn&amp;#8217;t caused by any command in particular.&lt;/p&gt;


 &lt;p&gt;It turned out to have something to do with vim&amp;#8217;s backup strategy.  I am supposing there is a default vimrc file somewhere that gets loaded if &lt;code&gt;~/.vimrc&lt;/code&gt; doesn&amp;#8217;t exist.&lt;/p&gt;


 &lt;p&gt;After some googling, I fixed it by adding the following to my &lt;code&gt;~/.vimrc&lt;/code&gt; file:&lt;/p&gt;


&lt;pre&gt;
  set backupskip=/tmp/*,/private/tmp/*" 
&lt;/pre&gt;

 &lt;p&gt;&lt;span class="caps"&gt;VIM&lt;/span&gt; already defaulted this value to &amp;#8221;/tmp/&lt;strong&gt;&amp;#8221;.  I don&amp;#8217;t know why defining my own .vimrc made vim not recognize /private/tmp/&lt;/strong&gt; as a temp directory any more, but I don&amp;#8217;t care enough to find out right now.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/2619112354878451113/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=2619112354878451113" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2619112354878451113?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2619112354878451113?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/LgdSpVkKzM0/crontab-temp-file-must-be-edited-in.html" title="crontab: temp file must be edited in place" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/07/crontab-temp-file-must-be-edited-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YERXkyeip7ImA9WxdVF0Q.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-3371309579644253699</id><published>2008-07-22T22:25:00.000-07:00</published><updated>2008-07-23T00:45:04.792-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-23T00:45:04.792-07:00</app:edited><title>VIM rocks at Textile</title><content type="html">&lt;p&gt;OK, so I am enamorated with &lt;span class="caps"&gt;VIM&lt;/span&gt;!&lt;/p&gt;


 &lt;p&gt;It so turns out editing Textile in &lt;span class="caps"&gt;VIM&lt;/span&gt; is quite awesome.  Put your cursor over &amp;#8220;h1.&amp;#8221;, press &lt;em&gt;&lt;span class="caps"&gt;CTRL&lt;/span&gt;-a&lt;/em&gt;, and whazam: you get &amp;#8220;h2.&amp;#8221; .  If you use the surround.vim&lt;sup&gt;1&lt;/sup&gt; plugin, and want to bold the last three words: &amp;#8216;v3bs&amp;lowast;&amp;#8217; (start selecting text, back three words, surround with &amp;lowast;).  If you want to turn 3 words into a link: v3es&amp;#8221;f&amp;#8221;a:http://google.com.  Convert a series of lines (single spaced) into a list: &amp;lt;Ctrl-v&amp;gt;}I&amp;lowast;&amp;lt;Space&amp;gt;&amp;lt;Esc&amp;gt;.&lt;/p&gt;


 &lt;p&gt;What is &lt;span class="caps"&gt;VIM&lt;/span&gt; lacking then?  Well, how about Textile highlighting and a command to quickly preview or render your Textile you may say?  Good thing there&amp;#8217;s a &lt;span class="caps"&gt;TOTALLY AWESOME PLUGIN&lt;/span&gt; (shameless plug) for &lt;span class="caps"&gt;VIM&lt;/span&gt; to make that a thing of yesteryear!&lt;/p&gt;


 &lt;h2&gt;And Now, Ladies and Gentlement, I Bring You:&lt;/h2&gt;


 &lt;p&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=2305"&gt;Textile for &lt;span class="caps"&gt;VIM&lt;/span&gt;&lt;/a&gt; &amp;#8211; Fun for the whole family!&lt;/p&gt;


 &lt;h2&gt;Featuring:&lt;/h2&gt;


 &lt;ul&gt;
 &lt;li&gt;&lt;strong&gt;Syntax highlighting&lt;/strong&gt; (Thanks to the work of two very cool dudes, &lt;a href="http://happygiraffe.net/blog/"&gt;Dominic Mitchell&lt;/a&gt; and &lt;a href="http://blog.aaronbieber.com/"&gt;Aaron Bieber&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Preview Textile&lt;/strong&gt; (\tp &amp;#8211; whamo!  See texile rendered in your browser!  No need to save your file first)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Render Textile&lt;/strong&gt; (\tr &amp;#8211; open a new &lt;span class="caps"&gt;VIM&lt;/span&gt; tab with the rendered &lt;span class="caps"&gt;HTML&lt;/span&gt;, so you can paste it into your favorite blogging software that doesn&amp;#8217;t support Textile, like Blogger, for example)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Render Textile to a file!&lt;/strong&gt; (\tf)&lt;/li&gt;
 &lt;/ul&gt;


 &lt;p&gt;&lt;small&gt;1. if you use &lt;span class="caps"&gt;VIM&lt;/span&gt; and don&amp;#8217;t have surround.vim installed, you really should &lt;span class="caps"&gt;DROP EVERYTHING&lt;/span&gt; and go &lt;a href="http://www.vim.org/scripts/script.php?script_id=1697"&gt;install it&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/3371309579644253699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=3371309579644253699" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/3371309579644253699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/3371309579644253699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/Az4rz2f3RrE/vim-rocks-at-textile.html" title="VIM rocks at Textile" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/07/vim-rocks-at-textile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MSXo7eCp7ImA9WxdVF0Q.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-6169511778335270236</id><published>2008-07-22T22:00:00.001-07:00</published><updated>2008-07-23T00:24:48.400-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-23T00:24:48.400-07:00</app:edited><title>The vertical climb to VIM</title><content type="html">&lt;p&gt;A good friend of mine posted an &lt;a href="http://chalain.livejournal.com/74234.html"&gt;article&lt;/a&gt; that finally inspired me to learn another editor (even though I was, and still am, quite happy with TextMate).&lt;/p&gt;


 &lt;p&gt;What resulted was a &lt;a href="http://bemrose.us/images/curves.jpg"&gt;direct vertical climb up the the learning curve of &lt;span class="caps"&gt;VIM&lt;/span&gt;&lt;/a&gt;:&lt;/p&gt;


 &lt;p&gt;&lt;img src="http://unix.rulez.org/~calver/pictures/curves.jpg" alt="" /&gt;&lt;/p&gt;


 &lt;p&gt;And, painful it was!  There were times when I felt obligated to keep using it, even though I longed for the simpicity of TextEdit or TextMate.  Why did I do it?  Well, when I learned how to chain commands together I was addicted!  And then there was finding out that &lt;span class="caps"&gt;VIM&lt;/span&gt; does all the things I&amp;#8217;ve wanted an editor to do for a long time.&lt;/p&gt;


 &lt;p&gt;A few of the features I love:&lt;/p&gt;


 &lt;ul&gt;
 &lt;li&gt;Ability to chain commands together (d3w, di&amp;#8221;, c/Word&lt;CR&gt;, g~e etc)&lt;/li&gt;
  &lt;li&gt;Visual block mode&lt;/li&gt;
  &lt;li&gt;&lt;span class="caps"&gt;VIM&lt;/span&gt; plugins&lt;/li&gt;
  &lt;li&gt;Complete from words in doc&lt;/li&gt;
  &lt;li&gt;Lots of navigation keys to get you precisely where you want to be in less than 3 key strokes&lt;/li&gt;
  &lt;li&gt;&lt;span class="caps"&gt;VIM&lt;/span&gt; follows me everywhere &amp;#8211; Desktop, terminal, linux, unix, windows, &lt;span class="caps"&gt;OS X&lt;/span&gt;)&lt;/li&gt;
  &lt;li&gt;Multiple registers (clipboards)&lt;/li&gt;
  &lt;li&gt;Macros&lt;/li&gt;
  &lt;li&gt;The &amp;#8221;.&amp;#8221; key (repeat last edit)&lt;/li&gt;
  &lt;li&gt;Many more&lt;/li&gt;
 &lt;/ul&gt;


 &lt;p&gt;I now really fancy this old-timer &lt;span class="caps"&gt;VIM&lt;/span&gt;, and as my friend described, I can shovel around text by the shovel-full.  It&amp;#8217;s an amazing feeling!  I still feel all warm inside and excited when I go to edit a bunch of text and get to hop around, move stuff around, make spelling corrections, all without moving my hands off the middle of the keyboard!&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/6169511778335270236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=6169511778335270236" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/6169511778335270236?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/6169511778335270236?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/JgcnoXy2yI0/vertical-climb-to-vim.html" title="The vertical climb to VIM" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/07/vertical-climb-to-vim.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcEQHo4eyp7ImA9WxdXFE0.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-4070005626998817444</id><published>2008-06-23T19:48:00.000-07:00</published><updated>2008-06-25T07:26:41.433-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-25T07:26:41.433-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="nerd" /><title>Can you find the exclusive lock?</title><content type="html">&lt;p&gt;Here's the quiz of the day:  Can you find the exclusive lock in this code?&lt;/p&gt;

&lt;p&gt;&lt;a target="_blank" href="http://pastie.org/220881"&gt;Mysql#query&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(hint: it begins on line 2, and ends on line 36)&lt;/p&gt;

&lt;p&gt;It seemed reasonable that ActiveRecord.allow_currency would make my application be able to run concurrent queries.  Well, that's what I thought :)  Until I had discovered my 6 threads (which properly formed 6 new connections to the database) were still executing queries serially, instead of in parallel!   When investigating what the hold up was, I found my culprit: Ruby 1.8's &lt;a href="http://en.wikipedia.org/wiki/Green_threads"&gt;green threads&lt;/a&gt; lose control when you run native C functions, well at least Mysql#query anyways.&lt;/p&gt;  

&lt;p&gt;So, note to self and world: any time you run a native function that takes a long time, look forward to a big, exclusive lock down.&lt;/p&gt;

&lt;p&gt;All the more reason I'm excited for Ruby 1.9's native threads&lt;/p&gt;

&lt;p&gt;So, web, do you know if there's a way to "poll" ruby's thread scheduler while in a native C function while waiting for some other task to finish?&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/4070005626998817444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=4070005626998817444" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/4070005626998817444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/4070005626998817444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/TtR2zpnm1Dc/ruby-threads-are-close-to-useless.html" title="Can you find the exclusive lock?" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/06/ruby-threads-are-close-to-useless.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8HSX4yeyp7ImA9WxdQFU0.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-2077761519725023687</id><published>2008-06-14T22:14:00.000-07:00</published><updated>2008-06-14T22:30:38.093-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-14T22:30:38.093-07:00</app:edited><title>Quiz of the day:</title><content type="html">&lt;p style='text-align:center'&gt;&lt;img src="http://img184.imageshack.us/img184/4412/demolish02bmzd6.jpg"&gt;&lt;/p&gt;

&lt;p&gt;What does this wrecking ball and a developer who neglects to create and maintain an automated test suite have in common?&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/2077761519725023687/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=2077761519725023687" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2077761519725023687?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/2077761519725023687?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/3cmz3VUDs9U/quiz-of-day.html" title="Quiz of the day:" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/06/quiz-of-day.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QERX04eyp7ImA9WxdQE0w.&quot;"><id>tag:blogger.com,1999:blog-7625526986034013157.post-5434904962625894998</id><published>2008-06-12T16:18:00.000-07:00</published><updated>2008-06-12T17:01:44.333-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-12T17:01:44.333-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Garbage collect every git repository on your machine</title><content type="html">&lt;p&gt;One of the things I really like about &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt; is that it doesn't automatically garbage collect and compact repositories.  It's kind of like how you don't clean your room and take out the garbage (or at least I don't) every time you make a mess or throw something away.  If you accidently throw something away, you can pull it out of the trash before it goes to the dump.  You don't have to be slowed down by a clean up operation when you're focusing on getting things done.&lt;/p&gt;

&lt;p&gt;However, there is a draw back to this.  Git repositories DO start to slow down after a while if you aren't "cleaning your room".  And, they won't be as efficient in disk space utilization.&lt;/p&gt;

&lt;p&gt;Lucky for us, since we are working with computers here, we don't have to clean our rooms by hand.  The following little bash script will crawl your whole hard drive, look for any git repositories, and then garbage collect, prune, and pack them, regaining your disk space and making your repositories operate faster:&lt;/p&gt;

&lt;pre&gt;
#!/bin/sh
find . -type d -name .git | while read dir; do pushd "$dir"; git gc --prune; popd; done
&lt;/pre&gt;

&lt;p&gt;PS: ref logs keep objects from being pruned.  More on ref logs in a future post.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://tim.theenchanter.com/feeds/5434904962625894998/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7625526986034013157&amp;postID=5434904962625894998" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/5434904962625894998?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7625526986034013157/posts/default/5434904962625894998?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TimTheEnchanter/~3/sCctbQGGLmk/garbage-collect-every-git-repository-on.html" title="Garbage collect every git repository on your machine" /><author><name>Tim Harper</name><uri>http://www.blogger.com/profile/03349408198556972919</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_7HPuw-ljjoY/S7eBtBJOBlI/AAAAAAAAAhg/Oo_4-NSOb6k/S220/tim.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://tim.theenchanter.com/2008/06/garbage-collect-every-git-repository-on.html</feedburner:origLink></entry></feed>
