<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Michael Ivey: blogging since '99</title>
 <link href="http://gweezlebur.com/atom.xml" rel="self"/>
 <link href="http://gweezlebur.com/"/>
 <updated>2010-01-31T10:09:55-06:00</updated>
 <id>http://gweezlebur.com/</id>
 <author>
   <name>Michael Ivey</name>
   <email>ivey@gweezlebur.com</email>
 </author>

 
 <entry>
   <title>How I use Foursquare</title>
   <link href="http://gweezlebur.com/2010/01/31/how-i-use-foursquare.html"/>
   <updated>2010-01-31T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2010/01/31/how-i-use-foursquare</id>
   <content type="html">&lt;p&gt;There&amp;#8217;s been a little discussion around my Twitter circle about how or why Foursquare is useful. (I&amp;#8217;m glad &lt;a href='http://twitter.com/jeffhilimire/status/8433187095' title='Almost all that haven'&gt;I&amp;#8217;m not the only one&lt;/a&gt; who sees the irony of using Twitter to ask that question, since the exact same thing was - and still is - asked about Twitter.)&lt;/p&gt;

&lt;p&gt;I think Foursquare is fun, and has a decent chance of being a long-term player in the location game. Of course I thought that about Dodgeball, too. For the benefit of the Foursquare doubters, here&amp;#8217;s my tips on how to use it &amp;#8220;right&amp;#8221;. YMMV.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Be somewhere with other players&lt;/strong&gt;&lt;br /&gt;Foursquare is only fun with other people. If you&amp;#8217;re the only one checking in near you, you&amp;#8217;ll get bored. So unless you&amp;#8217;re a real early adopter, wait until Foursquare has traction in your city. I live in a town that has very little activity, but I travel to Atlanta a lot; Foursquare is much more fun when I&amp;#8217;m there.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Have some friends&lt;/strong&gt;&lt;br /&gt;Not only do you need people near you playing, you need to be friends with some of them. Real friends. Friends you&amp;#8217;d share your cell number with. Friends you would enjoy having drop by your table when you&amp;#8217;re at the same restaurant. Friends you&amp;#8217;d like to fight for control of the neighborhood coffee shop.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;#8217;t have too many friends&lt;/strong&gt;&lt;br /&gt;Don&amp;#8217;t add everyone from Twitter and Facebook. Be selective. I have maybe 20 Foursquare friends, and all but one are people I know in person.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;#8217;t automatically post every check-in to Twitter&lt;/strong&gt;&lt;br /&gt;The whole point of Foursquare having a separate set of friends is that you can limit who you share your location with. If you post every update to Twitter, you&amp;#8217;re not only over-sharing to your followers, but you lose that intimacy.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Post selective updates to Twitter&lt;/strong&gt;&lt;br /&gt;You can always choose to post a check-in to Twitter on an individual basis, like if you&amp;#8217;re at a cool restaurant you&amp;#8217;ve never been to before, or at a conference. The advantage over just tweeting about it is a 4sq link that includes tips from other people, Yelp links, a map, phone numbers&amp;#8230;much more info than just a geocoded location.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Play the game&lt;/strong&gt;&lt;br /&gt;Foursquare&amp;#8217;s game mechanics are fun. Enjoy them. Battle it out for mayoral control of the taco stand. Stake your claim at every doughnut shop within 25 miles. Pick some badges and try to win them.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discover new places, find your friends&lt;/strong&gt;&lt;br /&gt;On the rare occasion that I find myself in a city where I have Foursqaure friends, no plans, and the time and energy for some, I&amp;#8217;ll pull up Foursquare and see if anyone is already out and about. If they are, I may join them, or at least click a button to send a SMS or a tweet and see what&amp;#8217;s going on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That&amp;#8217;s how I use Foursquare. I get a reasonable amount of pleasure from it. It&amp;#8217;s amusing, and sometimes helps me find something to do. The best way to &amp;#8220;get&amp;#8221; Foursquare is to try it for a while.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>My Proposed Solution to the "Can't Comment On RTs" Problem: Retweet-Replies</title>
   <link href="http://gweezlebur.com/2009/12/13/retweet-replies.html"/>
   <updated>2009-12-13T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/12/13/retweet-replies</id>
   <content type="html">&lt;p&gt;I love retweets. More importantly, I love the new, native Retweets. I know there are plenty of people still up in arms about them, or refusing to use them because they don&amp;#8217;t like change, or for a whole bunch of reasons that I thought were silly at the time and didn&amp;#8217;t remember long enough to refute them.&lt;/p&gt;

&lt;p&gt;But that&amp;#8217;s not what I&amp;#8217;m writing about tonight.&lt;/p&gt;

&lt;p&gt;There is one real deficiency with native Retweets. Ev even mentioned it in &lt;a href='http://evhead.com/2009/11/why-retweet-works-way-it-does.html'&gt;his blog post&lt;/a&gt;, which is excellent, and required reading before I&amp;#8217;ll debate why native Retweets are awesome with you.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://evhead.com/2009/11/why-retweet-works-way-it-does.html'&gt;@ev&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The other thing some people will not like is that, unlike organic RTs, there&amp;#8217;s no way to annotate or leave your own comment when you retweet something with the new system&amp;#8230;we have some ideas there, and it&amp;#8217;s possible we&amp;#8217;ll build that in at a later date. (This point should not be missed.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is important, and it&amp;#8217;s a big reason some people don&amp;#8217;t want to use the native Retweets. Even &lt;a href='http://twitter.com/jack/statuses/6151286368'&gt;@jack isn&amp;#8217;t using them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have a solution. It&amp;#8217;s a really simple solution, but unfortunately it requires a little bit of work from Twitter. I&amp;#8217;d rather this were a completely user-behavior or client-side solution, but it is what it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If I retweet @someone, and then reply to the retweet, push my reply to all of my followers, even if they don&amp;#8217;t follow @someone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If Twitter made this simple change (to replies, you&amp;#8217;ll notice, not to retweets), it would mean I could use an entire 140 characters to annotate my retweet, and that annotation doesn&amp;#8217;t need Yet Another special case in Twitter clients, or an API change, or something new for users to learn.&lt;/p&gt;

&lt;p&gt;It would also mean innovative clients could add a &amp;#8220;RT/Reply&amp;#8221; button that would mark a tweet for retweeting, get the reply, and then do the retweet and the reply back to back so they show up next to each other.&lt;/p&gt;

&lt;p&gt;I call this idea &amp;#8220;Retweet-Replies&amp;#8221;, since, you know&amp;#8230;that&amp;#8217;s what they are.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://twitter.com/?status=@ivey+I+think+retweet-replies+are...'&gt;What do you think?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CC: #twitterapi&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Introducing Moralist</title>
   <link href="http://gweezlebur.com/2009/12/12/moralist.html"/>
   <updated>2009-12-12T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/12/12/moralist</id>
   <content type="html">&lt;p&gt;I love Twitter lists. Really. I think they&amp;#8217;re one of the most important features Twitter has rolled out in the past year, even more than geotweets.&lt;/p&gt;

&lt;p&gt;First off, I think they&amp;#8217;ll slowly be the end of Follow Friday. Why plug people one day a week when you can have a list of people you suggest all the time? Even better, you can have multiple lists, organized by topic.&lt;/p&gt;

&lt;p&gt;More importantly, though, lists mean I can have multiple timelines. I have my main timeline of people I follow all the time. When they say something, I want to see it. (I haven&amp;#8217;t completely cleaned up my following list yet, but I dropped more than 100 people when I started using lists.) There are a lot of the people who are funny, but I don&amp;#8217;t need to see every tweet from them. They&amp;#8217;re on my &lt;a href='http://twitter.com/ivey/funny-people'&gt;@ivey/funny-people&lt;/a&gt; list, and I read them when I have time.&lt;/p&gt;

&lt;p&gt;The problem is, not only do I have my list of funny people, but I also follow a few other people&amp;#8217;s lists of funny people, like &lt;a href='http://twitter.com/Favstar/rising-stars'&gt;@Favstar/rising-stars&lt;/a&gt; and &lt;a href='http://twitter.com/Favstar/top-50-funny'&gt;@Favstar/top-50-funny&lt;/a&gt;. There&amp;#8217;s a lot of overlap between these lists, which means I see the same tweets 2 or 3 times. That bugs me.&lt;/p&gt;

&lt;p&gt;So I fixed it. First, I made a little library called, creatively, &lt;a href='http://github.com/ivey/twitter-lists'&gt;twitter-lists&lt;/a&gt;. It uses the twitter gem to do some set-based operations on Twitter lists, mainly Union and Intersection. It&amp;#8217;s not fully fleshed out yet, but it&amp;#8217;s usable. Patches welcome.&lt;/p&gt;

&lt;p&gt;Then, I made an app that uses it: &lt;a href='http://moralist.gweezlebur.com'&gt;Moralist&lt;/a&gt;. Moralist makes it easy to combine lists in interesting ways. I&amp;#8217;m using it to merge &lt;a href='http://twitter.com/Favstar/rising-stars'&gt;@Favstar/rising-stars&lt;/a&gt;, &lt;a href='http://twitter.com/Favstar/top-50-funny'&gt;@Favstar/top-50-funny&lt;/a&gt;, and &lt;a href='http://twitter.com/ivey/funny-people'&gt;@ivey/funny-people&lt;/a&gt; into a single list, &lt;a href='http://twitter.com/ivey/funny-hah'&gt;@ivey/hah&lt;/a&gt;. This is the list I read when I have a few minutes and need a chuckle (although &lt;a href='http://favstar.fm'&gt;Favstar&amp;#8217;s&lt;/a&gt; Favit iPhone app is replacing it, but that&amp;#8217;s another story.)&lt;/p&gt;

&lt;p&gt;Anyway, try it out. It refreshes once a day, it crashes sometimes, and it comes with no warranty. If people find it useful, I might bump it up to a paid Heroku plan, but for now it meets my needs so I&amp;#8217;m leaving it alone.&lt;/p&gt;

&lt;p&gt;PS: here&amp;#8217;s a snippet from Moralist to make a twitter-auth app able to use the twitter gem using the same set of keys: &lt;a href='http://gist.github.com/255214'&gt;http://gist.github.com/255214&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Thanks for the Retweets</title>
   <link href="http://gweezlebur.com/2009/12/11/thanks-for-the-retweets.html"/>
   <updated>2009-12-11T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/12/11/thanks-for-the-retweets</id>
   <content type="html">&lt;p&gt;Lately I&amp;#8217;ve been seeing a handful of tweets per day that say something like, &amp;#8220;Thanks to @soandso, @friend, @someoneelse for the retweets today!&amp;#8221; and &amp;#8230; it doesn&amp;#8217;t feel right, to me.&lt;/p&gt;

&lt;p&gt;I get it. Twitter&amp;#8217;s about social, and connections, and all that jazz. If someone retweets something you said, they&amp;#8217;re lending you a little bit of their credibility. That&amp;#8217;s a nice thing to do, and it&amp;#8217;s worth thanking them for it, especially if it&amp;#8217;s something you&amp;#8217;d really like to get out there.&lt;/p&gt;

&lt;p&gt;If it was a DM, or a reply to that one person, I wouldn&amp;#8217;t notice. (I might not even see it.) Which is why people use the more public list of thank-yous, of course.&lt;/p&gt;

&lt;p&gt;Somehow, though, it seems like it&amp;#8217;s less about a genuine thank-you, and more of the self-promotion feedback loop we see over and over again on Twitter. What do you think? Am I being cynical and reading it wrong?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Why I Won't Be Eating a Dozen Krispy Kremes Today</title>
   <link href="http://gweezlebur.com/2009/08/27/krispy-kreme.html"/>
   <updated>2009-08-27T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2009/08/27/krispy-kreme</id>
   <content type="html">&lt;p&gt;Tuesday night, in a discussion with Don, Jennifer, Shalini and Brad, I made the statement that I did not believe it would be that challenging to eat a dozen hot Krispy Kremes in a single sitting.&lt;/p&gt;

&lt;p&gt;I stand by that assertion.&lt;/p&gt;

&lt;p&gt;However, I will not be making any attempt to prove that I can do this. One dozen Krispy Kreme doughnuts contains 2400 calories and 144g of fat. While I believe it would not be difficult to consume this much, that doesn&amp;#8217;t mean it&amp;#8217;s a good idea. There are many things that I could do, and might even enjoy doing, that I do not do, because they&amp;#8217;re not healthy or in my best interests.&lt;/p&gt;

&lt;p&gt;If, in the future, I feel a desire to eat a dozen Krispy Kremes, I&amp;#8217;ll document the experience.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>BarCamp Mobile (as in, Alabama)</title>
   <link href="http://gweezlebur.com/2009/02/14/barcamp.html"/>
   <updated>2009-02-14T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/02/14/barcamp</id>
   <content type="html">&lt;p&gt;It&amp;#8217;s official: we&amp;#8217;re having a BarCamp in South Alabama. &lt;a href='http://barcampmobile.org'&gt;BarCamp Mobile&lt;/a&gt; will be held March 20-21 at the &lt;a href='http://southalabama.edu'&gt;University of South Alabama&lt;/a&gt;. Main conference is Saturday, with dinner and social gathering for anyone in town Friday night.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please Note:&lt;/strong&gt; This is a &lt;a href='http://barcamp.org'&gt;BarCamp&lt;/a&gt; in Mobile, AL. That&amp;#8217;s &amp;#8220;mo-beel&amp;#8221;. Not &amp;#8220;mo-buhl&amp;#8221;, as in mobile technology. &amp;#8220;Mo-beel&amp;#8221; as in &amp;#8220;Port Of Mobile&amp;#8221; or &amp;#8220;Mobile Bay&amp;#8221;. Think azaleas, sweet tea, and oysters on the half shell. There may or may not be mobile developers talking about mobile development, but it will definitely be in Mobile. Got it?&lt;/p&gt;

&lt;p&gt;Never been to a &lt;a href='http://barcamp.org'&gt;BarCamp&lt;/a&gt; before? Wondering what it is?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;BarCamp is an ad-hoc gathering born from the desire for people to share and learn in an open environment. It is an intense event with discussions, demos and interaction from participants.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It&amp;#8217;s an unconference. There isn&amp;#8217;t a separation between speakers and participants. Every participant is a speaker, every speaker is a participant. We&amp;#8217;ll develop the agenda on the wiki, on Friday night, and on Saturday morning.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re coming, be prepared to present about something you think is cool: BarCamp is as good as the participants make it. This isn&amp;#8217;t a typical conference where you listen to people talk all day. Sessions will be interactive, so plan to ask questions, chime in, and generally share as much information as you have.&lt;/p&gt;

&lt;p&gt;Oh, and it&amp;#8217;s a lot of fun. I met some really cool people at BarCamp Atlanta two years ago, and again at BarCamp Atlanta II last year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Want to come? Go to &lt;a href='http://barcampmobile.org'&gt;BarCamp Mobile&lt;/a&gt;&amp;#8217;s website and fill in the registration form. It&amp;#8217;s free, but we do need to have an accurate headcount for food, t-shirts, sponsors, etc.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Want to help? Come to our &lt;a href='http://www.chatterous.com/bcmob/'&gt;discussion room&lt;/a&gt; and introduce yourself, or join our &lt;a href='http://groups.google.com/group/barcamp-mobile/'&gt;Google group&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Want to keep up to date? &lt;a href='http://twitter.com/barcamp_mobile'&gt;Follow us on Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>Biden was never the President</title>
   <link href="http://gweezlebur.com/2009/01/20/inaugural-nitpick.html"/>
   <updated>2009-01-20T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/01/20/inaugural-nitpick</id>
   <content type="html">&lt;p&gt;In case you&amp;#8217;re one of the people who believe that Joen Biden was President for a few minutes between 12:00 and when Obama took the oath of office: you&amp;#8217;re wrong.&lt;/p&gt;

&lt;p&gt;Obama became President at 12:00, even without being sworn in. He was not allowed to &lt;a href='http://www.usconstitution.net/const.html#Article2'&gt;&amp;#8220;enter on the Execution of his Office&amp;#8221;&lt;/a&gt; until he was sworn in, but he was the President.&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t believe me? Look at CNN, they got it right:&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;&lt;img src='http://twictur.es/i/1133754472.gif' /&gt;&lt;/p&gt;
&lt;p&gt;image provided by &lt;a href='http://twictur.es'&gt;twictur.es&lt;/a&gt; | original tweet &lt;a href='http://twitter.com/cnnbrk/statuses/1133754472'&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div&gt;
&lt;p&gt;&lt;img src='http://twictur.es/i/1133792613.gif' /&gt;&lt;/p&gt;
&lt;p&gt;image provided by &lt;a href='http://twictur.es'&gt;twictur.es&lt;/a&gt; | original tweet &lt;a href='http://twitter.com/cnnbrk/statuses/1133792613'&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Several minutes apart.&lt;/p&gt;

&lt;p&gt;Still don&amp;#8217;t believe me? Google &amp;#8220;David Rice Atchison&amp;#8221; and get back to me.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>My Git Workflow</title>
   <link href="http://gweezlebur.com/2009/01/19/my-git-workflow.html"/>
   <updated>2009-01-19T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/01/19/my-git-workflow</id>
   <content type="html">&lt;p&gt;Lately I&amp;#8217;ve been acting as the unofficial &lt;a href='http://git-scm.com'&gt;Git&lt;/a&gt; consultant for &lt;a href='http://skribit.com'&gt;Skribit&lt;/a&gt;, usually in response to &lt;a href='http://twitter.com/Stammy'&gt;@Stammy&lt;/a&gt; saying something on Twitter along the lines of &amp;#8220;Hey, git just did something totally nonintuitive and now I can&amp;#8217;t figure out what to do next.&amp;#8221; I&amp;#8217;ve been using Git long enough to know the answer, usually, or at least to be able to figure it out, plus I still remember how people used to SVN think, which helps.&lt;/p&gt;
&lt;div style='text-align:center;margin:0 auto;width:440px'&gt;
&lt;p&gt;&lt;img src='http://twictur.es/i/1109499437.gif' /&gt;&lt;/p&gt;
&lt;p&gt;image provided by &lt;a href='http://twictur.es'&gt;twictur.es&lt;/a&gt; | original tweet &lt;a href='http://twitter.com/Stammy/statuses/1109499437'&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I think I&amp;#8217;ve mentioned before how much I love Git. I&amp;#8217;ve been a version control geek for a &lt;strong&gt;really&lt;/strong&gt; long time: I remember getting way too excited about a feature that was like &amp;#8216;git cherry-pick&amp;#8217; in some proprietary VCS we evaluated in 2000 or 2001. I still say that Darcs is the one I wish we had settled on, but I&amp;#8217;ve grown to love Git over the past year or so, especially with &lt;a href='http://github.com'&gt;GitHub&lt;/a&gt; making some of the rough spots so much easier.&lt;/p&gt;

&lt;p&gt;The thing that&amp;#8217;s hard about Git for most people is the same thing that&amp;#8217;s hard about all &lt;a href='http://en.wikipedia.org/wiki/Distributed_revision_control'&gt;DVCS&lt;/a&gt; tools: if you&amp;#8217;re used to centralized systems, they work weird. GitHub doesn&amp;#8217;t actually help with this: it&amp;#8217;s really easy to use Git+GitHub like SVN, and not take full advantage of all the cool stuff you get in a DVCS. It&amp;#8217;s also really easy to never grok DVCS, so when something unusual happens, you don&amp;#8217;t know how to fix it.&lt;/p&gt;

&lt;p&gt;There are lots of really good articles to help you get Git, and I&amp;#8217;m not going to try to duplicate them, nor am I going to make you a comprehensive list. Ask in the comments if you can&amp;#8217;t find what you need, and feel free to share good resources in the comments as well. One I&amp;#8217;ll throw out there now is &lt;a href='http://eagain.net/articles/git-for-computer-scientists/'&gt;Git for Computer Scientists&lt;/a&gt; &amp;#8230; if you want to really know what Git is doing, this is the way to go.&lt;/p&gt;

&lt;p&gt;What I &lt;em&gt;will&lt;/em&gt; do is give you a snapshot of my personal Git workflow(s). I have several, depending on the kind of project.&lt;/p&gt;

&lt;h2 id='small_team_one_or_two_person_project'&gt;Small team: one or two person project&lt;/h2&gt;

&lt;p&gt;A lot of my projects involve either just me, or me and Don, or me and someone else. For these projects I don&amp;#8217;t usually take much advantage of the power of Git. It goes something like this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;Hack some stuff&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git commit -a -m &amp;quot;hacked some stuff&amp;quot;&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I rarely use &lt;a href='http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt'&gt;topic branches&lt;/a&gt; when I&amp;#8217;m in this mode, and I don&amp;#8217;t pay too much attention to keeping a clean commit history. In short, I use it alot like I would use SVN.&lt;/p&gt;

&lt;p&gt;Every now and then I&amp;#8217;ll get distracted by a quick bug fix when I have a bunch of code I don&amp;#8217;t want to commit yet. That&amp;#8217;s where stashing comes in.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git stash&lt;/code&gt; (all my changes are saved away, and I have a clean tree)&lt;/li&gt;

&lt;li&gt;Fix the bug&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git commit -a -m &amp;quot;bugfix&amp;quot;&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git stash pop&lt;/code&gt; (changes are back)&lt;/li&gt;

&lt;li&gt;Continue where I left off&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='larger_team'&gt;Larger team&lt;/h2&gt;

&lt;p&gt;Lately, I&amp;#8217;ve been doing some client work to pay the bills, which means I&amp;#8217;m working with a group of other developers with a lot of tickets being handled all at once. To minimize my pain (and to keep nice and clean commit logs) I use my own version of the &lt;a href='http://reinh.com/blog/2008/08/27/hack-and-and-ship.html'&gt;SSP: Simplified Software Process&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git co master&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;Find a ticket to work on. Let&amp;#8217;s say it&amp;#8217;s &amp;#8220;Add flanges to the WangleController&amp;#8221;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git co -b flanges_in_wangle&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;Write a test, write some code, etc.&lt;/li&gt;

&lt;li&gt;Commit only what I know I want to commit. I use &lt;code&gt;git add -p&lt;/code&gt; to be selective.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git commit --amend&lt;/code&gt; (I write really nice commit messages when there are other people looking at the code, and I use amend to bundle all my changes into one commit)&lt;/li&gt;

&lt;li&gt;Run the tests and make sure they pass&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git co master&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git co flanges_in_wangle&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git rebase master&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;At this point, either it goes well or I have merge conflicts. If I have conflicts, I fix them, and keep going. It&amp;#8217;s better to have conflicts on a topic branch than in master.&lt;/li&gt;

&lt;li&gt;Run the tests again. If there are any code changes, commit, then repeat from checking out master again. The idea is to make sure that when you finally merge flanges_in_wangle into master, it&amp;#8217;s going to be a clean fast-forward merge with no conflicts.&lt;/li&gt;

&lt;li&gt;Once I&amp;#8217;m sure flanges_in_wangle is ready, &lt;code&gt;git co master&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git merge flanges_in_wangle&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='enlightenment'&gt;Enlightenment&lt;/h2&gt;

&lt;p&gt;On my most recent large project that I started from scratch, I use something like the above, with one major exception: there is no &lt;em&gt;&amp;#8216;master&amp;#8217;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Using &lt;em&gt;&amp;#8216;origin&amp;#8217;&lt;/em&gt; as the name of your remote and &lt;em&gt;&amp;#8216;master&amp;#8217;&lt;/em&gt; as the name of your main branch is just the default settings git gives you. Neither name is magic. So, I renamed &lt;em&gt;&amp;#8216;origin&amp;#8217;&lt;/em&gt; to &lt;em&gt;&amp;#8216;github&amp;#8217;&lt;/em&gt; in &lt;code&gt;.git/config&lt;/code&gt; to be explicit about where the code is going. Then, I created a new branch &lt;em&gt;&amp;#8216;development&amp;#8217;&lt;/em&gt; to reflect the code that is under the mainline of development.&lt;/p&gt;

&lt;p&gt;Then I deleted &lt;em&gt;&amp;#8216;master&amp;#8217;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Yeah, you heard me. Who needs it?&lt;/p&gt;

&lt;p&gt;Once I was ready for stuff to go to staging, I made a &lt;em&gt;&amp;#8216;staging&amp;#8217;&lt;/em&gt; branch, and likewise for &lt;em&gt;&amp;#8216;production&amp;#8217;&lt;/em&gt;. Topic branches merge into &lt;em&gt;&amp;#8216;development&amp;#8217;&lt;/em&gt;, which is merged periodically into &lt;em&gt;&amp;#8216;staging&amp;#8217;&lt;/em&gt;, which gets promoted to &lt;em&gt;&amp;#8216;production&amp;#8217;&lt;/em&gt; when it&amp;#8217;s ready for deployment. There&amp;#8217;s never any doubt about what code is on each environment; just look in the git repo.&lt;/p&gt;

&lt;p&gt;The downside to this is that when you first clone the repo, it&amp;#8217;s broken, because git tries to checkout &lt;em&gt;&amp;#8216;master&amp;#8217;&lt;/em&gt; and it doesn&amp;#8217;t exist. Not a big deal, just setup the right branches and all is well.&lt;/p&gt;

&lt;h2 id='and_you'&gt;And you?&lt;/h2&gt;

&lt;p&gt;So what&amp;#8217;s your git workflow? Share it in the comments, or blog about it &lt;a href='http://skribit.com/suggestions/talk-about-your-daily-git-workflow' title='Skribit: Talk about your daily git workflow'&gt;and tell us about it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt;: This blog post was written in direct response to a &lt;a href='http://skribit.com'&gt;Skribit&lt;/a&gt; suggestion. I don&amp;#8217;t promise I&amp;#8217;ll blog about anything people ask me to, but it&amp;#8217;s possible I will. If you&amp;#8217;d like to get that kind of feedback on your blog, check Skribit out. They came out of the first Atlanta Startup Weekend, and are doing some very cool things.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>About a dog</title>
   <link href="http://gweezlebur.com/2009/01/14/nokill.html"/>
   <updated>2009-01-14T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/01/14/nokill</id>
   <content type="html">&lt;p&gt;A little over 12 years ago, a family got a dog. They had a little boy, 2 at the time, and they got him a puppy, and named her Sugar. For 11 years, Sugar was a part of their family, and then she got lost.&lt;/p&gt;
&lt;img src='/images/sugar-dog.jpg' alt='Sugar' style='float:right;padding: 10px 0 10px 10px' /&gt;
&lt;p&gt;That was 15 months ago.&lt;/p&gt;

&lt;p&gt;For 15 months, Sugar has been cared for by volunteers at &lt;a href='http://www.baldwinanimalrescue.com/'&gt;the Baldwin Animal Rescue Center&lt;/a&gt;. BARC doesn&amp;#8217;t have a shelter; they find foster homes for animals from other shelters, and are a resource for others who do rescue work. They rescue, rehabiliate, and re-home hundreds of abused, abandoned and neglected pets each year.&lt;/p&gt;

&lt;p&gt;Sugar was one of those pets who, for whatever reason, couldn&amp;#8217;t be fostered. A handful of those animals have been at a kennel, paid for by volunteer support. As part of the deal, every other weekend volunteers go to clean the kennel and walk the dogs, providing them a little bit of human interaction. I&amp;#8217;ve been a happy volunteer the past few months, including 2 weeks ago when Sugar and I had a really nice couple of laps around the pond.&lt;/p&gt;

&lt;p&gt;A few days ago, a neighbor saw Sugar&amp;#8217;s picture in the paper. It had been published every week for months, but this time someone saw it. They called Sugar&amp;#8217;s family, and she&amp;#8217;s back home.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not trying to argue about whether all shelters should be no-kill, or what to do about the overpopulation and mistreatment of these animals we are responsible for. But for those volunteers who work so hard to care for these animals when no one else will, stories like this bring a really needed bit of hope.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll be at &lt;a href='http://maps.google.com/maps?client=safari&amp;amp;rls=en-us&amp;amp;q=petsmart%20mobile&amp;amp;oe=UTF-8&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;sa=N&amp;amp;tab=wl'&gt;PetSmart in Mobile, AL&lt;/a&gt; Saturday with BARC dogs, helping them find good homes. If you know anyone in South Alabama who would be a good adoptive family, send them over. We&amp;#8217;ll have plenty of dogs and cats who need them.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Importing Mephisto comments into Disqus</title>
   <link href="http://gweezlebur.com/2009/01/05/mephisto-to-disqus.html"/>
   <updated>2009-01-05T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2009/01/05/mephisto-to-disqus</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve switched to &lt;a href='http://github.com/mojombo/jekyll'&gt;Jekyll&lt;/a&gt; for managing my blog. It&amp;#8217;s funny how things come full-circle. Once you get the power of a really good editing environment (this time for me, it&amp;#8217;s Emacs, but it could just as easily have been vim) you stop wanting to write words anywhere else.&lt;/p&gt;

&lt;p&gt;Jekyll doesn&amp;#8217;t do comments, obviously, since it&amp;#8217;s really a static site generator, so I hooked up &lt;a href='http://disqus.com'&gt;Disqus&lt;/a&gt;. There&amp;#8217;s &lt;a href='http://github.com/squeejee/disqus-sinatra-importer'&gt;a little Sinatra app&lt;/a&gt; to import comments into Disqus, but it only works via RSS, and Mephisto doesn&amp;#8217;t export all the comments into the RSS feed, just the 10 most recent.&lt;/p&gt;

&lt;p&gt;So I hacked it to use a local MySQL database of comments instead. It&amp;#8217;s presented here &lt;a href='http://gist.github.com/43440'&gt;and as a gist&lt;/a&gt; for your enjoyment.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='c1'&gt;# Copyright 2009 Michael Ivey, released to public domain&lt;/span&gt;
&lt;span class='c1'&gt;# Disqus guts lifted from http://github.com/squeejee/disqus-sinatra-importer&lt;/span&gt;
&lt;span class='c1'&gt;# I wanted it to run from MySQL and command line, instead of a Sinatra app&lt;/span&gt;

&lt;span class='nb'&gt;require&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;rubygems&amp;#39;&lt;/span&gt;
&lt;span class='nb'&gt;require&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;feed_tools&amp;#39;&lt;/span&gt;
&lt;span class='nb'&gt;require&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;rest_client&amp;#39;&lt;/span&gt;
&lt;span class='nb'&gt;require&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;json&amp;#39;&lt;/span&gt;
&lt;span class='nb'&gt;require&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;sequel&amp;#39;&lt;/span&gt;


&lt;span class='c1'&gt;# Fill these in. See disqus-sinatra-importer for details on what they do&lt;/span&gt;
&lt;span class='c1'&gt;# if they&amp;#39;re not obvious&lt;/span&gt;
&lt;span class='n'&gt;user_api_key&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class='n'&gt;forum_shortname&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class='n'&gt;current_blog_rss&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class='n'&gt;db&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class='n'&gt;db_user&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;&amp;#39;&lt;/span&gt;

&lt;span class='n'&gt;disqus_url&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;http://disqus.com/api&amp;#39;&lt;/span&gt;

&lt;span class='n'&gt;resource&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;RestClient&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='no'&gt;Resource&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;new&lt;/span&gt; &lt;span class='n'&gt;disqus_url&lt;/span&gt;
&lt;span class='n'&gt;forums&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;JSON&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;parse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;resource&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;/get_forum_list?user_api_key=&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;user_api_key&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;get&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='n'&gt;forum_id&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;forums&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;message&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;select&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;forum&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='n'&gt;forum&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;shortname&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]==&lt;/span&gt;&lt;span class='n'&gt;forum_shortname&lt;/span&gt;&lt;span class='p'&gt;}&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;][&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
&lt;span class='n'&gt;forum_api_key&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;JSON&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;parse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;resource&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;/get_forum_api_key?user_api_key=&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;user_api_key&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;amp;forum_id=&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;forum_id&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;get&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;message&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;

&lt;span class='n'&gt;db&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;Sequel&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;mysql&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;db&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:user&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;db_user&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:host&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='n'&gt;query&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;SELECT title, body, author, author_email, created_at FROM contents WHERE type = &amp;#39;Comment&amp;#39;&amp;quot;&lt;/span&gt;

&lt;span class='c1'&gt;# Get all of the articles from the current blog site&lt;/span&gt;
&lt;span class='n'&gt;articles&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;FeedTools&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='no'&gt;Feed&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;open&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;current_blog_rss&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;

&lt;span class='n'&gt;db&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='n'&gt;query&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt; &lt;span class='k'&gt;do&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;
  &lt;span class='n'&gt;comment_article_title&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:title&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
  
  &lt;span class='c1'&gt;# Get the blog article for the current comment thread&lt;/span&gt;
  &lt;span class='n'&gt;article&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;articles&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;items&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;select&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;a&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='n'&gt;a&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;title&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;downcase&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='n'&gt;comment_article_title&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;downcase&lt;/span&gt;&lt;span class='p'&gt;}&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;

  &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='n'&gt;article&lt;/span&gt;
    &lt;span class='n'&gt;article_url&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;article&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;link&lt;/span&gt;  
    
    &lt;span class='n'&gt;thread&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;JSON&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;parse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;resource&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;/get_thread_by_url?forum_api_key=&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;forum_api_key&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;&amp;amp;url=&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;+&lt;/span&gt;&lt;span class='n'&gt;article_url&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;get&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;message&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
    
    &lt;span class='c1'&gt;# If a Disqus thread is not found with the current url, create a new thread and add the url.&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='n'&gt;thread&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;nil?&lt;/span&gt;  
      &lt;span class='n'&gt;thread&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;JSON&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;parse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;resource&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;/thread_by_identifier&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;post&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:forum_api_key&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;forum_api_key&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:identifier&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:title&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:title&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:title&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;message&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;][&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;thread&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
      
      &lt;span class='c1'&gt;# Update the Disqus thread with the current article url&lt;/span&gt;
      &lt;span class='n'&gt;resource&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;/update_thread&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;post&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:forum_api_key&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;forum_api_key&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:thread_id&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;thread&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:url&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;article_url&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; 
    &lt;span class='k'&gt;end&lt;/span&gt;
    
    &lt;span class='c1'&gt;# Import posts here&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='n'&gt;resource&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;/create_post&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;post&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='ss'&gt;:forum_api_key&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;forum_api_key&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:thread_id&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;thread&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:message&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:body&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:author_name&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:author&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:author_email&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:author_email&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='ss'&gt;:created_at&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:created_at&lt;/span&gt;&lt;span class='o'&gt;].&lt;/span&gt;&lt;span class='n'&gt;strftime&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;%Y-%m-%dT%H:%M&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt;
      &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Success: &lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;author&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt; on &lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='n'&gt;comment&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;title&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
  &lt;span class='k'&gt;end&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>Twitpay: An Atlanta Startup Weekend 2 Company</title>
   <link href="http://gweezlebur.com/2008/11/10/twitpay-an-atlanta-startup-weekend-2-company.html"/>
   <updated>2008-11-10T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/11/10/twitpay-an-atlanta-startup-weekend-2-company</id>
   <content type="html">&lt;p&gt;So, what did you do this weekend? Really? That&amp;#8217;s cool. Oh, me? Yeah, I &lt;a href=&quot;http://twitpay.me&quot;&gt;built a company&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From Friday through Sunday I was a part of &lt;a href=&quot;http://atlanta2.startupweekend.com&quot;&gt;Atlanta Startup Weekend 2&lt;/a&gt;. There were 100 or so people, maybe 20 pitches, 10 or 11 teams formed, and 6 projects that survived to Sunday. My team was absolutely awesome. We gelled in a way I&amp;#8217;ve never really seen happen in person, and just Got Stuff Done.&lt;/p&gt;
&lt;p&gt;Our company is &lt;a href=&quot;http://twitpay.me&quot;&gt;Twitpay&lt;/a&gt;: payments in 140 characters or less. We went from an idea (thanks for the help with that @sanjay), a Twitter account (thanks to @cyu) and a domain (thanks to @amdev) to something that is useful, fun, and actually works.&lt;/p&gt;
&lt;p&gt;Friday night we talked about the idea, and brainstormed a little bit. Saturday we built the app. We had a functioning (fake money) beta by Saturday night when we went home around 9pm. Sunday we worked on the UI, marketing, our pitch, and getting payments via PayPal working.  We officially launched Sunday around 6, right before it was time to present.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m sitting in a Panera in Montgomery right now on the way home to Alabama. I just deployed some bugfixes and a &lt;span class=&quot;caps&quot;&gt;FAQ&lt;/span&gt; update. Sometime today we should have all the PayPal stuff hooked up so you can fund your Twitpay accounts. I still can&amp;#8217;t believe how much we got done.&lt;/p&gt;
&lt;p&gt;I really hope you like it, and I really hope you find a Startup Weekend near you and participate.  Making things is fun.&lt;/p&gt;
&lt;p&gt;Huge thanks to &lt;a href=&quot;http://twitpay.me/s/about&quot;&gt;the Twitpay team&lt;/a&gt; for a great weekend, and here&amp;#8217;s to an exciting future!&lt;/p&gt;
&lt;p&gt;PS: &lt;a href=&quot;http://twitter.com/home?status=@ivey+twitpay+$1.00+because+twitpay+is+awesome&quot;&gt;it&amp;#8217;s this easy to send people money&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Find the Princess in Your Editor</title>
   <link href="http://gweezlebur.com/2008/10/27/find-the-princess-in-your-editor.html"/>
   <updated>2008-10-27T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/10/27/find-the-princess-in-your-editor</id>
   <content type="html">&lt;p&gt;As one of those people who have recently switched from TextMate to an older editor (Emacs, in my case, even though I used to be a vim bigot) I&amp;#8217;ve been following the blog discussions about it with some interest.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t have a lot to add, other than this: read &lt;a href=&quot;http://technomancy.us/115&quot;&gt;phil&amp;#8217;s post&lt;/a&gt; and then read &lt;a href=&quot;http://lostgarden.com/2008/10/princess-rescuing-application-slides.html&quot;&gt;these slides about what UI designers can learn from game designers&lt;/a&gt; and see if anything clicks.&lt;/p&gt;
&lt;p&gt;Oh, and read &lt;a href=&quot;http://www.al3x.net/2008/10/on-flight-to-old-text-editors.html&quot;&gt;al3x&amp;#8217;s thoughts&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;And then see if you start thinking of an editor that looks like TextMate, starts out like TextMate, and then over time gets bent and prodded and poked until it becomes more like Emacs or vim, or both, or something new altogether.  An editor that adds tools to your toolbelt as you progress through challenges and learn new skills.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Me Meme</title>
   <link href="http://gweezlebur.com/2008/10/06/the-me-meme.html"/>
   <updated>2008-10-06T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/10/06/the-me-meme</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://gweezlebur.com/assets/2008/10/6/Photo_31.jpg&quot; width=&quot;320&quot; height=&quot;240&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Take a picture of yourself right now.&lt;/li&gt;
	&lt;li&gt;Don’t change your clothes, don’t fix your hair…just take a picture. (should be super-easy with Photobooth)&lt;/li&gt;
	&lt;li&gt;Post that picture with NO editing.&lt;/li&gt;
	&lt;li&gt;Post these instructions with your picture.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Via &lt;a href=&quot;http://www.postal-code.com/binarycode/2008/10/03/the-me-meme/&quot;&gt;Chris Cummer&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Quest for the Perfect Shave</title>
   <link href="http://gweezlebur.com/2008/10/05/the-quest-for-the-perfect-shave.html"/>
   <updated>2008-10-05T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/10/05/the-quest-for-the-perfect-shave</id>
   <content type="html">&lt;p&gt;At some point when Emily was pregnant, I became convinced that the&lt;br /&gt;
baby would be a girl. I admit that this is an irrational thing&lt;br /&gt;
to believe without any evidence, especially since I figured it out in&lt;br /&gt;
a dream.  However, the Chinese calendar method confirmed my belief, so I think it&lt;br /&gt;
was fine.&lt;/p&gt;
&lt;p&gt;Anyway, once I &amp;#8220;knew&amp;#8221; I was going to have a little girl, I had some&lt;br /&gt;
changes to make.  Up to that point, I&amp;#8217;d been shaving in the shower, if&lt;br /&gt;
I shaved at all.  I didn&amp;#8217;t really like shaving, and I hated spending&lt;br /&gt;
ridiculous amounts of money on blade cartidges, so I&amp;#8217;d keep using one&lt;br /&gt;
well past any reasonable amount of sharpness.  Shaving in the shower&lt;br /&gt;
was the only way I could get through it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;How was my little girl going to watch Daddy shave, if Daddy always shaved hidden away in the shower?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And so began my quest.  It&amp;#8217;s a quest some men spend their entire lives&lt;br /&gt;
on, and other men abandon as a waste of time.  For me, it&amp;#8217;s been fun,&lt;br /&gt;
and saved money, and made Ellie not scream when she kisses me.&lt;/p&gt;
&lt;p&gt;So, if you&amp;#8217;re interested in starting the quest, your journey begins here:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=xjhIy9rgWQU&quot;&gt;Wet-shaving Part 1&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=y4ezJNJfygw&quot;&gt;Wet-shaving Part 2&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=wPLfCyGMm9o&quot;&gt;Wet-shaving Part 3&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=ufG1dPmVo8Q&quot;&gt;Using a Safety Razor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I sat at the kitchen table and watched these, and a bunch of the guy&amp;#8217;s&lt;br /&gt;
other videos. In fact, I just watched them all again in the background&lt;br /&gt;
while I wrote this post.&lt;/p&gt;
&lt;p&gt;I decided that I was going to make the investment in a good safety&lt;br /&gt;
razor, because it would allow me to have ridiculously cheap blades.&lt;br /&gt;
(As an example, &lt;a href=&quot;http://www.amazon.com/Gillette-Sensor-Excel-Refills-Cartridges/dp/B000HY9EHY/ref=sr_1_4?ie=UTF8&amp;amp;s=hpc&amp;amp;qid=1223237417&amp;amp;sr=1-4&quot;&gt;30 Gillette Sensor Excel cartridges&lt;/a&gt;&lt;br /&gt;
on Amazon go for $38.99, while &lt;a href=&quot;http://www.amazon.com/Feather-Hi-Stainless-Platimum-Double-Blades/dp/B001G5HZCY/ref=pd_sbs_bt_1&quot;&gt;30 Feather Hi-Stainless&lt;br /&gt;
blades&lt;/a&gt;&lt;br /&gt;
go for $17.25. Feathers are some of the most expensive blades&lt;br /&gt;
available, and are still 40% of the cost of cartridges.)&lt;/p&gt;
&lt;p style=&quot;float:right;&quot;&gt;&lt;img src=&quot;http://gweezlebur.com/assets/2008/10/5/11C.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After some research, I settled on the &lt;a href=&quot;http://www.classicshaving.com/catalog/item/522941/284057.htm&quot;&gt;Merkur &amp;#8216;Hefty&lt;br /&gt;
Classic&amp;#8217;&lt;/a&gt;&lt;br /&gt;
available for about $40.  You&amp;#8217;ll never have to replace it.  You can&lt;br /&gt;
also find great razors on eBay, or in the old guy down the street&amp;#8217;s&lt;br /&gt;
bathroom.  Ask him, he may have a spare.&lt;/p&gt;
&lt;p&gt;Next, I needed a brush.  I was serious about this, so I spent a little&lt;br /&gt;
more than I needed to and got a nice badger hair brush.  You can&lt;br /&gt;
certainly get by with the brush you&amp;#8217;ll find at Walmart, but you may&lt;br /&gt;
want to splurge a little.  I think I got my brush from &lt;a href=&quot;http://classicshaving.com&quot;&gt;Classic&lt;br /&gt;
Shaving&lt;/a&gt; at the same time as I bought my&lt;br /&gt;
razor, but I&amp;#8217;m not positive.&lt;/p&gt;
&lt;p&gt;I bought a latte mug at some discount store.  It&amp;#8217;s wide, so I can get&lt;br /&gt;
a rich lather, and it&amp;#8217;s heavy, so it retains heat.  For my birthday my&lt;br /&gt;
Mom got me a nicer mug with a pewter base, which is really nice, but&lt;br /&gt;
sometimes I still use my $1 mug.  Don&amp;#8217;t go nuts on this part.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s see, razor, brush, mug &amp;#8230; oh, I need soap.  Traditional&lt;br /&gt;
wet-shaving enthusiasts don&amp;#8217;t usually use shaving cream or gel from a&lt;br /&gt;
spray can, but instead use shave soap and make the lather in the mug.&lt;br /&gt;
I won&amp;#8217;t go into too much detail on how I picked what I use, which is&lt;br /&gt;
Taylor of Old Bond Street, Lemon and Lime flavor.  Flavor?  Scent?&lt;br /&gt;
Whatever.  I spent a remarkable amount of time picking the shave soap&lt;br /&gt;
I wanted, but I&amp;#8217;ve been very happy with it.&lt;/p&gt;
&lt;p&gt;Finally we come to sharp things.  There are a lot of blades out&lt;br /&gt;
there.  Some are good, some are bad, and only a handful are right for&lt;br /&gt;
you.  I personally love the Feather Hi-Stainless blades made in Japan&lt;br /&gt;
by a company that used to make ninja swords, or so I hear.  You may&lt;br /&gt;
find them too sharp.  You may love the Personnas from Israel, and&lt;br /&gt;
they&amp;#8217;ll scratch me up and leave me red and irritated.  For that&lt;br /&gt;
reason, I recommend you get a sampler pack.  I got &lt;a href=&quot;http://www.razorandbrush.com/Sampler.html&quot;&gt;one of&lt;br /&gt;
these&lt;/a&gt; but I don&amp;#8217;t remember&lt;br /&gt;
what size I got.  I know it had Feathers, Dorcos, Treet Blues, so it&lt;br /&gt;
was probably the #3.  Maybe he changes them out.  I don&amp;#8217;t know, I love&lt;br /&gt;
the Feathers.  I started at the bottom, hated most of them, found a&lt;br /&gt;
few I could live with, and then got an amazing shave with the&lt;br /&gt;
Feathers.  The Dorco from Korea works well for me, too.  The point is,&lt;br /&gt;
you have to try, you have to be patient, and you have to be willing to&lt;br /&gt;
bleed some, and be red and irritated some.  This takes work, but it is&lt;br /&gt;
highly rewarding.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/ivey/2915585597/&quot; title=&quot;Dorco blade by ivey, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3125/2915585597_000681c6e8_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;Dorco blade&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>October is Tend Your Graph Month</title>
   <link href="http://gweezlebur.com/2008/10/01/october-is-tend-your-graph-month.html"/>
   <updated>2008-10-01T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/10/01/october-is-tend-your-graph-month</id>
   <content type="html">&lt;p&gt;Since I&amp;#8217;ve been working on &lt;a href=&quot;http://divvs.com&quot;&gt;Divvs&lt;/a&gt; for a while now, I&amp;#8217;ve been thinking a lot about my social graph, because who I&amp;#8217;m connected to now has a real way to reflect on who I am.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve added a &lt;strong&gt;lot&lt;/strong&gt; of people to my graph, especially on Facebook.  How many High School and College friends that you haven&amp;#8217;t spoken with, or&lt;br /&gt;
even thought about, in years do you have as friends on Facebook?  How many strangers that you don&amp;#8217;t really care about do you follow on Twitter?&lt;/p&gt;
&lt;p&gt;So, I&amp;#8217;ve decided that October will be &lt;strong&gt;Tend Your Graph Month&lt;/strong&gt;, at least for me.  If you&amp;#8217;d like to join me, mention this post on your blog or on Twitter, or just write about it yourself.&lt;/p&gt;
&lt;p&gt;How does it work?  Spend time in October tending to you graph.  Make sure you want to be friends with the people you&amp;#8217;re friends with. Aggressively purge Twitter of people you don&amp;#8217;t care about.  Move people to LinkedIn if they&amp;#8217;re purely business contacts who don&amp;#8217;t need to know, or who you don&amp;#8217;t want to know, what you&amp;#8217;re doing this weekend.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m going to do the following steps.  You don&amp;#8217;t have to follow them, you can do your own thing.  It&amp;#8217;s cool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Pick your networks&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I haven&amp;#8217;t had much of a problem with over-proliferation of networks. I&amp;#8217;m on Facebook, Twitter, LinkedIn, and that&amp;#8217;s about it.  I&amp;#8217;ve got accounts all over the place, but those are all I check or care about.&lt;/p&gt;
&lt;p&gt;If you have more than that, maybe this is a good time to reduce and simplify.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve decided to stick with those 3, and add Dopplr, for reasons I&amp;#8217;ll explain shortly.  I&amp;#8217;m going to use these networks how they were intended to be used.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://facebook.com&quot;&gt;Facebook&lt;/a&gt; is for friends.  Real friends. People I know, in person, or who I know &lt;strong&gt;really&lt;/strong&gt; well online.  People I want to keep up with on a regular basis.  People I want to keep up with me, and to know what I&amp;#8217;m doing this weekend.  Facebook is also for &lt;a href=&quot;http://suusi.org&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SUUSI&lt;/span&gt;&lt;/a&gt; friends, since that&amp;#8217;s where they all are.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://linkedin.com&quot;&gt;LinkedIn&lt;/a&gt; is for business contacts.  If I have worked with you, done business with you, met you on a plane and talked business, met you at a conference, met you through a shared business connection, etc.  If I&amp;#8217;ve never done any of those things, you don&amp;#8217;t belong in my LinkedIn graph.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt; is for people who I want to engage in conversations with in real time, or who do and say things that make me think, show me new ideas, or make me laugh.&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://dopplr.com&quot;&gt;Dopplr&lt;/a&gt; is for people who either travel frequently to either Alabama/NW Florida or to Atlanta that I might want to see when they&amp;#8217;re here, or for people who live places to which I am likely to travel and that I&amp;#8217;d want to see when I&amp;#8217;m there.  This is a very special-purpose site, but it&amp;#8217;s going to be really useful for step 3.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Go through each network, and make sure people are where they belong&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Got business contacts on Facebook?  Invite them to LinkedIn, and drop &amp;#8216;em.  No hard feelings, it doesn&amp;#8217;t mean I don&amp;#8217;t like you, it just means you were in the wrong place.  College buddies on LinkedIn? Facebook or nothing (see step 3).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: For people who don&amp;#8217;t fit anywhere, either change that or drop them&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have a bunch of High School friends on Facebook that I haven&amp;#8217;t talked to since I dropped out of High School, and that I am almost certainly never going to talk to again.  I am wasting my energy and theirs by being friends with them on Facebook.&lt;/p&gt;
&lt;p&gt;I have a &lt;strong&gt;few&lt;/strong&gt; High School and college friends (and 1 elementary school friend!) on Facebook that I wish I talked to more often.  So, October is a great time to fix that.  If they&amp;#8217;re in Atlanta or other places I travel, I&amp;#8217;ll be inviting them to Dopplr.  I&amp;#8217;ll be sending &amp;#8220;Hey, so what&amp;#8217;s been going on the past 10 years?&amp;#8221; messages to them, hopefully 1 a day for the whole month of October.&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s it.  That&amp;#8217;s my plan.  Feel free to follow it yourself, or make your own set of criteria.  Or just spend a little time in October thinking about the people you&amp;#8217;re connected to.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>APIs, and guessing what users want</title>
   <link href="http://gweezlebur.com/2008/08/07/apis-and-guessing-what-users-want.html"/>
   <updated>2008-08-07T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/08/07/apis-and-guessing-what-users-want</id>
   <content type="html">&lt;p&gt;I added &lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt; support to &lt;a href=&quot;http://divvs.com&quot;&gt;Divvs&lt;/a&gt; yesterday.  I had started it a while back, and then other things became more important, but since we&amp;#8217;re getting Real Close to calling it &amp;#8220;alpha&amp;#8221; I figured I&amp;#8217;d wrap it up.&lt;/p&gt;
&lt;p&gt;I ran into an interesting snag with the Twitter &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;: it&amp;#8217;s too clever.&lt;/p&gt;
&lt;p&gt;I think Twitter assumes that most people using the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; are writing clients of either a web or desktop variety.  They also have a very strong need to limit how much data gets returned.  So most of their &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; calls have paging, where you only get 100 records back, and have to pass in a page param to get the next set.&lt;/p&gt;
&lt;p&gt;In our case, all I want is a list of the user&amp;#8217;s friends and followers.  I don&amp;#8217;t need their status updates, details, pictures, or anything else.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to do something like this:&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/4325.js&quot;&gt;&lt;/script&gt;&lt;p&gt;The problem is, I only get the first 100 in each call.  I have to page through.  Here&amp;#8217;s what I ended up with:&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/4320.js&quot;&gt;&lt;/script&gt;&lt;p&gt;This means that even for the best case, I&amp;#8217;m doing 2 calls when 1 would suffice.  Worst case, I&amp;#8217;m doing 7, 10, 15 calls.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not actually complaining about the Twitter &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;.  They&amp;#8217;ve optimized for their normal cases, and when I ask them about this I bet they&amp;#8217;ll add something to turn my 15 calls into 1.  (Even if they don&amp;#8217;t, it&amp;#8217;s not a big deal, since it works.)&lt;/p&gt;
&lt;p&gt;It just reminds me that all too often, we assume we know what our users need.  We don&amp;#8217;t, though.  They find new needs, and work around us when we get in the way.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Update</title>
   <link href="http://gweezlebur.com/2008/08/01/update.html"/>
   <updated>2008-08-01T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/08/01/update</id>
   <content type="html">&lt;p&gt;Sorry I fell off the planet there.&lt;/p&gt;
&lt;p&gt;Summer is a really crazy time for me, mostly because the last week in July is &lt;a href=&quot;http://suusi.org&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SUUSI&lt;/span&gt;&lt;/a&gt; which means last-minute &lt;span class=&quot;caps&quot;&gt;SOLIS&lt;/span&gt; fixes.  This year was my 20th &lt;span class=&quot;caps&quot;&gt;SUUSI&lt;/span&gt;, every year since 1989 (except for 1992, when I met Emily at &lt;span class=&quot;caps&quot;&gt;GHP&lt;/span&gt;).  For the past 2 years, I&amp;#8217;ve been building a Very Large Rails app called &lt;span class=&quot;caps&quot;&gt;SOLIS&lt;/span&gt; to handle all of the registration, workshops, scheduling, credit card processing &amp;#8230; it&amp;#8217;s the brain behind a lot of &lt;span class=&quot;caps&quot;&gt;SUUSI&lt;/span&gt;.  I still surprise myself with how useful it is sometimes.&lt;/p&gt;
&lt;p&gt;Case in point: Friday night at the play, a woman came in with a lost kid.  He didn&amp;#8217;t know his room #, Dad&amp;#8217;s cell #, anything.  So I pulled &lt;span class=&quot;caps&quot;&gt;SOLIS&lt;/span&gt; up on the iPhone, looked him up, had his Dad&amp;#8217;s cell # and his Grandmother&amp;#8217;s home # ready to go.  2 years ago, we would have had to try and find someone with access to the computer system, or paper printouts.  I wrote the thing, and I still got excited using it.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s Thursday night now, nearly a week since we got home, and I&amp;#8217;m still not 100%.  I can&amp;#8217;t really explain what &lt;span class=&quot;caps&quot;&gt;SUUSI&lt;/span&gt; is like, or why all of us who go need a week or two to decompress when we get home.  It&amp;#8217;s the longest week of my year, though.&lt;/p&gt;
&lt;p&gt;In other news&amp;#8230;I kinda mentioned, but didn&amp;#8217;t really blog about the fact that Don and I started a new company.  &lt;a href=&quot;http://divvs.com&quot;&gt;Divvs&lt;/a&gt; gives you a way to take the value of your social network connections and represent it with a numerical rating.  We&amp;#8217;re still working on our rating algorithm, but we&amp;#8217;ve come a long way in a few months.&lt;/p&gt;
&lt;p&gt;Chapter 2 of &lt;a href=&quot;http://www.manning.com/affiliate/idevaffiliate.php?id=875_124&quot;&gt;the book&lt;/a&gt; is available in Early Access.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be at the Ruby Hoedown next week.  Oh, and I&amp;#8217;ll be in Atlanta on the 4th, if anyone wants to get together for dinner at Manuel&amp;#8217;s.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Need a Rails/Merb development team?</title>
   <link href="http://gweezlebur.com/2008/08/01/need-a-rails-merb-development-team.html"/>
   <updated>2008-08-01T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/08/01/need-a-rails-merb-development-team</id>
   <content type="html">&lt;p&gt;I haven&amp;#8217;t been actively looking for clients with Ivey &amp;amp; Brown for a while.  Between existing work and Divvs, we&amp;#8217;ve kept pretty busy.  For the next month or so, though, Don and I have some time to take on a new client or two.  If you know anyone who needs a pair of really good developers (we can scale to a team of 4 or 5 if needed) for a Ruby, Rails or Merb project, let me know.  We offer a pretty good referral fee, too.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Impediments</title>
   <link href="http://gweezlebur.com/2008/06/20/impediments.html"/>
   <updated>2008-06-20T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/06/20/impediments</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m supposed to be working on &lt;a href=&quot;http://www.manning.com/affiliate/idevaffiliate.php?id=875_124&quot;&gt;the book&lt;/a&gt; right now.  Finishing chapter 2, to be precise.  That&amp;#8217;s what I&amp;#8217;ve been doing all day.&lt;/p&gt;
&lt;p&gt;Guess how many words I&amp;#8217;ve written.  Go on, guess.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s right, none!  Nary a word.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve helped Emily get Ellie in, and out, and in again, and right back out of her new sling.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve cleaned up birdseed, after William Henry got into it.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been to Wal-Mart, the grocery store, the library and the Post Office.  (Note to the two clients who &lt;strong&gt;didn&amp;#8217;t&lt;/strong&gt; send me checks yet: uhm&amp;#8230;please do that.)&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve got the new Weezer album on, I&amp;#8217;ve had a Dr. Pepper, and I&amp;#8217;m going to crank some words out, dammit.  Good ones, too.  These are about to be some really stellar words. Just you watch.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Tests make you write better code</title>
   <link href="http://gweezlebur.com/2008/06/13/tests-make-you-write-better-code.html"/>
   <updated>2008-06-13T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/06/13/tests-make-you-write-better-code</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://michaelfeathers.typepad.com/michael_feathers_blog/2008/06/the-flawed-theo.html&quot;&gt;Michael Feathers has an article about Unit Testing&lt;/a&gt; that&amp;#8217;s going around.  The gist is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;All of these techniques have been shown to increase quality.  And, if we look closely we can see why: all of them force us to reflect on our code.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;#8217;m feeling that very directly right now.  A client project I&amp;#8217;m working on doesn&amp;#8217;t have any tests, other than the skeletons Rails creates, which don&amp;#8217;t run cleanly anymore.  So we&amp;#8217;re running without tests, which I haven&amp;#8217;t done in a long time on any kind of serious project.&lt;/p&gt;
&lt;p&gt;What I&amp;#8217;ve discovered is that I make a lot more stupid mistakes that &lt;strong&gt;I never would have made&lt;/strong&gt; with a decent test suite.  It&amp;#8217;s not that the tests would &lt;strong&gt;catch&lt;/strong&gt; the mistakes.  I never would have made them to begin with.  From really questionable naming choices to silly little thinkos, I keep going back to revisit things and I say to myself, &amp;#8220;Wow, what were you thinking?&amp;#8221;&lt;/p&gt;
&lt;p&gt;I wasn&amp;#8217;t.  Not as much as usual, since I didn&amp;#8217;t stop and think about the test first.&lt;/p&gt;
&lt;p&gt;What do you do when you come on a large project with no test suite, and no budget for retroactively creating one?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Internet Speed</title>
   <link href="http://gweezlebur.com/2008/06/13/internet-speed.html"/>
   <updated>2008-06-13T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/06/13/internet-speed</id>
   <content type="html">&lt;p&gt;Around 2 PM, &lt;a href=&quot;http://twitter.com/SpaceyG/statuses/834114290&quot;&gt;I heard via Twitter&lt;/a&gt; that there was a rumor that Tim Russert was dead. Since I&amp;#8217;ve been a mostly-regular &lt;span class=&quot;caps&quot;&gt;MTP&lt;/span&gt; viewer for years, I started following the information really closely for a little bit.&lt;/p&gt;
&lt;p&gt;I checked &lt;a href=&quot;http://news.google.com/news?q=tim+russert&quot;&gt;Google News&lt;/a&gt; but there was nothing.  Same with &lt;a href=&quot;http://blogsearch.google.com/blogsearch?q=tim+russert&quot;&gt;Blog Search&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Tim_Russert&quot;&gt;Wikipedia&lt;/a&gt; and a few other places.&lt;/p&gt;
&lt;p&gt;When I checked again five minutes later, there was a &lt;a href=&quot;http://www.oliverwillis.com/index.php/2008/06/13/tim-russert/&quot;&gt;single post&lt;/a&gt; on Google Blog Search, asking if anyone else had heard the rumor.  Google News still had nothing.  It was strange to be pretty sure some news had happened, and yet not see it on the political blogs.&lt;/p&gt;
&lt;p&gt;Five minutes later, the NY Post had &lt;a href=&quot;http://nypost.com/seven/06132008/news/nationalnews/tim_russert_dies_from_apparent_heart_att_115384.htm&quot;&gt;broken the story&lt;/a&gt;, it was on Drudge, and Blog Search had posts from people blogging they had heard it on the radio.  &lt;span class=&quot;caps&quot;&gt;NBC&lt;/span&gt; didn&amp;#8217;t cut in to the golf game with Brokaw&amp;#8217;s report for at least 10 more minutes.  &lt;span class=&quot;caps&quot;&gt;CNN&lt;/span&gt; waited on them, but the blogosphere was already aflame.  The internet moves fast.&lt;/p&gt;
&lt;p&gt;It will be weird not hearing Russert&amp;#8217;s take on this coming general election and Sunday afternoons (I TiVo &lt;span class=&quot;caps&quot;&gt;MTP&lt;/span&gt;) will be very different.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Engine Yard</title>
   <link href="http://gweezlebur.com/2008/04/20/engine-yard.html"/>
   <updated>2008-04-20T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2008/04/20/engine-yard</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://twitter.com/ivey/statuses/792179131&quot;&gt;As I mentioned on Twitter&lt;/a&gt;, Friday was my last day at&lt;br /&gt;
&lt;a href=&quot;http://engineyard.com&quot;&gt;Engine Yard&lt;/a&gt;.  Since several people have asked, I wanted to say a little bit about why I decided to leave and about what&amp;#8217;s next.&lt;/p&gt;
&lt;p&gt;First off, I can&amp;#8217;t say enough times how much EY rocks.  They&amp;#8217;re an awesome company to work with (I&amp;#8217;ve been a customer) and an awesome company to work for.  I had a great time working with some very talented people.&lt;/p&gt;
&lt;p&gt;What it really came down to was time.  I used to laugh when political figures would resign to &amp;#8220;spend more time with their family,&amp;#8221; but that&amp;#8217;s basically what happened for me.  I realized that the most valuable thing I have in my business life is the flexibility to wrap it around my family life, not just after dinner or over lunch, but all day.  As a fulltime employee, I couldn&amp;#8217;t take off the afternoon because Ellie was feeling cranky and needed extra attention, or because she was being silly and I wanted to spend a few hours being charmed.  It wouldn&amp;#8217;t be fair to my co-workers, or the customers.  Being self-employed gives me control over my time and how I assign it to projects, and I &lt;strong&gt;really&lt;/strong&gt; missed having that control.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s next?  I&amp;#8217;m back to consulting with &lt;a href=&quot;http://iveyandbrown.com&quot;&gt;Ivey &amp;amp; Brown&lt;/a&gt; (that website is sorely in need of a makeover).  If you need some contract Merb or Rails development or Scrum training, give us a call.  I&amp;#8217;m working on some internal projects in May (see website above) and will have serious time for client work June 1.&lt;/p&gt;
&lt;p&gt;A couple of people asked me, &amp;#8220;Aren&amp;#8217;t you scared, not knowing where your paycheck will come from?&amp;#8221; and the answer is, &amp;#8220;Yes!&amp;#8221;  Sometimes being self-employed is a real nail-biter.  It takes a fair amount of &lt;del&gt;ego&lt;/del&gt; self-confidence and a willingness to take risks.  For me, the risks are worth it, but it&amp;#8217;s definitely not for everyone.&lt;/p&gt;
&lt;p&gt;Yes, I&amp;#8217;m still involved with &lt;a href=&quot;http://merbivore.com&quot;&gt;Merb&lt;/a&gt; and hope to actually be &lt;strong&gt;more&lt;/strong&gt; involved in the coming weeks.  I&amp;#8217;ll have more time to focus on getting 1.0 ready, and on the Merb book I&amp;#8217;m co-authoring for Manning.  I think my editor will be happy about that aspect of my flexibility, for sure!&lt;/p&gt;
&lt;p&gt;Thanks to everyone at Engine Yard for being awesome.  It was a blast, and I can&amp;#8217;t wait to have some new apps for you to manage.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Quickie: sake tasks for Merb hackers</title>
   <link href="http://gweezlebur.com/2008/03/01/quickie-sake-tasks-for-merb-hackers.html"/>
   <updated>2008-03-01T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/03/01/quickie-sake-tasks-for-merb-hackers</id>
   <content type="html">&lt;p&gt;If you hack around on Merb itself, take a look at these &lt;a href=&quot;http://errtheblog.com/posts/60-sake-bomb&quot;&gt;sake&lt;/a&gt; tasks&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ sake -T http://merbivore.com/merb-dev.sake
sake merb:clone          # Clone a copy of all 3 of the Merb repositories
sake merb:update         # Update your local Merb repositories.  Run from
 inside the top-level merb directory.
sake merb:gems:wipe      # Uninstall all RubyGems related to Merb
sake merb:gems:refresh   # Pull fresh copies of Merb and refresh all the
 gems
sake merb:install:core   # Install merb-core
sake merb:install:more   # Install merb-more
sake merb:install        # Install merb-core and merb-more
sake merb:sake:refresh   # Remove and reinstall Merb sake recipes
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The code is served piping hot direct from &lt;a href=&quot;http://github.com/ivey/merb-dev/&quot;&gt;GitHub&lt;/a&gt; so it&amp;#8217;s always current.  If you&amp;#8217;d like to contribute, let me know and I&amp;#8217;ll add you.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Thinking about getting TiVo?  Use me as a referral.</title>
   <link href="http://gweezlebur.com/2008/02/28/thinking-about-getting-tivo-use-me-as-a-referral.html"/>
   <updated>2008-02-28T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/28/thinking-about-getting-tivo-use-me-as-a-referral</id>
   <content type="html">&lt;p&gt;TiVo has a rewards program, which they&amp;#8217;re phasing out.  The last day to earn any referral points is April 30.  So, if you&amp;#8217;re thinking about getting TiVo sometime soon, please get it before April 30, and please use my email address for the referral.&lt;/p&gt;
&lt;p&gt;Why should you do this?&lt;/p&gt;
&lt;p&gt;Because, for every referral I get 5000 points.  For 500 points, I can order 5 (&lt;strong&gt;yes 5!&lt;/strong&gt;) 3&amp;quot; TiVo plush things.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://gweezlebur.com/assets/2008/2/28/4.3.18.ORNAMENT_1.JPG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This means that if you use me as a referral, and I get 5000 points, and I then order 3&amp;quot; TiVo plush things, I can get 50 of them.  &lt;strong&gt;50&lt;/strong&gt; 3&amp;quot; TiVo plush things if you buy TiVo!  How cool is that?&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll even share.  If you want some of them, and use me as a referral, I&amp;#8217;ll send you some.  Heck, I&amp;#8217;ll send you some even if you don&amp;#8217;t, if I end up with enough.&lt;/p&gt;
&lt;p&gt;My goal is to have enough to fill the bathtub.  Or maybe Ellie&amp;#8217;s crib.  Or the Jeep.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>A simple re-tweet script</title>
   <link href="http://gweezlebur.com/2008/02/23/a-simple-re-tweet-script.html"/>
   <updated>2008-02-23T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/23/a-simple-re-tweet-script</id>
   <content type="html">&lt;p&gt;I want to be able to tweet as &lt;a href=&quot;http://twitter.com/EllieIvey&quot;&gt;Ellie&lt;/a&gt; from my phone, without logging in and out of the web interface.  So I made a simple re-tweet script that will let me send direct messages and have them get posted.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;twitter&amp;#39;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;twitter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Twitter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Base&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;USERNAME&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;PASSWORD&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;retweeters&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;ivey&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;twitter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;direct_messages&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;retweeters&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;include?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sender_screen_name&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;twitter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;twitter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;ivey&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sender_screen_name&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;twitter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;destroy_direct_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Be sure to change my username to yours (in both places).  Run the script via cron how ever often you like.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>michael.has_baby? => true</title>
   <link href="http://gweezlebur.com/2008/02/19/michael-has_baby-true.html"/>
   <updated>2008-02-19T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/19/michael-has_baby-true</id>
   <content type="html">&lt;p&gt;The title of this post (which is &amp;#8220;michael.has_baby? =&amp;gt; true&amp;#8221; despite what the &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; has done to it, and that I am too tired to fix) may be the only Ruby content around here for a little while.  I mean, how can you think about Merb or &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; headers or how much GitHub rocks when you&amp;#8217;re looking at this adorable face?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2085/2275002693_771018520f.jpg?v=0&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is Ellie.  Eleanor Airey Ivey, born Feb. 18, 2008.  Mom and baby are well, pictures headed to Flickr and to http://ellieivey.com&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Merb 0.9.0 (developer release)</title>
   <link href="http://gweezlebur.com/2008/02/14/merb-0-9-0-released-kinda.html"/>
   <updated>2008-02-14T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/14/merb-0-9-0-released-kinda</id>
   <content type="html">&lt;p&gt;A few minutes ago I pushed the gems for Merb 0.9.0 &amp;#8220;All you need, none you don&amp;#8217;t&amp;#8221; to merbivore.com.  Before you run off to &amp;#8220;gem update&amp;#8221; there&amp;#8217;s some things you should know.&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;http://yehudakatz.com/2008/01/14/merbnext/&quot;&gt;wycats explained earlier&lt;/a&gt; we&amp;#8217;ve chopped Merb up a little bit.  merb-core is small, fast and just the stuff you need to build a basic web application.  merb-more is a collection of things that make it cooler and more useful, like mailers and generators and template engines.  Together, merb-core and merb-more make up &amp;#8220;merb&amp;#8221;.  You&amp;#8217;ll still be able to gem install merb and have it work, or you can cherrypick just the pieces you want for your application.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve also got a decent collection of &amp;#8220;official&amp;#8221; plugins, including all the &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt; plugins, and some additional rspec and test/unit support.&lt;/p&gt;
&lt;p&gt;Anytime you gut a codebase like we did with Merb after 0.5, there&amp;#8217;s stuff that doesn&amp;#8217;t shake out properly.  We had planned to release 0.9.0 last weekend during acts_as_conference, but there&amp;#8217;s still some little stuff that needs shaking.&lt;/p&gt;
&lt;p&gt;Normally, we&amp;#8217;d just get people to use trunk and see what needed doing, and then call it a release.  This time, we don&amp;#8217;t really have a good sense of exactly where the rough spots are between all the moving parts.&lt;/p&gt;
&lt;p&gt;We need your help.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s 0.9.0, and it&amp;#8217;s a real release.  It&amp;#8217;s official.  It&amp;#8217;s just not on the Rubyforge gem repository yet.  We&amp;#8217;re calling it a &amp;#8220;developer release&amp;#8221; and it&amp;#8217;s like a release candidate, except we don&amp;#8217;t think we&amp;#8217;ll actually release it.  Once people use it, and we oil some of those squeaky spots, we&amp;#8217;ll push an 0.9.1.  We may do a few of these developer releases before we decide we&amp;#8217;re ready to push it to Rubyforge for general consumption.&lt;/p&gt;
&lt;p&gt;These developer releases are here to make sure that Merb 1.0 is as good as it can be, so if you want to see an awesome Merb 1.0, please use these 0.9.0 gems, and future dev releases, and give us feedback.&lt;/p&gt;
&lt;p&gt;If you have RubyGems 1.0.1, and want to always use these developer releases whenever they&amp;#8217;re available:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ gem sources -a http://merbivore.com
$ gem install merb
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;If you don&amp;#8217;t, or you don&amp;#8217;t:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ gem install --source http://merbivore.com merb
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;As always, &lt;a href=&quot;http://merb.lighthouseapp.com&quot;&gt;put your bugs and patches in Lighthouse&lt;/a&gt; and join the discussion on #merb.&lt;/p&gt;
&lt;p&gt;PS: Want to see something cool?&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ merb-gen myflatapp --flat
$ merb-gen mysinglefileapp --very-flat
&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>Contributing to Merb (Part 2)</title>
   <link href="http://gweezlebur.com/2008/02/09/contributing-to-merb-part-2.html"/>
   <updated>2008-02-09T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/09/contributing-to-merb-part-2</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://gweezlebur.com/2008/2/1/so-you-want-to-contribute-to-merb-core-part-1&quot;&gt;In Part 1&lt;/a&gt; I talked about how to use git to work on the merb-core/merb-more projects that will be Merb 0.9.&lt;/p&gt;
&lt;p&gt;This time I&amp;#8217;ll show you a different workflow, for people who plan to make a lot of changes, or want to do something interesting and maintain it as a public fork.&lt;/p&gt;
&lt;p&gt;Forking is sometimes a bad word, but no more!  In this new gitastic world, forking is a cool thing.  That&amp;#8217;s why Github makes it so easy to do!  When you fork, you do the same thing as when you clone&amp;#8230;.you just make your clone accessible to the world.&lt;/p&gt;
&lt;h3&gt;Step 1: Fork&lt;/h3&gt;
&lt;p&gt;Every Github project has a prominent &amp;#8220;Fork&amp;#8221; button, if you&amp;#8217;re logged in.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://gweezlebur.com/assets/2008/2/7/fork.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So the first step is to click that button.  As simple as that, you&amp;#8217;ve made your own repository based on the original.  You can add other people to it, accept patches, whatever you like.  (In fact, I really hope someone will fork merb-core and merb-more, declare themselves to be the coordinator of documentation patches, and periodically feed those back to the main repos)&lt;/p&gt;
&lt;p&gt;Play around with the settings.  You can&amp;#8217;t break it, and if you do, you can delete it and start over.  Forks are cheap.&lt;/p&gt;
&lt;h3&gt;Step 2: Clone your new repo&lt;/h3&gt;
&lt;p&gt;Instead of cloning wycats&amp;#8217; repo, you want to clone your own.  For instance, I have my own merb-core for experimental stuff, or if I want to give someone commit for a while to work on something together.  When I clone my repo, I use the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ mv merb-core merb-core-official
$ git clone git@github.com:ivey/merb-core.git
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;(This is not completely true.  I have a much more complicated setup, which I may detail in Part 3)&lt;/p&gt;
&lt;p&gt;Now, you probably want a way to keep in sync with the official repo.  So let&amp;#8217;s add it, too:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git remote add official git://github.com/wycats/merb-core.git
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Now, anytime you want to sync up, you can use either of the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git pull official master
$ # or
$ git fetch official
$ git rebase official/master
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The first version does an automatic commit of the merge, the second doesn&amp;#8217;t.&lt;/p&gt;
&lt;h3&gt;Step 3: Fix stuff&lt;/h3&gt;
&lt;p&gt;This is where it gets fun.  This is your repo.  Make some changes.  Use &amp;#8216;git push&amp;#8217; to push them up to your github repo.  Share them with #merb.  Get people to run your version and try the changes out.  Fix bugs.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re hoping to get your changes merged back in, it&amp;#8217;s a good idea to communicate with us about what you&amp;#8217;re doing.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re working on multiple big projects, it&amp;#8217;s a &lt;strong&gt;really&lt;/strong&gt; good idea to keep each one in a separate remote branch, so we can merge one without merging all of them.  We can cherry-pick if needed, but it&amp;#8217;s easier if you use branches.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git checkout -b feature1      # create a branch
# make changes
$ git commit
$ git push origin feature1      # push feature1 to remote
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Or, you can &lt;tt&gt;git push  &amp;#8212;tags &lt;/tt&gt; and push &lt;strong&gt;all&lt;/strong&gt; of your local tags to your remote repo.  Hey, it&amp;#8217;s your repo, use it how you like.&lt;/p&gt;
&lt;h3&gt;Step 4: Getting changes merged&lt;/h3&gt;
&lt;p&gt;Now you need to get someone to merge your changes.  Ideally, you&amp;#8217;ll already have an open ticket in Lighthouse, have been in communication with folks in #merb, and maybe even have talked to one of the core devs about your changes.&lt;/p&gt;
&lt;p&gt;Update your ticket and add:&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
   Hey, I have this fixed in my repo.&lt;/p&gt;
Please pull:

git pull git://github.com/jimmyhoffa/merb-core.git feature1
&lt;p&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The important things to note are that you use &lt;strong&gt;your&lt;/strong&gt; repo &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;, you make it easy to copy/paste directly (starting it with &amp;#8216;git pull&amp;#8217;) and that you include the remote branch, &lt;strong&gt;even if it is master&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;(Github will soon be adding a &amp;#8220;Pull Request&amp;#8221; button, so you can notify about patches via Github.  Keep an eye out for that.)&lt;/p&gt;
&lt;p&gt;If your changes are accepted, you&amp;#8217;ll see your commits show up in the main repo and there will be much adulation.  Hooray!  This doesn&amp;#8217;t even begin to scratch the surface of how awesome git is, but it should get you going.  Oh, and if you&amp;#8217;re like me, you&amp;#8217;re dying to &lt;a href=&quot;http://pastie.caboo.se/private/woiyw5qny3mpl2zlwoya&quot;&gt;know how git works on the inside&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Merb Monday</title>
   <link href="http://gweezlebur.com/2008/02/04/merb-monday.html"/>
   <updated>2008-02-04T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/04/merb-monday</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://jit.nuance9.com/&quot;&gt;jp_n9&lt;/a&gt; from #merb has started a series he calls &lt;a href=&quot;http://jit.nuance9.com/2008/02/merb-faqs-environment-variables.html&quot;&gt;Merb Monday&lt;/a&gt; where he compiles questions and answers from the &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; channel.  This is an awesome idea.  I was thinking last night that we needed a &amp;#8220;Kernel Traffic&amp;#8221; style summary for Merb stuff, and this is an excellent start!  Go subscribe, or just check it out on Mondays.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Contributing to Merb (Part 1)</title>
   <link href="http://gweezlebur.com/2008/02/01/so-you-want-to-contribute-to-merb-core-part-1.html"/>
   <updated>2008-02-01T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/02/01/so-you-want-to-contribute-to-merb-core-part-1</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve seen several people ask &amp;#8220;How can I help with merb-core?&amp;#8221; and so, here&amp;#8217;s a little guide. (Updated 2/14 w/ notes on rebasing.  Thanks ReinH.)&lt;/p&gt;
&lt;p&gt;This is part 1 of 2, for people who don&amp;#8217;t want to run their own public fork.&lt;/p&gt;
&lt;h3&gt;Step 1: Get a Lighthouse account&lt;/h3&gt;
&lt;p&gt;All of the Merb development is moving to Lighthouse instead of Trac, so you&amp;#8217;re going to need an account.  &lt;a href=&quot;http://merb.lighthouseapp.com/users/new&quot;&gt;Go register&lt;/a&gt; and then come back here.&lt;/p&gt;
&lt;h3&gt;Step 2: Get git&lt;/h3&gt;
&lt;p&gt;Merb is using &lt;a href=&quot;http://git.or.cz/&quot;&gt;git&lt;/a&gt; for development now.  &lt;a href=&quot;http://git.or.cz/#download&quot;&gt;There&amp;#8217;s information on the main git site&lt;/a&gt; about downloading and installing.  There&amp;#8217;s also some guides for installing on Mac.  Google is your friend.&lt;/p&gt;
&lt;p&gt;You should also configure git with your email address:&lt;/p&gt;
&lt;/notextile&gt;

These are global config settings that will apply to every project you checkout.

h3. Step 3: Get Merb

Using git is different from using SVN.  Every repository, whether published or not, is on equal footing with every other one.  All of the official Merb releases will be coming out of &quot;wycats' repository&quot;:http://github.com/wycats/merb-core/tree/master, though, so you probably want to get that one.  Do that with &quot;git clone&quot;

&lt;notextile&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git clone git://github.com/wycats/merb-core.git
Initialized empty Git repository in /tmp/merb-core/.git/
remote: Generating pack...
remote: Done counting 1684 objects.
remote: Deltifying 1684 objects...
remote:  100% (1684/1684) done
Indexing 1684 objects...
remote: Total 1684 (delta 800), reused 57 (delta 8)
 100% (1684/1684) done
Resolving 800 deltas...
 100% (800/800) done
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This will create a new repository in the directory merb-core, set up the remote repository links, fetch the latest copy of the upstream repository into your repository. and set up a tracking branch for upstream.&lt;/p&gt;
&lt;h3&gt;Step 4: Fix something&lt;/h3&gt;
&lt;p&gt;This is the whole point, right?  There&amp;#8217;s a bug you&amp;#8217;re dying to fix, or a feature you&amp;#8217;re dying to add.  So let&amp;#8217;s do that.  First, we create what git users calls a &amp;#8220;topic branch&amp;#8221; to hold the changes for this particular bug&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git checkout -b my_bugfix 
Switched to a new branch &amp;quot;my_bugfix&amp;quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This creates the branch, and switches us to it.  Now change whatever needs changing, of course running the specs to make sure they still pass.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot of git commands you may use here that are beyond the scope of this guide, like diff and status.  Consult your favorite git tutorial.&lt;/p&gt;
&lt;p&gt;Now we need to commit the changes.  Remember, in git every repository is equal, so you&amp;#8217;re committing to your local repo, not trying to commit to wycats&amp;#8217;.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git commit -a -v
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This will pop open an editor for us to type a commit message.  It should have a short, very descriptive first line, a blank line, then any other information that&amp;#8217;s relevant.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;
Added bug zapper library&lt;br /&gt;
&lt;br /&gt;
This loads in the bugzapper library,&lt;br /&gt;
which removes some common bugs,&lt;br /&gt;
like the ones in ticket #343.&lt;br /&gt;
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Save and quit, and you&amp;#8217;ll see something like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;Created commit 14626c1: Added bug zapper library
 1 files changed, 2 insertions(+), 1 deletions(-)
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The important bit is &amp;#8220;14626c1&amp;#8221; &amp;#8230; it&amp;#8217;s the first part of the unique identifier for this commit.  If you ever need to refer to this exact commit, you&amp;#8217;ll need that.&lt;/p&gt;
&lt;p&gt;However, since we used a topic branch, we know that every commit on this branch is part of the intended changes.  So we can use a shorthand to actually generate our patch(es).  First, though, let&amp;#8217;s make sure we&amp;#8217;re current with upstream&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git checkout master
$ git pull
$ git checkout my_bugfix
$ git rebase master
$ git format-patch master..
0001-Added-bug-zapper-library.patch
0002-initialize-zapper.patch
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This says &amp;#8220;make patch files for every commit that is in this branch and not in master&amp;#8221; (master is the default branch you started with).  You can see that I committed another fix, so there are 2 patches.&lt;/p&gt;
&lt;p&gt;If the rebase fails, it means your patches don&amp;#8217;t apply cleanly with the latest upstream changes.  You&amp;#8217;ll have to fix that (either manually or using git merge-tool), and then&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git rebase --continue
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;After that, continue with formatting the patch.&lt;/p&gt;
&lt;h3&gt;Step 5: Submit the patche(es)&lt;/h3&gt;
&lt;p&gt;Go to Lighthouse.  Create a ticket.  Tag it with &amp;#8220;patch&amp;#8221;.  Attach your patch(es).  Wait for them to be applied.&lt;/p&gt;
&lt;h3&gt;Step 6: Cleanup&lt;/h3&gt;
&lt;p&gt;You should switch back to the master branch now.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git checkout master
Switched to branch &amp;quot;master&amp;quot;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;If your patches have been accepted, you can delete your branch, too:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git branch -D my_bugfix
Deleted branch my_bugfix.
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Branches are cheap, so you can leave it around for a while, if you think you might come back to it.&lt;/p&gt;
&lt;p&gt;You should also pull down the latest changes, so your next patch will apply cleanly:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ git pull
&lt;/pre&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>The last of the Merb 0.5.x line</title>
   <link href="http://gweezlebur.com/2008/01/29/the-last-of-the-merb-0-5-x-line.html"/>
   <updated>2008-01-29T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/01/29/the-last-of-the-merb-0-5-x-line</id>
   <content type="html">&lt;p&gt;Just a few minutes ago I tagged and released Merb 0.5.3 &amp;#8220;Inexperienced With Girls&amp;#8221;, and it should be on the gem servers soon.  This is (hopefully) the last of the 0.5.x releases of Merb.  It&amp;#8217;s the last unless something horrible is wrong with it.&lt;/p&gt;
&lt;p&gt;Starting &amp;#8230;. &lt;strong&gt;now&lt;/strong&gt; &amp;#8230;. we&amp;#8217;re really focusing on the 0.9 code, which has some significant changes in terms of process.  First and foremost, we&amp;#8217;re using &lt;a href=&quot;http://git.or.cz/&quot;&gt;git&lt;/a&gt; to manage the development, instead of Subversion.  Also, we&amp;#8217;re splitting the codebase up into merb-core and merb-more, to balance that delicate line of &amp;#8220;super small and focused yet feature-rich&amp;#8221;.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;d like to see where things are headed, here&amp;#8217;s the repos on GitHub:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://github.com/wycats/merb-core/tree/master&quot;&gt;merb-core&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://github.com/wycats/merb-more/tree/master&quot;&gt;merb-more&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;my &lt;a href=&quot;http://github.com/ivey/merb-core/tree/master&quot;&gt;experimental merb-core&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the super cool things about GitHub is that it makes hosting a fork of a project trivial.  One of the super cool things about git is that it makes cherry-picking changesets from one tree to another really easy.  Combine those two things, and you get a &lt;strong&gt;completely&lt;/strong&gt; different development style than with central-repo projects.&lt;/p&gt;
&lt;p&gt;Right now, my experimental merb-core is the same as upstream, but I&amp;#8217;ll be doing stuff in there that may or may not be ready for official merb.  I&amp;#8217;ll let you know if there&amp;#8217;s anything interesting in there.&lt;/p&gt;
&lt;p&gt;The release of 0.9 is planned for February 8th, &lt;span class=&quot;caps&quot;&gt;IIRC&lt;/span&gt;.  There&amp;#8217;s a lot to do, but we&amp;#8217;ve made a lot of progress.  My next task is to make sure the &lt;a href=&quot;http://pastie.caboo.se/144566&quot;&gt;preliminary 0.9 upgrade checklist&lt;/a&gt; that wycats made is all that&amp;#8217;s needed (it can&amp;#8217;t be &lt;strong&gt;that easy&lt;/strong&gt;, can it?) and then go through merb-core and make sure all the &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; compliance and support is good.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Baby Pool</title>
   <link href="http://gweezlebur.com/2008/01/21/baby-pool.html"/>
   <updated>2008-01-21T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/01/21/baby-pool</id>
   <content type="html">&lt;p&gt;I had planned to run a baby pool, but then talked myself out of it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://yarnmiracle.com&quot;&gt;Emily&amp;#8217;s readers&lt;/a&gt; have talked me back into it.&lt;/p&gt;
&lt;p&gt;So, it&amp;#8217;s a &amp;#8220;getting-down-to-the-wire-but-we-still-don&amp;#8217;t-know-pink-or-blue&amp;#8221; baby pool.&lt;/p&gt;
&lt;p&gt;To enter, email me (&lt;strong&gt;ivey at gweezlebur.com&lt;/strong&gt;) and tell me a date &lt;strong&gt;and&lt;/strong&gt; pink or blue.  You need to get both to win the grand prize, whatever that is.  People who get the date only will get something fun.  People who only get pink or blue will get the satisfaction of having won a 50-50 coin flip.&lt;/p&gt;
&lt;p&gt;Oh, tell me if you&amp;#8217;ll want a regular prize or a yarn related prize.&lt;/p&gt;
&lt;p&gt;To sum up:&lt;/p&gt;
&lt;pre&gt;
  To: Michael Ivey &amp;lt;ivey at gweezlebur.com&amp;gt;
  From: You
  Subject: Baby Pool Entry for Your Name
  
  Blue/Pink
  Feb. 31st
  Prize w/ extra fiber, please
&lt;/pre&gt;
&lt;p&gt;Good luck!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Another change in '08: I'm going to Engine Yard</title>
   <link href="http://gweezlebur.com/2008/01/12/another-change-in-08-i-m-going-to-engine-yard.html"/>
   <updated>2008-01-12T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/01/12/another-change-in-08-i-m-going-to-engine-yard</id>
   <content type="html">&lt;p&gt;As I &lt;a href=&quot;http://twitter.com/ivey/statuses/574172692&quot;&gt;hinted&lt;/a&gt; on Twitter earlier in the week and &lt;a href=&quot;http://twitter.com/ivey/statuses/588337922&quot;&gt;announced&lt;/a&gt; today, I&amp;#8217;ve accepted a full-time position at &lt;a href=&quot;http://engineyard.com&quot;&gt;Engine Yard&lt;/a&gt; starting on Monday.&lt;/p&gt;
&lt;p&gt;I cannot overemphasize how much of a change this is for me.&lt;/p&gt;
&lt;p&gt;I haven&amp;#8217;t worked for someone other than myself in nearly 5 years.  No employment agreements.  No phone extensions.  No email addresses I didn&amp;#8217;t assign for myself.  No direct deposit.&lt;/p&gt;
&lt;p&gt;In fact, I even went so far as to say that I probably wouldn&amp;#8217;t work as an employee for anyone else ever again.&lt;/p&gt;
&lt;p&gt;And yet, a few days after a 3 line conversation on &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt;, I was signing employment agreements, getting a phone extension and a new email address (why does it have to be &lt;strong&gt;mivey&lt;/strong&gt; &amp;#8230; ugh) and sending in a voided check.&lt;/p&gt;
&lt;p&gt;Why would I do such a thing?&lt;/p&gt;
&lt;p&gt;Because Engine Yard kicks ass, they&amp;#8217;re committed to seeing good people write good code that helps their customers be successful, and the team they&amp;#8217;re putting together is absolutely first class.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been an EY customer for a while.  I know they do good stuff.  I&amp;#8217;ve seen first-hand the difference between other hosting companies and EY.  Other places give you an IP and a login, and you&amp;#8217;re on your own.  EY deploys your app for you.  Ezra literally &lt;a href=&quot;http://www.pragprog.com/titles/fr_deploy&quot;&gt;wrote the book on Rails deployments.&lt;/a&gt; If your app breaks, they help you fix it.  Need help scaling? Just ask.&lt;/p&gt;
&lt;p&gt;Plus they&amp;#8217;re fully committed to Ruby as a serious platform.  They&amp;#8217;re supporting Evan&amp;#8217;s work on &lt;a href=&quot;http://rubini.us/&quot;&gt;Rubinius&lt;/a&gt;&lt;br /&gt;
and of course they are the best place to host &lt;a href=&quot;http://merbivore.com&quot;&gt;Merb&lt;/a&gt; apps.  A significant chunk of the Merb core devs now work for EY.  If your Merb app needs some help, who else would you want to work on it?&lt;/p&gt;
&lt;p&gt;And now I get to work with these people every day.&lt;/p&gt;
&lt;p&gt;So yeah.  It&amp;#8217;s weird to be working for someone else.  Really weird.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s going to be great, though.  I can&amp;#8217;t wait to get started.&lt;/p&gt;
&lt;p&gt;PS: they just &lt;a href=&quot;http://brainspl.at/articles/2008/01/11/engine-yard-takes-3-5-million-in-vc-money&quot;&gt;raised 3.5 million in VC money to continue to grow.&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>2008: In Pictures</title>
   <link href="http://gweezlebur.com/2008/01/02/2008-in-pictures.html"/>
   <updated>2008-01-02T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2008/01/02/2008-in-pictures</id>
   <content type="html">&lt;div class=&quot;entry&quot;&gt;
&lt;p&gt;I&amp;#8217;ve decided to take a picture every day this year.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the latest 10.  &lt;a href=&quot;http://www.flickr.com/photos/ivey/sets/72157603624959964/&quot;&gt;See the whole set.&lt;/a&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://www.flickr.com/badge_code_v2.gne?user=90358277%40N00&amp;layout=v&amp;source=user_set&amp;set=72157603624959964&amp;size=m&quot;&gt;


&lt;/script&gt;&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>Why I am a DataMapper convert (it makes BDD happy)</title>
   <link href="http://gweezlebur.com/2007/11/09/why-i-am-a-datamapper-convert-it-makes-bdd-happy.html"/>
   <updated>2007-11-09T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2007/11/09/why-i-am-a-datamapper-convert-it-makes-bdd-happy</id>
   <content type="html">&lt;p&gt;There&amp;#8217;s lots of buzz around [DataMapper](http://datamapper.org/) right now, especially among the #merb crowd.  I haven&amp;#8217;t had any major issues with ActiveRecord, so I haven&amp;#8217;t needed to look at a new &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt;&amp;#8230;but I like to play with new things, so last night I really gave the DM a try.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m a complete convert, if for no other reason that the awesome way automigrations play along with &lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;First, tell your spec_helper to use automigrations:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;no&quot;&gt;DataMapper&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Base&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auto_migrate!&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This &lt;strong&gt;will cause your database tables to be dropped and re-created&lt;/strong&gt; so use with caution.&lt;/p&gt;
&lt;p&gt;Next, let&amp;#8217;s spec some behavior:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;should have a username field&amp;quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;vi&quot;&gt;@person&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;jjames&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;vi&quot;&gt;@person&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;should&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;jjames&amp;quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;And see what autotest says:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;....F.....

1)
NoMethodError in &amp;#39;Person should have a username field&amp;#39;
undefined method `username=&amp;#39; for #&amp;lt;Person:0x13f720c&amp;gt;
./spec/models/person_spec.rb:38:

Finished in 0.049775 seconds

10 examples, 1 failure
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Cool, that&amp;#8217;s what we expected.  Now, with ActiveRecord, to get to green, we&amp;#8217;d need to create a migration and run it.  With DataMapper, we stay in our model:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Person&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;DataMapper&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Base&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:string&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;And autotest says&amp;#8230;&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;..........

Finished in 0.040584 seconds

10 examples, 0 failures
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Now, is this perfect?  Not yet.  DM has a good amount of work still.  There&amp;#8217;s some smart folks working on it, and I bet it will be pretty sweet in a few more weeks.&lt;/p&gt;
&lt;p&gt;But, man&amp;#8230;that&amp;#8217;s just awesome.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Merb 0.4.0 released</title>
   <link href="http://gweezlebur.com/2007/11/07/merb_0_4_0.html"/>
   <updated>2007-11-07T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2007/11/07/merb_0_4_0</id>
   <content type="html">&lt;p&gt;About 6 months ago or so I looked at [Merb](http://merbivore.com) as a potential replacement for small apps that I didn&amp;#8217;t want to use Rails for.  It seemed cool, but pretty rough, and I didn&amp;#8217;t have a good reason to use it.&lt;/p&gt;
&lt;p&gt;Fast forward to the Ruby Hoedown in August.  Ezra Zygmuntowicz, Merb&amp;#8217;s creator, gave a talk about Merb.  I saw some things I had missed, that were really exciting.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; Status Codes handled via Exceptions&lt;/li&gt;
	&lt;li&gt;Emphasis on speed and small code base&lt;/li&gt;
	&lt;li&gt;Closer match between the framework and the flavor of the &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; spec&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I checked out the code.&lt;/p&gt;
&lt;p&gt;I played around.&lt;/p&gt;
&lt;p&gt;I got excited about how I could keep most of the code in my head at the same time.&lt;/p&gt;
&lt;p&gt;I submitted some patches.&lt;/p&gt;
&lt;p&gt;Ez gave me commit.&lt;/p&gt;
&lt;p&gt;I wrote some sample controllers and specs.&lt;/p&gt;
&lt;p&gt;I wrote a replacement for `respond_to` that I think is pretty awesome.&lt;/p&gt;
&lt;p&gt;I flew to Charlotte for about 18 hours for a Merb hack session at RubyConf.&lt;/p&gt;
&lt;p&gt;Tonight, Ez pushed Merb 0.4.0 to Rubyforge.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s just crazy to think how quickly I&amp;#8217;ve gotten involved in this project, how excited I am about this 0.4.0 release, and how much I&amp;#8217;m looking forward to &lt;strong&gt;using&lt;/strong&gt; this framework to build some cool apps.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re interested in Merb, pop over to http://merbivore.com or join us on &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; in #merb.  We&amp;#8217;re pretty sure you&amp;#8217;ll like it.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>RESTful search across multiple models</title>
   <link href="http://gweezlebur.com/2007/07/31/restful-search-across-multiple-models.html"/>
   <updated>2007-07-31T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2007/07/31/restful-search-across-multiple-models</id>
   <content type="html">&lt;p&gt;A guy I know from the Rails mailing list called me this morning.  He&amp;#8217;s working on some kind of forum application, I think, and is thinking hard about how to do search in a RESTful way.&lt;/p&gt;
&lt;p&gt;Normally, I just use the index action to search across a single resource, but in his case he wants to search Posts, which are nested inside Topics, which are nested inside Forums.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# routes.rb&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:forums&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;forum&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;forum&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:topics&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;topic&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;topic&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:posts&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;He wants to search Posts across all Forums and Topics.  One option would be to make PostsController serve double-duty&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# routes.rb&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:forums&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;forum&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;forum&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:topics&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;topic&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;topic&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:posts&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:posts&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;and make it figure out whether or not it&amp;#8217;s called in a scoped way or an unscoped way.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# posts_controller&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;index&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;include?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:forum_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# act normal, we&amp;#39;re scoped&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# we&amp;#39;re special and top-level, so ... do something different&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;In this case, I suggested he go a different way.  Even though he says he only wants to search Posts, I feel pretty sure he wants to search Topics (by title) and Forums (by name), too.&lt;/p&gt;
&lt;p&gt;And even if he doesn&amp;#8217;t, I do.  I&amp;#8217;m about to add a general-purpose, cross-resource search to &lt;span class=&quot;caps&quot;&gt;SOLIS&lt;/span&gt;, the registration and conference management system I&amp;#8217;m writing for &lt;a href=&quot;http://www.suusi.org&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SUUSI&lt;/span&gt;&lt;/a&gt; and this seemed like an ideal way to help out a friend, make a much-needed blog post, and get some code done in the meantime.&lt;/p&gt;
&lt;p&gt;Before we get started, though&amp;#8230;this is &lt;strong&gt;one way&lt;/strong&gt; to do RESTful search.  It&amp;#8217;s not the only way.  It is probably not the best way.  I&amp;#8217;m not sure it&amp;#8217;s a good way, since I just thought of it on the porch this morning and haven&amp;#8217;t used it yet.  I&amp;#8217;m pretty sure it&amp;#8217;s an OK way, though, and a good place to start thinking about it. &lt;span class=&quot;caps&quot;&gt;YMMV&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;OK, that&amp;#8217;s out of the way.&lt;/p&gt;
&lt;p&gt;I already know what I want: a singleton resource called /search.  So let&amp;#8217;s add it to the routes&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;resource&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:search&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;I can never remember whether singleton resources want singular (SearchController) or plural (SearchesController) names.  I&amp;#8217;m pretty sure this has changed in edge, and possibly changed back.  So, I add the resource and load it up, and see what Rails tells me.  When I load /search, I get &amp;#8216;uninitialized constant SearchController&amp;#8217;.  Cool, it did what I wanted, and used singular.  (I just checked, and on edge it uses plural.  Bleh.  I guess I can see why, but&amp;#8230;anyway.)  Now we need that controller.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;$ script/generate controller -c Search
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/search
A         app/views/search
      exists  test/functional/
      create  app/controllers/search_controller.rb
A         app/controllers/search_controller.rb
      create  test/functional/search_controller_test.rb
A         test/functional/search_controller_test.rb
      create  app/helpers/search_helper.rb
A         app/helpers/search_helper.rb
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Because it&amp;#8217;s a singleton resource, the actions are different; requesting /search calls the show action.&lt;/p&gt;
&lt;p&gt;Now, showing a search with no query string doesn&amp;#8217;t make sense.  /search/new is an ugly &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;.  I want to search as a &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; not a &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt;, so you can bookmark it.  So, here&amp;#8217;s what I ended up with.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# SearchController&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;show&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;include?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# we have a query, so call create to actually do the search&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# don&amp;#39;t redirect, though, there&amp;#39;s no need, and bookmarkable&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# search URLs are handy&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:action&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;create&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# we don&amp;#39;t have a query, so do the new action&lt;/span&gt;
      &lt;span class=&quot;kp&quot;&gt;new&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:action&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;new&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;create&lt;/span&gt;
    &lt;span class=&quot;vi&quot;&gt;@search_results&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;returning&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:q&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:q&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# ... add other models here, or use whatever searching you need&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;flatten&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;# new.rhtml
&lt;span class=&quot;nt&quot;&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Search for stuff (events, workshops, trips, people...)&lt;span class=&quot;nt&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;form_tag&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;search_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:get&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text_field_tag&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:q&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;submit_tag&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Search&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;nil&lt;/span&gt;  &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;

# create.rhtml
&lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@search_results&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;%=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;%&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Obviously you&amp;#8217;ll format your search results more prettily, with links and such.  And you&amp;#8217;ll need search() methods on all the classes you&amp;#8217;re going to search.  Or, make a Searcher model and let it do all the work.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Rails 1.2.3 eTag patch</title>
   <link href="http://gweezlebur.com/2007/07/09/rails-1-2-3-etag-patch.html"/>
   <updated>2007-07-09T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2007/07/09/rails-1-2-3-etag-patch</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://dev.rubyonrails.org/changeset/6158&quot;&gt;Rails Edge changeset 6158&lt;/a&gt; added automatic eTag support.  I needed it in a Rails 1.2.3 project, so I made a little patch to shoehorn 6158 into 1.2.3.&lt;/p&gt;
&lt;p&gt;&amp;#8220;Here&amp;#8217;s the patch, &amp;quot;:http://gweezlebur.com/assets/2007/7/9/patch_etag_support.rb just drop it into lib and require it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Updated&lt;/strong&gt;: includes &lt;a href=&quot;http://dev.rubyonrails.org/ticket/7580&quot;&gt;7580&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Updated again:&lt;/strong&gt; I&amp;#8217;m having some issues with this, so looks like I blogged it pre-maturely.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Dish Rag Tag</title>
   <link href="http://gweezlebur.com/2007/06/16/dish-rag-tag.html"/>
   <updated>2007-06-16T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2007/06/16/dish-rag-tag</id>
   <content type="html">&lt;p&gt;So for the past few days I&amp;#8217;ve been spending a few (hah) cycles on a little project for Emily, &lt;a href=&quot;http://dishragtag.yarnmiracle.com&quot;&gt;Dish Rag Tag&lt;/a&gt;.  Signups are already closed, so you can&amp;#8217;t see the pretty form she mocked up, but it&amp;#8217;s a neat little app.  It&amp;#8217;s just People and Teams so far in terms of models, but it&amp;#8217;s been fun to work on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://yarnmiracle.com/2007/06/12/dish-rag-tag/&quot;&gt;Her original blog post from Tuesday&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://yarnmiracle.com/2007/06/15/full-to-the-brim/&quot;&gt;Four days later, closing signups with 200 people, plus 10 on Team Canada&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Ruby Hoedown</title>
   <link href="http://gweezlebur.com/2007/06/12/ruby-hoedown.html"/>
   <updated>2007-06-12T00:00:00-05:00</updated>
   <id>http://gweezlebur.com/2007/06/12/ruby-hoedown</id>
   <content type="html">&lt;p&gt;I just registered for &lt;a href=&quot;http://www.rubyhoedown.com/&quot;&gt;the Ruby Hoedown&lt;/a&gt; in August.&lt;/p&gt;
&lt;p&gt;I decided not to go to RailsConf this year because it was a long way away, and was going to be very big.  The Hoedown is (relatively) close and small.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s also a Significant Others event, which is a cool idea, and I hope that turns out well.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>The Site</title>
   <link href="http://gweezlebur.com/2007/01/05/the-site.html"/>
   <updated>2007-01-05T00:00:00-06:00</updated>
   <id>http://gweezlebur.com/2007/01/05/the-site</id>
   <content type="html">&lt;p&gt;This site has been around since 1998, and I&amp;#8217;ve been blogging (off and&lt;br /&gt;
on, with long periods of off) since 1999.&lt;/p&gt;
&lt;p&gt;Here are some links to older content.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/staticsite&quot; title=&quot;1999 - 2003ish&quot;&gt;Static site&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/weblog/archive/&quot; title=&quot;October 1999 - May 2003&quot;&gt;Original &amp;#8216;my dog wants to be on the radio&amp;#8217; weblog archives&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/mkII&quot; title=&quot;May 2003 - December 2003&quot;&gt;mdwtbotr mkII wikiblog posts&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/archives.html&quot; title=&quot;December 2003 - June 2004&quot;&gt;Moveable-Type-based front page posts&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/quick/archives.html&quot; title=&quot;December 2003 - June 2004&quot;&gt;Moveable-Type-based QuickThoughts posts&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/articles/index.html&quot; title=&quot;December 2003 - June 2004&quot;&gt;Moveable-Type-based Articles posts&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://d3dw.gweezlebur.com/~ivey/rublog/&quot;&gt;Hideous &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; rublog-based posts (February 2005) &amp;#8211; also includes older content, somewhat, including mkII posts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 
</feed>
