<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Jason Seifer</title>
	
	<link>http://jasonseifer.com</link>
	<description />
	<lastBuildDate>Fri, 21 Aug 2009 22:27:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/jasonseifer" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Live blogging BizConf Day 2</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/CRqub3DGnTo/live-blogging-bizconf-day-2</link>
		<comments>http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2#comments</comments>
		<pubDate>Fri, 21 Aug 2009 16:40:54 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=239</guid>
		<description><![CDATA[



Day 1 of BizConf was phenomenal and I&#8217;m going to try and keep up the live blogging for day 2.  I missed the lightning talks last night but heard great things from everyone who went.  I&#8217;ve got my camera charged up today so I&#8217;ll try and get some pictures of the presenters as [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/20/liveblogging-bizconf' rel='bookmark' title='Permanent Link: Liveblogging Bizconf'>Liveblogging Bizconf</a> <small> I'm lucky to attend BizConf so I thought I'd...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842436229/" title="Obie Fernandez and Roy Singham by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3506/3842436229_002e50b6ec_m.jpg" width="240" height="160" alt="Obie Fernandez and Roy Singham" /></a>
</div>
<p>
Day 1 of BizConf was phenomenal and I&#8217;m going to try and keep up the live blogging for day 2.  I missed the lightning talks last night but heard great things from everyone who went.  I&#8217;ve got my camera charged up today so I&#8217;ll try and get some pictures of the presenters as well.  Fair warning: I&#8217;m really not that great of a photographer.
</p>
<ul>
<li><a href="#keynote">Roy Singham&#8217;s keynote</a></li>
<li><a href="#agilefail">Corey Haines: How Agile Will Probably Fail You</a></li>
<li><a href="#manage_agile">Bruno Miranda: Successfully Managing Local and Remote Teams</a></li>
<li><a href="#thecloud">Agile, Rails, and the Cloud</a></li>
<li><a href="#legalities">Legalities</a></li>
</ul>
<p></p>
<hr />
</p>
<div id="keynote"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_173">Roy Singham</a></h3>
<h4>Keynote</h4>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842436379/" title="Roy Singham by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3514/3842436379_187af55221_m.jpg" width="233" height="240" alt="Roy Singham" /></a>
</div>
<p>Roy talks quick! I had some trouble keeping up with the wealth of information coming from this talk.</p>
<p>Randomness is a much greater predictor of success than skill.  <a href="http://en.wikipedia.org/wiki/Decoy_effect">Decoy pricing</a> is probably used a lot by consulting firms.  It&#8217;s easy to compare a distorted version of something to the non-distorted version than to something else.
</p>
<p>Think about your leadership.  Write down your top 10 mistakes. Put them in to categories. People mistakes and investing in the wrong person. How you handle yourself in a crisis. When confronted with a huge number of decisions, how do you handle it?  Are you confident?</p>
<p>A mistake is something you made in hindsight, not in foresight.  The sign of really great leaders is to protect people who have different skills.  You have to have people who offset  your own weaknesses.  Not trusting his gut about a certain person in his organization cost the company a lot of money.  Even though he had a gut feeling about this person he forged ahead.  Always trust your gut.</p>
<p>There&#8217;s no bonuses at Thoughtworks but leaders still focus on money.  Even though we would like to believe that sales are driven by supply and demand, we&#8217;re closer to ducks.  Take the iPhone as an example, and Starbucks coffee.  Starbucks is not worth $5/coffee but we&#8217;ve been convinced it is.  That&#8217;s how a lot of consulting companies charge exorbitant amounts.</p>
<ul>
<li>Are they good at their job?</li>
<li>Does their boss recognize it?</li>
<li>Do they have friends at work?</li>
</ul>
<p>The average 23 year old expects to have 12 jobs by the time they are 30.  That&#8217;s almost a job a year.</p>
<p>Roy&#8217;s ideas for surviving a recession:</p>
<ul>
<li>No matter how smart you think you are, you will still make mistakes.</li>
<li>Massively increase sales force.</li>
<li>Double intimacy with customers. Get closer to them.  Understand your customer&#8217;s customer. If you can understand that, you will create more value for customers.</li>
</ul>
<p>Take the biggest risk you can possibly think of to create new business strategies.  Learn quickly, make it something you can live with. Thoughtworks is engaging five simultaneous new offerings.</p>
<p>A huge limitation of why we fail at software consulting is that people in the software industry aren&#8217;t generally aware of how their clients are feeling emotionally.</p>
<p>Think about what you want to be known for when you get older. Make a difference you will be proud of.  Success should not be about how big your company is.  It should be about how you change peoples lives.</p>
<p></p>
<hr />
</p>
<div id="agilefail"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_182">Why Agile Will Probably Fail You</a></h3>
<h4>Corey Haines of coreyhaines.com</h4>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842437223/" title="Corey Haines by jseifer, on Flickr"><img src="http://farm3.static.flickr.com/2472/3842437223_5aa4469906_m.jpg" width="220" height="240" alt="Corey Haines" /></a>
</div>
<p>If you&#8217;re not familiar with <a href="http://coreyhaines.com">Corey Haines</a>, he&#8217;s a &quot;software journeyman.&quot; He travels around and pair programs with people all over the country.  I&#8217;ve had the opportunity to pair with him for a day and it was quite an experience.</p>
<p>Life rule #1: Any time you get to go to the scientist only section, you say yes.</p>
<p><strong>Why do we write bad code?</strong><br />
This is not the question. No one likes to write bad code. The question becomes the following:
</p>
<p><strong>When do we write bad code?</strong><br />
When we&#8217;re under pressure and have to get it done.  The deadline is coming and you&#8217;re only 80% done. There&#8217;s only so much time left so we start hacking away.  &quot;Get it done&quote; vs &quot;Do It Right&quot;.  There&#8217;s a perception that when you have to get it done the only way to do it is to hack away.
</p>
<p><strong>Constant Pressure</strong><br />
Here&#8217;s an idea: if we have developers feel like they&#8217;re under pressure at the end of the project, let&#8217;s change the deadlines to every month. It would be great if we could let everyone figure out their own process. When people think of agile this is what they think of. Yet the issue of &quot;Get It Done&quote; vs &quot;Do It Right&#038;quot is still an issue. Most young people, in terms of a development perspective, only think about today.  Scrum assumes that developers self oganize and are responsible.
</p>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842436737/" title="Corey Haines laptop by jseifer, on Flickr"><img src="http://farm3.static.flickr.com/2531/3842436737_17f95794b4_m.jpg" width="240" height="159" alt="Corey Haines laptop" /></a>
</div>
<p><strong>Features and Quality</strong><br />
Let&#8217;s talk about features.  Add a feature to your app.  Change a feature in your app.  Then time passes. As you work with crap code it takes more time to add features.  This brings us to a definition of software quality: having a nominal cost of adding new features. It doesn&#8217;t mean there will be no bugs.</p>
<p>Software can be similar to gardening.  Gardening isn&#8217;t about growing plants.  It&#8217;s about changing the environment to let it flourish.  Add a feature then clean it up. Change a feature then clean it up. Make sure your code base stays clean and boring to add new features.</p>
<p><strong>&quot;If I&#8217;m adding a new feature I don&#8217;t want excitement&quot;</strong></p>
<p><strong>Why doesn&#8217;t everyone do the XP techniques?</strong><br />
We don&#8217;t know how. They&#8217;re hard to learn.  While learning to do TDD a friend of Corey&#8217;s took a 70% hit in productivity.  So how do you learn to do XP?  Most small businesses can&#8217;t take that hit in productivity.  Work is not practice.
</p>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3843226684/" title="Corey Haines laptop by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3509/3843226684_6607c72bca_m.jpg" width="240" height="159" alt="Corey Haines laptop" /></a>
</div>
<p>Becoming a better software developer is about practice.  How good would a band be if they only practiced while they were on stage?  What kind of quality would a play have if the actors were only given the script an hour before the show?  Enter the software craftsmanship manifesto.</p>
<p><strong>Practice Techniques</strong></p>
<ul>
<li>Code Kata</li>
<li>Coding Dojo</li>
<li>Code Retreat</li>
<li>Acceptance Test-based</li>
</ul>
<p>In the end I think it boils down to this: developing quality software is about taking pride in your work.  The software craftsmanship manifesto gives you guidelines.  The practices outlined above get you better at it.  Take pride in your work and write quality code.</p>
<p>During this talk Jerry got in to a bit of a debate with Corey on practices. While the debate was lively and interesting, this probably could have waited until his talk was over rather than taking time away from Corey&#8217;s talk. There was about 25 minutes worth of content Corey didn&#8217;t get to.  I&#8217;m going to be forced to find out about the rest of the content of this talk over scotch later.  The horror.  I&#8217;ll update this post later.</p>
<p></p>
<hr />
</p>
<div id="manage_agile"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_203">Successfully Managing Local and Remote Web 2.0 Teams</a></h3>
<h4>Bruno Miranda of Hoodiny Entertainment</h4>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3843227152/" title="Bruno Miranda by jseifer, on Flickr"><img src="http://farm3.static.flickr.com/2669/3843227152_c953e6c39f_m.jpg" width="233" height="240" alt="Bruno Miranda" /></a>
</div>
<p>
Cyloop is a music site.  The first version of the site was in Java. It couldn&#8217;t scale.  The CEO of the company decided to switch to Rails and hired Hashrocket.  They did the 3-2-1 launch.  Hashrocket taught the developers, who were all Java, .Net, and PHP developers, about TDD and Rails.  Hashrocket&#8217;s time lasted about a month.  The app was re-launched in about 3 months total.
</p>
<p>
Having a local team is important. You have a lot of bandwidth to talk and communicate.  It can also be distracting. The team uses headphones a lot to reduce distractions.  It&#8217;s good to have the stakeholders in the same spot as developers. There&#8217;s five people in the Miami office, one in Orlando, and remote developers in Brazil.  The team tends to type rather than talk, even in person.  Typing tends to keep conversations more succinct.
</p>
<p>
Why go distributed? Bruno wrote a post on his blog about limiting yourself.  The Ruby community is small and there&#8217;s not a ton Ruby talent in Miami.  They would rather not limit themselves to just local talent, they want the best developers.  Do video chats to hire people over-seas.  Use other resources to find about people.  Look at their <a href="http://github.com">GitHub</a> accounts.  It&#8217;s all about finding the right people and staying transparent.
</p>
<p>
Working with local and remote teams is about transparency. If you don&#8217;t know what someone is doing then how do you know they&#8217;re doing anything at all?  If you don&#8217;t have a lot of throughput to talk to people face to face you wind up getting a lot of phone calls and meeting requests.  Skype and AIM are &#8220;silo&#8221; based and talking one on one is probably going to be beneficial so move it to <a href="http://campfirenow.com">Campfire</a>.  Mac folks, check out <a href="http://propaneapp.com">Propane</a> so you can get your name growled.
</p>
<p>
<strong>Communication</strong><br />
In another company, Bruno tried daily standups via phone and Skype but you always waste time getting the mic set up.  Daily standups are done in camp fire.  Standups are a one paragraph conversation with the rest of the screen.  There&#8217;s a script that calls for the daily stand-up every day in the Campfire room. Don&#8217;t let your standup become a book. <a href="http://newrelic.com">NewRelic</a> notifications and incidents get automatically posted in to the campfire team room as well.  There&#8217;s mainly one product with this company and you may want to move individual projects in to their own room.
</p>
<p>They don&#8217;t pair all the time. They pair over iChat and Skype. Skype has better sound so disable the mic in iChat.</p>
<p>Projects are managed in <a href="http://pivotaltracker.com">Pivotal Tracker</a> and meetings are done with the person who makes the decision. The whole local and remote teams are not included because there&#8217;s too many people. There&#8217;s a lot of streamlining of the communication process in this company. Your company has to be able to accept change to pull this sort of strategy off.</p>
<p>
<strong>Conclusions</strong><br />
There&#8217;s a strong misconception that you can&#8217;t manage a local and remote team.  It can be done and it can be done successfully, your organization just has to be willing to accept change.  It makes business and financial sense and as long as you get the right people you get quality code.  Bruno did a great job with this presentation and made some great points.
</p>
<p></p>
<hr />
</p>
<div id="thecloud"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_190">Agile, Rails, and the Cloud</a></h3>
<h4>Ian McFarland of Pivotal Labs</h4>
<div class="img_right">
  <a href="http://www.flickr.com/photos/jseifer/3843180313/" title="BizConf 2009 by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3458/3843180313_be68ddeee5_m.jpg" width="240" height="159" alt="BizConf 2009" /></a>
</div>
<p>As developers, we build software because it&#8217;s cool, fun, exciting, and we love the challenge.  Also it beats a lot of other jobs.  Companies build software for different reasons. They do it to save money, manage risk, and satisfy business and government requirements.  We&#8217;re in the middle of a revolution.  This revolution in software is about one thing: building better value for businesses for lest money.</p>
<p>Software is expensive.  The following are the most expensive with developing software: developers, defects, deployment, maintenance, and change.  In the current economy budgets are smaller, the stakes are higher, departments have to do more with less, and failure is more catastrophic.</p>
<p><strong>Agile</strong><br />
  Agile is business driven: requirements come from business stakeholders.  </p>
<p>  <strong>The customer:</strong></p>
<ul>
<li>The customer is empowered to make decisions and priorities are set by that customer.</li>
<li>The customer can change priorities on anything unstarted.</li>
<li>The customer accepts the work in fine-grained increments.</li>
<li>The customer is intimately aware of progress and projected feedback dates.</li>
<li>Closing the feedback loop is critical.</li>
</ul>
<p>TDD and BDD factors in to this. Good tests tell us when we&#8217;ve met the customer&#8217;s needs, what&#8217;s broken, and lets us refactor.  TDD helps keeps you focused: you&#8217;re not building features if you don&#8217;t need them.</p>
<p>A big part of agile is iterative development. These days, iterations are getting shorter.  Because the customer is seeing the work on a daily basis, the feedback cycle is short.  This keeps the cost of change low by preventing unnecessary work.</p>
<p>
  <strong>Continuous Integration and Continuous Releasability</strong><br />
  There is a bit of a misconception about continuous release.  Just because you <em>can</em> release continuously doesn&#8217;t mean you <em>have</em> to release continuously.
</p>
<p>
  <strong>Pair Programming</strong><br />
  You have to pair if you want to be as efficient as you possibly can.  As long as there&#8217;s more than one developer you&#8217;re already pairing.  Doing it all the time means you get better at it.  Pairing is effective because you stay focused.  Developers can get distracted.  It&#8217;s hard to stay focused all day.  At Pivotal developers are exhausted at the end of the day their first week on the job. This is because they&#8217;re really not used to coding non stop for 8 hours a day.
</p>
<div class="img_right">
  <a href="http://www.flickr.com/photos/jseifer/3843968458/" title="BizConf 2009 by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3438/3843968458_d10b2d1000_m.jpg" width="240" height="159" alt="BizConf 2009" /></a>
</div>
<p>
  Pairing helps because you don&#8217;t get stuck so you spend more time on the more interesting part of your code. Developers get more well-rounded as they pair. You learn from your pair &#8212; design and testing techniques, new development techniques, etc. As a business owner you&#8217;re investing a lot in your developers this way. If you&#8217;re not pairing you&#8217;re throwing that away.  New team members can be brought up to speed in an hour when pairing rather than taking a week to figure out their way around.  Another benefit to pairing is that you distribute knowledge more. Your bus factor (the number of people who need to get hit by a bus for the project to stop) goes up.
</p>
<p>
  You need to make a productive workspace in a pair environment.  Have consistent pairing stations.  Pivotal will have breakfast available before the morning stand-up.  The reason is that some developers wouldn&#8217;t eat breakfast before work and some would.  This would result in some developers wanting to stop earlier for lunch than others.
</p>
<p>
  Developer happiness is important to the business.  Having a happy developer is important because developer happiness is directly correlated to developer productivity.  Productive developers tend to be happier.  When you&#8217;re doing grunt work as a developer things don&#8217;t seem as bad.  Happy workers are more focused.
</p>
<p>
  <strong>Rails</strong><br />
  Rails is powerful. Rails goes very well with agile &#8212; it&#8217;s practically baked in to the culture.  Anecodtally, Pivotal has seen a lot of improvements in efficiency with Rails.
</p>
<p>
  <strong>The Cloud</strong><br />
  You don&#8217;t have to worry about buying hardware anymore.  You don&#8217;t have to be in the infrastructure business.  You can scale on demand if you architect for it.  You can stay focused on development.  This is a big change in the industry.
</p>
<p>
  The enterprise is not quite cloud ready yet.  Lots of CIOs really want everything running on ahrdware they already bought. There are sometimes legislative restrictions about having things in the cloud.  But it&#8217;s getting better. People run HR, CRM, and financials in the cloud now. The cloud is getting closer to being enterprise ready. There are market pressures being addressed every day by cloud offerings. These are all problems we&#8217;ve heard before.
</p>
<p>
  In the end, it&#8217;s not about the technology.  Businesses don&#8217;t care about technology. Technology is the means to an end. Think about the technology like a business.  Think about getting it done cheaply, quickly, and well.  This is why Rails, agile, and the cloud make business sense.
</p>
<p></p>
<hr />
</p>
<div id="legalities"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_196">Legalities</a></h3>
<h4>Jose Gonzalez of Hoodiny Entertainment</h4>
<div class="img_right">
  <a href="http://www.flickr.com/photos/jseifer/3843968302/" title="BizConf 2009 by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3528/3843968302_d2e440a8e9_m.jpg" width="240" height="159" alt="BizConf 2009" /></a>
</div>
<p>
  Other than what you&#8217;re going to provide, when you&#8217;re going to provide it, and how much it&#8217;s going to be fore, everything is going to be specific for your business.  Don&#8217;t accept sloppy code and don&#8217;t accept ambiguity in the business.  If you and your client don&#8217;t understand what it means then a judge won&#8217;t understand what it means.
</p>
<p>
  <strong>Trade Secrets</strong><br />
  Under the law trade secrets are protected as long as they are secret.  If you come up with something that is a trade secret the very nature of its protection is associated with its confidentiality.  On the other end of this is patents which require you say as much as possible in order to obtain protection.  To mark it as a trade secret it must be marked confidential. Do not let anyone see it who doesn&#8217;t need to see it. If a client has given you something that is a trade secret <em>it should be market as confidential</em>.</p>
<p>
  Some companies will put <em>everything</em> as confidential. Some judges will toss that out as a matter of course.  As a consultant, everything you learn while in the client&#8217;s office should be treated as confidential.  That&#8217;s just good practice.
</p>
<p>
  <strong>Copyright</strong><br />
  If you write the same ten word essay as someone else, both people retain the same copyright. Copyright is the right to stop somebody of copying your work. If you have created something independently from another person then you are not copying.
</p>
<p><strong>Trademark isn&#8217;t there for you. You need to fight to keep it.</strong></p>
<p><strong>If you&#8217;re going to do business, do safe business.  Get business insurance.</strong>  </p>
<p>
  <strong>Merger Clause</strong><br />
  It&#8217;s a little thing at the bottom of the clause. Anything that anybody said prior to executing this contract in oral communications, written, etc, is gone.  If it&#8217;s not in the contract it doesn&#8217;t exist. Basically, if you want something.  Particularly for consultants if there were conversations you had with clients prior to the deal, <em>put them in the contract</em> or they don&#8217;t apply.
</p>
<p>
  <strong>Understand the Client&#8217;s Organization</strong><br />
  If someone is the CIO and they hire you, you generally don&#8217;t have to worry about hiring issues with them.  A CIO would have &quot;apparent authority.&quot; You need to make sure that the person who is signing the contract with you is authorized to sign the contract.  He jokes that in a bank everybody is the vice president.  Don&#8217;t negotiate with someone who is seven levels down in a company.  You may have already given someone your best deal who has no power to execute on it. Understand the layout of the company before you make a decision otherwise you will be spending a lot of time and energy that might not even apply.
</p>
<ul>
<li>
  If you&#8217;re going to make a statement of work they should only have statements specific to the business and scope of the work.  There may be times when you come up with a situation where you have an agreement where you have to change something with a specific deliverable.
</li>
<li>
  SLAs are nothing more than a way of limiting liability in a specific circumstance. Be careful with them. If the SLA doesn&#8217;t meet what you&#8217;re looking for it overrides liability.  Make sure you understand SLAs.
</li>
<li>
  If you need something from the client in order to make something happen put it in the contract.  Outline the client&#8217;s responsibilities.
</li>
<li>It all comes down to this: protect yourself.  See a lawyer and get a contract made.</li>
</ul>
<p>Overall this was one of the most useful talks so far of BizConf.  Jose <em>thoroughly</em> knows his stuff.</p>
<style type="text/css">
.img_right { 
float:right;margin:3px;border: 1px solid #eee;
}
</style>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Live+blogging+BizConf+Day+2+http://bit.ly/L0Ydq" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;t=Live+blogging+BizConf+Day+2" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;t=Live+blogging+BizConf+Day+2" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/20/liveblogging-bizconf' rel='bookmark' title='Permanent Link: Liveblogging Bizconf'>Liveblogging Bizconf</a> <small> I'm lucky to attend BizConf so I thought I'd...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/CRqub3DGnTo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2</feedburner:origLink></item>
		<item>
		<title>Liveblogging Bizconf</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/hBqlOmykWyw/liveblogging-bizconf</link>
		<comments>http://jasonseifer.com/2009/08/20/liveblogging-bizconf#comments</comments>
		<pubDate>Thu, 20 Aug 2009 19:03:10 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=218</guid>
		<description><![CDATA[<p>
<img src="http://jasonseifer.com/assets/2009/08/bizconf.jpg" alt="BizConf Logo" border="0" width="225" height="119" align="right" />
I'm lucky to attend <a href="http://bizconf.org">BizConf</a> so I thought I'd blog about my experience here.  I can't promise to get every presentation here but I'll try my best. This post will be updated as things happen.
</p>


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2' rel='bookmark' title='Permanent Link: Live blogging BizConf Day 2'>Live blogging BizConf Day 2</a> <small> Day 1 of BizConf was phenomenal and I&#8217;m going...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bizconf.org"><img src="http://jasonseifer.com/assets/2009/08/bizconf.jpg" alt="BizConf Logo" border="0" width="225" height="119" align="right" /></a></p>
<p>
I&#8217;m lucky to attend <a href="http://bizconf.org">BizConf</a> so I thought I&#8217;d blog about my experience here.  I can&#8217;t promise to get every presentation here but I&#8217;ll try my best. This post will be updated as things happen.
</p>
<p>Impressions so far: amazing conference.  I&#8217;ve never been to a conference where so many people are having difficulty choosing talks because they all look so interesting and useful.</p>
<ul>
<li><a href="#opening">Opening Keynote</a></li>
<li><a href="#sellvalue">Selling Value For Fun and Profit</a></li>
<li><a href="#no">Learning to say &quot;No&quot;.</a></li>
<li><a href="#bootstrap">Bootstrap Like a Missionary</a></li>
</ul>
<div id="opening"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_170">Welcome Address and Keynote</a></h3>
<h4>Obie Fernandez, Hashrocket</h4>
<p>Be controversial. But if you&#8217;re going to be controversial be prepared to take the abuse.  In that respect, be confident in yourself but not to the point that you seem desperate.  &#8220;He who cares the least wins.&#8221;  This can be a fine tuned art or skill that some have innately and some have to really work on.  Referrals are your lifeblood &#8212; try and get the most values out of referrals as possible.  Obie shows a video where a client talks about what they&#8217;re doing and .  As tech people we&#8217;re used to email and instant messages. But don&#8217;t do that.  If there&#8217;s a phone number in an email, call the person!  Keep a notebook to keeping notes and to-dos.</p>
<p>Lawyers cost a lot of money.  If you run in to a situation where things can be difficult then make sure to negotiate at a time that&#8217;s good for you, and not when you&#8217;re under pressure.  This goes back to not seeming desperate.  Don&#8217;t do fixed bid contracts.  Agile doesn&#8217;t work with fixed bid contracts.  Charge what you are worth.  Budget for both nonpaying clients and internal products.  Use pivotal tracker.</p>
<p>Regarding agile, do it by the book first and don&#8217;t defend it.  Be consistently excellent because perception is reality.  Make sure you make it easy to see.  If the client doesn&#8217;t recognize it then you&#8217;re not doing an excellent job.  This reminds me of a quote by Richard Bandler &#8211; &quot;The meaning of your communication is the response that you get.&quot;</p>
<p>He closes by saying don&#8217;t lose your sense of fun.  Great keynote.  I&#8217;m not sure Obie realized it but he demonstrated nearly everything he spoke on <em>during his actual talk</em>.  This was a very inspiring start to the conference.</p>
<p></p>
<div id="sellvalue"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_189">Selling Value For Fun and Profit</a></h3>
<h4>Randall Thomas, Engineyard</h4>
<p>
I came in a bit late on this.  Adding features to a product actually changes the product. Example: BMW i-drive.
</p>
<p><strong>Simplify the complicated</strong><br />
Simplification is really important and it adds value. 37Signals is a great example here.  Consumers actually face anxiety when they face choices no a product.  Amazon is an example of things that are easy, like Amazon prime.  Randall went from buying 3 or 4 things a year on Amazon to 3 or 4 a month</p>
<p><strong>Educate an audience</strong><br />
As geeks, we like to educate.  A good example of this is having APIs for your apps.  Writing an API educates your audience about your app.
</p>
<p><strong>Preserve existing value</strong><br />
Once you&#8217;ve invested in something you have to preserve the value of it.  He asks how many people have expensive electroincs.  Lots of hands go up.  How many have an alarm?  Not nearly as many hands go up.  Software is similar to this.
</p>
<p><strong>Selling Value</strong><br />
Value is the only thing that&#8217;s ever sold and bought.
</p>
<p><strong>Communicate Value</strong> <br />
If you solved an awesome problem, make sure your clients know about this.  If you solve a problem in 3 hours but don&#8217;t communicate how awesome that is compared to the guy who takes 300 and keeps in constant contact with the client, the client will see more value in the longer one.   We have lots of ways to do this: email, sms IM, skype, etc.  You&#8217;re not delivering value if your client doesn&#8217;t understand it.
</p>
<p><strong>Understanding Value</strong><br />
Your clients need to understand the value you provide.  If they don&#8217;t you&#8217;re not providing that value.
</p>
<p><strong>Getting Paid</strong><br />
Do what&#8217;s valuable for a client.  If you don&#8217;t understand what is valuable for a client you can&#8217;t charge correctly and get paid.  Some people are more interested in how nice you were at a party vs how great of a programmer you are.  This affects how you will get paid.
</p>
<p><strong>Open with Value</strong><br />
Before you start talking about how you are getting paid and what you&#8217;re getting paid, explain the value.  Money is easy to communicate but value is not.  Start with the value.  A great example is <a href="http://newrelic.com">NewRelic</a>.  Engine Yard lets people try it and they often upgrade.
</p>
<p><strong>Show Don&#8217;t Tell</strong><br />
Make value tangible. Agile plays in to this because of collaboration and communication.  Example: saying a bomb can level a city vs showing footage of Nagasaki. When you demonstrate value consistently you preserve your value and get more referrals.
</p>
<p><strong>Price at Value</strong><br />
Not at cost. The value of something is relative.  Focus and price at value. If you&#8217;ve done your homework, you know what the value is.  Make all efforts to preserve that value because if you don&#8217;t it starts a bad precedent.  &quot;Protect the integrity of your fee.&quot;
</p>
<p>Selling on value is based on trust and honesty.  If you can&#8217;t deliver on a promise or slip on a promise this needs to be communicated.  If not your value goes down. When you sell and get paid based on quality, you start focusing on craftsmanship, quality, and the art of it.</p>
<p>This was an great presentation and full of useful information that is applicable to almost everyone.</p>
<p></p>
<h3><a href="http://www.bizconf.org/schedule#talk_178">Fifty Simple Things that Can Improve Your Business</a></h3>
<h4>Jerry Weinberg of geraldmweinberg.com</h4>
<p>
<strong>Three things to look for when developing software:</strong></p>
<p><strong>Motivation</strong></p>
<p>You can teach all you want. If you see an organization with no enthusiasm for what they&#8217;re doing they probably don&#8217;t have enthusiasm for what you&#8217;re offering.</p>
<p><strong>Organization</strong></p>
<p>Learn whether or not people are organized. If an organization doesn&#8217;t care enough to organize, nothing is going to happen.</p>
<p><strong>Information</strong><br />
Information is not really enough.  Strive to find out what&#8217;s really going on and what the real problem is. Example: &quot;We have this software project that has been mishandled. It needs to be done in three weeks or the company goes under.&quot;  In this instance you&#8217;re a scapegoat not an architect.</p>
<p><strong>Figure out the real situation and act in accordance.</strong></p>
<p><strong>Jiggling</strong><br />
Like physical things, organizations can get stuck in a loop.  You give them a jiggle and it helps them get back on track.  At one campus a fire destroyed everything including data.  One year later they were more efficient.  A lot of times when you come in as a consultant you need to jiggle the company.  It may cost you your job but it will be worth it to the company.  If you do it nicely you may get repeat business.  Agile is the opposite of stuck.  A lot of problems aren&#8217;t the model but the organization being stuck in what they&#8217;re doing.</p>
<p><strong>Audience Question: </strong>How can you get stuck in an agile process?<br />
If you think you&#8217;re doing agile and not really, you can get stuck.  If you&#8217;ve spent time and budget not giving someone what they want you run in to problems.  If you have a client that doesn&#8217;t have an idea where they&#8217;re going to end up they may be surprised.  You can deliver a lot of product without delivering value.  You can be agile at the process level but not be agile at all.</p>
<p></p>
<div id="no"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_176"> Learning to Say &#8220;No&#8221;</a></h3>
<h4>Jerry Weinberg of geraldmweinberg.com </h4>
<p>Jerry opens this talk by asking if someone had something they should have said no to but didn&#8217;t. Then the whole audience goes through and analyzes the situation with Jerry as the leader.  He breaks down what was done well and what could have been done better.  By using an actual example and getting the audience involved, we all got value out of this.</p>
<p>Here&#8217;s some things I got out of this presentation:</p>
<ul>
<li>Your bottom line applies to everything.  If you wouldn&#8217;t build something for free it doesn&#8217;t matter what else is offered.</li>
<li>Make the NO clear.  There should be no ambiguities.</li>
<li>Do good business. If you can&#8217;t accommodate something, say no. It will be better than doing it poorly.</li>
<li>Word spreads around. As with the previous point, if you&#8217;re not doing good business people will know.</li>
</ul>
<p>I would have liked to have better notes for this one but it was more of a participatory thing.  Jerry did a thorough job getting his points across in this way.</p>
<p></p>
<div id="bootstrap"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_201">Bootstrap Like a Missionary</a></h3>
<h4>Andrew Warner of Mixergy.com</h4>
<p>Find ways in the door when you&#8217;re not supposed to be in the door.  Find ways to get your message in the door. He gives an example of an ad company who he wanted to sell his ads.  He was too small a company for them but didn&#8217;t give up.  He called every day and they declined.  Every day.  Finally he drove down with a check for $2,000.  They took a chance on him.</p>
<p><strong>Start with garbage as your first product</strong><br />
Build your product in stages. He asked Christian Carter how he builds a product.  The answer was &quot;When I have an idea for a product, I buy an ad on Google and see the click rates.&quot;  We then get a ton of examples from Andrew and the audience and the moral is the same for all of them: I wish I would have launched earlier.  Your audience will shape your product more than you can imagine.  You will have a better product for it.
</p>
<p><strong>Build an audience for yourself.</strong><br />
Some people build their audience by a blog.  Some build their audience by message boards.  Some do it by meetings.  Do what works for you.  We get some more audience participation for this one. <a href="http://alexdc.org">Alex De Carvalho</a> gets up and tells us about Refresh Miami and how he built the community.  As in the case of Threadless, Magento, etc, you generally can&#8217;t buy the great press you get from involving the community and building your audience.
</p>
<p><strong>Get your members to recruit for you.</strong><br />
Viral marketing doesn&#8217;t work anymore.  Hotmail was the originator of this by adding on to everyone&#8217;s email message.  Viral marketing can it <em>or it can&#8217;t</em>.  Some youtube videos get millions of views.  For Andrew, this isn&#8217;t enough to build a business off of.  You don&#8217;t want to build your business on hoping people spread your word.
</p>
<p><strong>Must Marketing</strong><br />
Andrew&#8217;s dad got Skype installed.  His dad wanted a friend to use it so he installed it for his friend.  Some popular restaurants don&#8217;t have tables for one.  You have to get friends to go with you.
</p>
<blockquote>
<p><strong>Rules for Must Marketing</strong></p>
<p><strong>It doesn&#8217;t work alone</strong><br />
You can&#8217;t have must marketing if you can do something alone.  The big risk is that it could fail completely.  That&#8217;s why you put out garbage first and iterate.
</p>
<p><strong>There should be accountability</strong><br />
People should be able to see whether or not you did something.  An example is a Twitter post voting site.  People could see who tweeted to vote for things and who didn&#8217;t.  Then they would ask for people to vote.
</p>
<p><strong>The Recipient Needs To Be Able To Reciporicate</strong><br />
In the virtual gift example, a guy can send his girlfriend virtual flowers.  When she gets them she can send some back.  By converting the recipient in to the sender the loop continues.
</p>
</blockquote>
<p>Andrew has a ton of energy and really gets people involved in his presentation. It&#8217;s no wonder he&#8217;s a successful entrepreneur.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Liveblogging+Bizconf+http://bit.ly/m2rw" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;t=Liveblogging+Bizconf" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;t=Liveblogging+Bizconf" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2' rel='bookmark' title='Permanent Link: Live blogging BizConf Day 2'>Live blogging BizConf Day 2</a> <small> Day 1 of BizConf was phenomenal and I&#8217;m going...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/hBqlOmykWyw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/20/liveblogging-bizconf/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/20/liveblogging-bizconf</feedburner:origLink></item>
		<item>
		<title>Using the Rails logger outside of models and controllers</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/QyTe-YBAE24/using-the-rails-logger-outside-of-models-and-controllers</link>
		<comments>http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers#comments</comments>
		<pubDate>Mon, 10 Aug 2009 16:39:43 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=210</guid>
		<description><![CDATA[
  You can use the Rails logger outside of Rails models in at least version 2.3.X and up of Rails.  You might be used to doing the following in your models or controllers:


logger.info &#34;Some debugging info I want to see in my development log.&#34;

If you make a regular model that doesn&#8217;t inherit from [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>
  You can use the Rails logger outside of Rails models in at least version 2.3.X and up of Rails.  You might be used to doing the following in your models or controllers:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">logger.<span style="color:#9900CC;">info</span> <span style="color:#996600;">&quot;Some debugging info I want to see in my development log.&quot;</span></pre></div></div>

<p>If you make a regular model that doesn&#8217;t inherit from ActiveRecord, though, you may see the following error:</p>
<pre>undefined local variable or method `logger' for #&lt;Class:0x42fd77c&gt;</pre>
</p>
<p>The solution is to call <strong>Rails</strong>.logger.info (or debug, or warn) as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Rails.<span style="color:#9900CC;">logger</span>.<span style="color:#9900CC;">info</span> <span style="color:#996600;">&quot;Some debugging info I want to see in my development log.&quot;</span></pre></div></div>

<p>I hope that helps someone.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Using+the+Rails+logger+outside+of+models+and+controllers+http://bit.ly/dNmok" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;t=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;t=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/QyTe-YBAE24" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers</feedburner:origLink></item>
		<item>
		<title>Getting RSpec and TextMate to play nice</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/5y1hgFCGrq8/getting-rspec-and-textmate-to-play-nice</link>
		<comments>http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice#comments</comments>
		<pubDate>Thu, 06 Aug 2009 04:17:08 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=206</guid>
		<description><![CDATA[

Elijah Miller has a great blog post on getting TextMate and RSpec to play nicely together.  This is pretty useful for just running specific spec files.  Also, did you know you can get TextMate to automatically recognize spec files by naming them with the .spec extension and RSpec will recognize it?

Link
  Delicious [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><span class="outgoing_link_image" style="float:right"><a href="http://jqr.github.com/2009/02/06/textmate-rspec-and-dot-spec-party.html"><img src="http://jasonseifer.com/assets/2009/08/beer_labelsTextMate-Rspec-and-Dot-Spec-Party-__-Elijah-Miller-Build-20090805031252.jpg" alt="TextMate, Rspec and Dot Spec Party __ Elijah Miller - (Build 20090805031252).jpg" border="0" width="355" height="308" align="right" /><br />
</a></span></p>
<p>Elijah Miller has a great blog post on getting TextMate and RSpec to play nicely together.  This is pretty useful for just running specific spec files.  Also, did you know you can get TextMate to automatically recognize spec files by naming them with the .spec extension and RSpec will recognize it?<br />
<br />
<span class="outgoing_link"><a href="http://jqr.github.com/2009/02/06/textmate-rspec-and-dot-spec-party.html">Link</a></span></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Getting+RSpec+and+TextMate+to+play+nice+http://bit.ly/30duUc" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;t=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;t=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/5y1hgFCGrq8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice</feedburner:origLink></item>
		<item>
		<title>Microsoft deems Ruby on Rails a competitor</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/y5tc128_21c/microsoft-deems-ruby-on-rails-a-competitor</link>
		<comments>http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor#comments</comments>
		<pubDate>Wed, 05 Aug 2009 21:47:17 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor</guid>
		<description><![CDATA[

Numerous commercial  software vendors offer competing software applications for connectivity (both Internet and intranet), security, hosting, and e-business servers. System Center competes with server management and server virtualization platform providers, such as BMC,  CA, Inc., Hewlett-Packard, IBM, and VMWare in the management of information technology infrastructures. Forefront security products compete with McAfee, Symantec, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="posterous_bookmarklet_entry">
<blockquote class="posterous_long_quote">
<p align="justify" style="margin-top: 0px; margin-bottom: 0px; text-indent: 2%;">Numerous commercial  software vendors offer competing software applications for connectivity (both Internet and intranet), security, hosting, and e-business servers. System Center competes with server management and server virtualization platform providers, such as BMC,  CA, Inc., Hewlett-Packard, IBM, and VMWare in the management of information technology infrastructures. Forefront security products compete with McAfee, Symantec, and Trend Micro in protecting both client and server applications. Our products for  software developers compete against offerings from Adobe, Borland, IBM, Oracle, Sun Microsystems, other companies, and open-source projects. Open source projects include Eclipse (sponsored by CA, IBM, Oracle, and SAP), PHP, and <strong>Ruby on Rails</strong>, among  others. We believe that our server products provide customers with advantages in innovation, performance, total costs of ownership, and productivity by delivering superior applications, development tools, and compatibility with a broad base of  hardware and software applications, security, and manageability. </p>
<p align="justify" style="margin-top: 12px; margin-bottom: 0px;">
</blockquote>
<div class="posterous_quote_citation">via <a href="http://www.sec.gov/Archives/edgar/data/789019/000119312509158735/d10k.htm">sec.gov</a></div>
<p>Emphasis mine.</p>
</div>
<p style="font-size: 10px;">  <a href="http://posterous.com">Posted via web</a>   from <a href="http://jasonseifer.posterous.com/microsoft-deems-ruby-on-rails-a-competitor">Jason&#8217;s posterous</a>  </p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Microsoft+deems+Ruby+on+Rails+a+competitor+http://bit.ly/PtRvj" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;t=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;t=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/y5tc128_21c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor</feedburner:origLink></item>
		<item>
		<title>Receiving Email with Rails</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/nzTeygGC9CM/receving-email-with-rails</link>
		<comments>http://jasonseifer.com/2009/04/24/receving-email-with-rails#comments</comments>
		<pubDate>Fri, 24 Apr 2009 04:58:28 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=186</guid>
		<description><![CDATA[This article originally appeared in the first issue of Rails Magazine.  It is reproduced here not quite verbatim with a couple of corrections and additions.

Photo from esparta on Flickr.

Introduction
Receiving email is a great way to add functionality to your application.  This is one area, though, that is not very well documented with Rails. [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><em>This article originally appeared in the first issue of <a href="http://railsmagazine.com">Rails Magazine</a>.  It is reproduced here not quite verbatim with a couple of corrections and additions.</em></p>
<div style="float:right; text-align:center; margin: 8px; padding: 3px; border: 1px solid #aaa"><img src="http://jasonseifer.com/assets/2009/04/423aefd3-8e36-43a1-b054-c16f860cf0fe.jpg" alt="423AEFD3-8E36-43A1-B054-C16F860CF0FE.jpg" border="0" width="240" height="160" align="right" /></p>
<p class="small">Photo from <a href="http://www.flickr.com/photos/esparta/1609874001/">esparta</a> on Flickr.</p>
</div>
<h2>Introduction</h2>
<p>Receiving email is a great way to add functionality to your application.  This is one area, though, that is not very well documented with Rails.  Sure, we have ActionMailer documentation, but how does something like this actually work in a production environment and what are the concerns?  I had to tackle this problem recently and no solution that was &#8220;in the wild&#8221; would work with the requirements I had for this application.  In this article, we will take a look at a couple of options and go in to detail with one method that has not recieved much coverage.</p>
<p>John Nunemaker, on the Rails Tips blog, posted a solution to this problem using GMail with IMAP to Receive Email in Rails<sup><a href="#railstips">(1)</a></sup>.  He uses a script to connect to an IMAP server every minute or so and polls for new e-mails.  The Rails environment is loaded and if there are new messages waiting, this is processed using an ActiveRecord model.  He uses the &#8216;Daemons&#8217; library to keep the script running and give it start/stop commands and keep a pidfile.</p>
<p>This is a perfectly valid and functional way to process e-mail.  The application I was working on, though, had to be able to handle and process e-mail in as little time as possible. People would likely be e-mailing things from their mobile phones and might want to check on them soon after an upload.  At that point, polling every X number of minutes wasn&#8217;t a viable solution, so I had to come up with something else.</p>
<p>It&#8217;s also worth noting that polling for email should take in to account your user base and size.  Let&#8217;s say that we have an app with 10,000 active users.  Let&#8217;s also say that during peak times, they <em>all</em> decide to email our application.  Finally, we&#8217;ll say that they are sending an average 5 emails apiece.  With these hypothetical numbers, this works out to about 833 emails per minute.  If your IMAP server is being polled every three minutes, that&#8217;s going to leave you about 3,332 e-mails to download and process each time.</p>
<h2>Configuring Your Email Server</h2>
<p>Email itself is a problem that has been largely solved.  There are a wealth of email servers available but  this article will take a look at Postfix.  Postfix is most easily installed using the package manager of your distribution and may already be installed if you have a VPS.  I prefer Ubuntu server side so this article will focus on that flavor. Just be aware that certain configuration file locations may vary depending on your distribution.  So let&#8217;s get started.</p>
<p>First we need to add or change some DNS records.  The instructions for how to do this will vary depending on how you have your DNS hosted. I personally use DNS Made Easy and recommend it to my clients as well, should they need DNS hosting. DNS Made Easy has very reasonable rates and quotas.  Regardless of your host you need to create the following records:</p>
<p><img src="http://jasonseifer.com/assets/2009/04/mxrecord.jpg" alt="mxrecord.t.jpg" border="0" width="636" height="332" align="right" /></p>
<ul>
<li>An &#8220;A&#8221; record that has your domain name only.</li>
<li>An &#8220;A&#8221; record that is just <code>"mail"</code>.</li>
<li>An &#8220;MX&#8221; record that is set to level 10 and points to &#8220;mail&#8221;</li>
<li>Optional: An SPF Record</li>
</ul>
<p>OK, I was lying.  The SPF record isn&#8217;t really optional. This is going to be a TXT Record and should read something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">	<span style="color: #007800;">v</span>=spf1 mx <span style="color: #660033;">-all</span></pre></div></div>

<p>There are several different variations you can use with SPF records but going through them would be beyond the scope of this article.  Do some research and pick the combination that&#8217;s right for your setup.</p>
<p>Now, the first thing that you&#8217;re going to need to do is figure out what address you want to receive mail as. This is going to be your catch-all address.  In this case we&#8217;re going to choose &quot;killerrobot&quot; because that just might keep spammers at bay<sup><a href="#spammers">(2)</a></sup>. I mean, who&#8217;s going to spam a killer robot? </p>
<p>Reading tutorials around the web or even looking in some books will tell you that you can tell postfix to forward mail simply by piping it in /etc/aliases.  You might be tempted to do something like pipe everything to a ruby script:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/aliases</span>
...
killerrobot: <span style="color: #ff0000;">&quot;|/usr/bin/ruby /var/www/apps/myapp/current/lib/mail_receiver.rb&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span>: killerrobot</pre></div></div>

<p>This, unfortunately, won&#8217;t work.  If you do it this way, all of your scripts are going to run as root.  This is not what you want and can be a security concern.  The proper way to do this is with a postmap filter.  Open up /etc/postfix/master.cf.  The first line after all of the comments should look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/postfix/master.cf</span>
smtp      inet  n       -       -       -       -       smtpd</pre></div></div>

<p>Add a line right below that to tell postfix that you&#8217;re using a filter:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/postfix/master.cf</span>
smtp      inet  n       -       -       -       -       smtpd
 <span style="color: #660033;">-o</span> <span style="color: #007800;">content_filter</span>=myapp_filter:</pre></div></div>

<p>Then go all the way down to the bottom of the file and add your filter:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/postfix/master.cf </span>
smtp      inet  n       -       -       -       -       smtpd
 <span style="color: #660033;">-o</span> <span style="color: #007800;">content_filter</span>=myapp_filter:
...
myapp_filter unix -     n       n       -       -       pipe
 <span style="color: #007800;">flags</span>=Xhq <span style="color: #007800;">user</span>=deploy <span style="color: #007800;">argv</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ruby <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>apps<span style="color: #000000; font-weight: bold;">/</span>myapp<span style="color: #000000; font-weight: bold;">/</span>current<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mail_receiver.rb</pre></div></div>

<p>The &#8220;X&#8221; parameter in &#8220;flags=Xhq&#8221; tells postfix that an external command performs final delivery.  This is going to change the message status from &#8220;relayed&#8221; to &#8220;delivered&#8221;.  The &#8220;h&#8221; flag sets the recipients and domains to lowercase, and the &#8220;q&#8221; flag quotes whitespace and other special characters.  Now, reload postfix by doing <code>sudo postfix reload</code>. At this point, you should have a very basic mail server configured to receive email and put it in to a <code>mail_receiver.rb</code> script.</p>
<h2>Handling The Email</h2>
<p>	We&#8217;re going to be putting all of our mail that comes in to a message queue and parsing it with the &#8216;mms2r&#8217; gem.  In this article I&#8217;m going to use beanstalkd<sup><a href="#beanstalkd">(3)</a></sup> but you could substitute your favorite message queue for this part of the architecture.  I&#8217;m going to assume that a message queue is already installed and running and that you have both the &#8216;tmail&#8217; and &#8216;mms2r&#8217; gems installed.</p>
<p>	We want our <code>mail_receiver</code> script to be super lean.  It&#8217;s only going to serve one function: put the incoming mail in to a queue.  We&#8217;ll process the queue later but for now we just want to get it in there and handle any attachments.  We want it to be super lean because if we&#8217;re receiving a lot of mail we don&#8217;t want this script to be memory intensive or take a long time to start up or run.  It will look something like this:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'tmail'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mms2r'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'beanstalk-client'</span>
&nbsp;
message = <span style="color:#ff6633; font-weight:bold;">$stdin</span>.<span style="color:#9900CC;">read</span>
mail = <span style="color:#6666ff; font-weight:bold;">TMail::Mail</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
mms = <span style="color:#6666ff; font-weight:bold;">MMS2R::Media</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>mail<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> !mail.<span style="color:#9900CC;">to</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?
  BEANSTALK = <span style="color:#6666ff; font-weight:bold;">Beanstalk::Pool</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'127.0.0.1:11300'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  BEANSTALK.<span style="color:#9900CC;">yput</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>:type <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'received_email'</span>, 
    <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> mail.<span style="color:#9900CC;">to</span>.<span style="color:#9900CC;">flatten</span>.<span style="color:#9900CC;">first</span>.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'@mydomain.com'</span>, <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>, 
    <span style="color:#ff3333; font-weight:bold;">:tags</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> mail.<span style="color:#9900CC;">subject</span>, 
    <span style="color:#ff3333; font-weight:bold;">:attachment</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> mms.<span style="color:#9900CC;">default_media</span>.<span style="color:#9900CC;">path</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>What we&#8217;re doing here is taking the email message from standard input and parsing it by putting it in to a TMail object.  TMail is a great library that takes care of most of the formatting for us.  It lets us do things like refer to mail messages as objects and use <code>mail.to</code>, <code>mail.from</code>, etc.  If we have attachments, they&#8217;re going along as well.</p>
<p>MMS2R is an amazing piece of software.  It works for both emails and, as the name implies, MMS messages as well.  What makes it so amazing?  There are dozens of different formats that an attachment can come in from both email and MMS.  Different phone carriers each have their own way of doing MMS attachments, each of them slightly different.  MMS2R alleviates the problem of trying to parse all of these different formats and does it all for you.  In this way we can call <code>MMS2R::Media.new(mail)</code> and be done with it.</p>
<p>For the purposes of our example application, the user can tag the photos they upload by putting the different tags in the subject. We send that in as another option in the job hash for beanstalkd.  Each user is assigned a unique identifier in their account that lets them send email to the application, for example &#8220;aslkdf32@myapp.com&#8221;.  We grab the first recipient (mail.to) because that will come in as an array.  We take the domain out and send that in as the &#8220;to&#8221; field.  Finally, the temporary media location on disk that we parsed using MMS2R is thrown in to the queue as the :attachment option.  Our mail is in the queue.</p>
<h2>Processing the Queue</h2>
<p>Now that we have our email in the queue, we need to get it out. For this part, we&#8217;re actually going to load the Rails environment.  I have this in the <code>lib</code> directory.  The code would look something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'..'</span>, <span style="color:#996600;">'config'</span>, <span style="color:#996600;">'environment'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'beanstalk-client'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'yaml'</span>
beanstalk_config = <span style="color:#CC00FF; font-weight:bold;">YAML</span>::<span style="color:#CC0066; font-weight:bold;">load</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{RAILS_ROOT}/config/beanstalk.yml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#0066ff; font-weight:bold;">@logger</span> = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{RAILS_ROOT}/log/queue.#{Rails.env}.log&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">level</span> = <span style="color:#6666ff; font-weight:bold;">Logger::INFO</span>
&nbsp;
BEANSTALK = <span style="color:#6666ff; font-weight:bold;">Beanstalk::Pool</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>beanstalk_config<span style="color:#006600; font-weight:bold;">&#91;</span>Rails.<span style="color:#9900CC;">env</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">loop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  job = BEANSTALK.<span style="color:#9900CC;">reserve</span>
  job_hash = job.<span style="color:#9900CC;">ybody</span>
  <span style="color:#9966CC; font-weight:bold;">case</span> job_hash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:type</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">'received_email'</span>
    <span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">info</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Got email: #{job_hash.inspect}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> EmailProcessor.<span style="color:#9900CC;">process</span><span style="color:#006600; font-weight:bold;">&#40;</span>job_hash<span style="color:#006600; font-weight:bold;">&#41;</span>
      job.<span style="color:#9900CC;">delete</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">warn</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Did not process email: #{job_hash.inspect}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      job.<span style="color:#9900CC;">bury</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">else</span>
    <span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">warn</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Don't know how to process #{job_hash.inspect}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>The first line loads the Rails environment so we have access to all of our ActiveRecord models.  We want to keep our code DRY and use only one method of processing an attachment, routing messages, or the like.  If we were using attachment_fu or paperclip, we would keep this code in the model.  You might even want to make a seprate class, such a presenter, for your logic.  In this case the EmailProcessor class finds the user based on the reception_email attribute and then executes the &#8220;do_stuff&#8221; method to process the message.  It would look something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'local_file'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'tmail'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mms2r'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> EmailProcessor
  attr_accessor <span style="color:#ff3333; font-weight:bold;">:user</span>, <span style="color:#ff3333; font-weight:bold;">:options</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">process</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>args<span style="color:#006600; font-weight:bold;">&#41;</span>
    email_processor = new<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>args<span style="color:#006600; font-weight:bold;">&#41;</span>
    email_processor.<span style="color:#9900CC;">do_stuff</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> find_user
    <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:reception_email <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@options</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:to</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> do_stuff
		<span style="color:#008000; font-style:italic;"># Your actual logic would go here...</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>args<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@options</span> = args.<span style="color:#9900CC;">extract_options</span>!
    find_user
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This uses the LocalFile class from Ben Rubenstein<sup><a href="#localfile">(4)</a></sup></p>
<p>We&#8217;re not quite done yet.  We need to make the <code>mail_processor</code> run as a daemon instead of just running &#8220;ruby mail_processor.rb&#8221; when we want to launch it.  We&#8217;ll use the &#8216;daemons&#8217; library for that.  This will take care of setting up PID files and lets us do <code>ruby mail_processor_control.rb start</code> and <code>ruby mail_processor_control.rb stop</code>.  We&#8217;re also using the &#8220;daemons_extension&#8221; file from Rapleaf that actually gives feedback on stopping of the daemon.  The script itself is extremely simple and goes in the <code>lib</code> directory with your <code>mail_processor.rb</code> script: </p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'daemons'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'daemons_extension'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'RAILS_ENV'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span>= <span style="color:#996600;">'development'</span>
&nbsp;
options = <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#ff3333; font-weight:bold;">:app_name</span>  <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'processor'</span>,
  <span style="color:#ff3333; font-weight:bold;">:dir_mode</span>  <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:script</span>,
  <span style="color:#ff3333; font-weight:bold;">:dir</span>       <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'../log'</span>,
  <span style="color:#ff3333; font-weight:bold;">:backtrace</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
  <span style="color:#ff3333; font-weight:bold;">:mode</span>      <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:load</span>,
  <span style="color:#ff3333; font-weight:bold;">:monitor</span>   <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
Daemons.<span style="color:#9900CC;">run</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'processor.rb'</span><span style="color:#006600; font-weight:bold;">&#41;</span>, options<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Now just start it by doing &#8220;<code>ruby mail_processor_control.rb start" </code>and your daemon will be up and running. That&#8217;s it! You&#8217;re receiving e-mail to your Rails app.  It is very important that you load the rails environment in your worker and not the daemon controller.  The controller only manages the worker, therefore it won&#8217;t have access to the Rails environment and will error out.</p>
<h2>Considerations</h2>
<p>Depending on your configuration, you may want to use a different message queue than beanstalkd.  I&#8217;ve personally  found beanstalkd to be reliable but your architecture might call for something else.  For example, you may want to put your message queue on another server.  If you did this then you wouldn&#8217;t have access to the temporary storage that MMS2R defaults to for saving the attachments.  In that case you could use a queue and put the attachments directly in the queue, on s3, etc.</p>
<p>Some people have reported problems using the daemons library and having their daemon just halt and stop responding.  I&#8217;ve never encountered that and I&#8217;ve had this similar setup running for months. You will also want to put your <code>mail_processor_control</code> under some sort of process supervision, such as by monit or god.</p>
<p>You may be asking yourself why we didn&#8217;t use ActionMailer to handle the incoming emails since it does that?  The answer is that if you do it the way it&#8217;s described, for example, on the Rails wiki, it will spin up a new Rails process for <em>each</em> email that&#8217;s received.  Under any significant load, this will fail<sup><a href="#railscantscale">(5)</a></sup>.  Another drawback to that approach is that if there is a failure, you lose the email.  With this type of architecture, it remains in the queue and you can just process it later.</p>
<h2>Conclusion</h2>
<p>This is a good start to handling email in your application.  Being able to process email is a great way to enhance your app and give your users mobile access. With email-capable phones becoming ubiquitous, they no longer need to be tied to a computer to use your app. Remember, an app that can be used anywhere is an app that will be used anywhere.</p>
<h3>Citations</h3>
<ol>
<li id="railstips"><a href="http://railstips.org/2008/10/27/using-gmail-with-imap-to-receive-email-in-rails">http://railstips.org/2008/10/27/using-gmail-with-imap-to-receive-email-in-rails</a></li>
<li id="stopspammers">No it won&#8217;t.</li>
<li id="beanstalkd"><a href="http://xph.us/software/beanstalkd/">http://xph.us/software/beanstalkd/</a></li>
<li id="localfile"><a href="http://www.benr75.com/articles/2008/01/04/attachment_fu-now-with-local-file-fu">http://www.benr75.com/articles/2008/01/04/attachment_fu-now-with-local-file-fu</a></li>
<li id="railscantscale">Because rails can&#8217;t scale.  See <a href="http://canrailsscale.com">http://canrailsscale.com</a> for more information.</li>
</ol>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Receiving+Email+with+Rails+http://bit.ly/nFC0N" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;t=Receiving+Email+with+Rails" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;t=Receiving+Email+with+Rails" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/nzTeygGC9CM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/04/24/receving-email-with-rails/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/04/24/receving-email-with-rails</feedburner:origLink></item>
		<item>
		<title>32 Rack Resources to Get You Started</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/xpvxHi1WP2Y/32-rack-resources-to-get-you-started</link>
		<comments>http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started#comments</comments>
		<pubDate>Wed, 08 Apr 2009 02:47:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=174</guid>
		<description><![CDATA[
Rack

What the heck is Rack and why is it getting so much press lately? Well, from it&#8217;s tag-line: &#8220;Rack provides an minimal interface between webservers supporting Ruby and Ruby frameworks.&#8221;

But what does that mean?  Prior to Rack if you wanted to interface with Mongrel or Thin you had to write your own custom wrapper [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://jasonseifer.com/assets/2009/04/257dcd94-fdec-4a09-b58f-afd97e3f8d3b.jpg" alt="257DCD94-FDEC-4A09-B58F-AFD97E3F8D3B.jpg" border="0" width="400" height="200" align="right" /></p>
<h2>Rack</h2>
<p>
What the heck is Rack and why is it getting so much press lately? Well, from it&#8217;s tag-line: &#8220;Rack provides an minimal interface between webservers supporting Ruby and Ruby frameworks.&#8221;
</p>
<p>But what does that mean?  Prior to Rack if you wanted to interface with Mongrel or Thin you had to write your own custom wrapper for talking to that web server.  Rack standardized the interface for doing that and even added some icing on the cake.</p>
<h3>Resources</h3>
<p></p>
<ul>
<li><a href="http://rack.rubyforge.org/">Rack Homepage</a> &#8211; This is the official Rack home page. There&#8217;s a mirror on <a href="http://rack.github.com">GitHub</a> as well.</li>
<li><a href="http://github.com/rack/rack/tree/master">Rack on GitHub</a> &#8211; This is the official Rack source repository.</li>
<li><a href="http://github.com/rack/rack-contrib/tree/master">Rack-Contrib</a> &#8211; This is the repository for rack middleware and different rack utilities.  It&#8217;s a great starting point for examples.</li>
<li><a href="http://groups.google.com/group/rack-devel">Rack-development</a> &#8211; The official Rack Google Group.  It&#8217;s a great place to ask questions or get help with Rack related troubles.</li>
<li><a href="http://github.com/brynary/rack-test/tree/master">Rack::Test</a> and its <a href="http://gitrdoc.com/brynary/rack-test/tree/master">RDoc</a>.  Much like Rack is a standard interface for talking to web servers, Rack::Test is a standard interface for testing Rack apps.</li>
</ul>
<h3>Tutorials and Links</h3>
<p></p>
<ul>
<li><a href="http://chneukirchen.org/blog/archive/2007/02/introducing-rack.html">Introducing Rack</a> by Christian Neukirchen.  Christian is the author rack and this is the introductory blog post about it.</li>
<li><a href="http://amberbit.com/blog/2009/04/04/introduction-to-rack-middleware/">Introduction to Rack Middleware</a> &#8211; This tutorial goes through what Rack middleware is and gives an example of writing an ascii shrimp middleware in your application.</li>
<li><a href="http://www.decodeuri.com/2008/10/15/creating-a-rack-middleware-for-minifying-your-javascript-files/">Creating a Rack middleware for minifying your javascript files</a> &#8211; This post by Luciano Panaro is less of a tutorial than a full fledged middleware with explanation but it is a solid example to learn from.</li>
<li><a href="http://www.hokstad.com/rack-middleware-adding-cache-headers.html">Adding cache headers</a> by Vidar Hokstad is another example of creating a middleware for a specific purpose.</a></li>
<li><a href="http://asciicasts.com/episodes/151-rack-middleware">Rack middleware asciicast</a> the same version of the RailsCast below but in text form.</li>
<li><a href="http://vision-media.ca/resources/ruby/ruby-rack-middleware-tutorial">Ruby Rack Middleware Tutorial</a> &#8211; This tutorial goes over the call chain and gives a real world example.</li>
<li><a href="http://thewebfellas.com/blog/2008/12/22/flash-uploaders-rails-cookie-based-sessions-and-csrf-rack-middleware-to-the-rescue">Flash uploaders, Rails, cookie based sessions and CSRF: Rack Middleware to the rescue!</a> &#8211; This is one of the better tutorials out there because it starts with a real world problem and demonstrates how to solve it.</li>
<li><a href="http://www.pathf.com/blogs/2009/02/its-only-rack-on-rails-but-i-like-it/">It’s Only Rack on Rails But I Like It</a> &#8211; Noel Rappin goes through and gives a brief introduction to Rack, why it&#8217;s good for Rails, and how to use it from a Rails app.</li>
<li><a href="http://snippets.aktagon.com/snippets/302-How-to-setup-and-use-Rack-Cache-with-Rails-2-3-0-RC-1">How to setup and use Rack::Cache with Rails 2.3</a> &#8211; The title is pretty self explanatory.</li>
<li><a href="http://www.brynary.com/2009/3/5/rack-test-released-a-simple-testing-api-for-rack-based-frameworks-and-apps">Rack::Test tutorial</a> &#8211; Simply test any Rack-compatible app.</li>
<li><a href="http://soylentfoo.jnewland.com/articles/2008/12/16/rails-metal-a-micro-framework-with-the-power-of-rails-m">Rails Metal introduction</a> is an awesome introduction to Rails Metal by Jesse Newland.</li>
<li><a href="http://opensoul.org/2009/3/3/plugging-rack-into-rails">Plugging Rack into Rails</a> &#8211; Another rack/rails tutorial.</li>
<li><a href="http://wiki.github.com/rack/rack/tutorial-rackup-howto">How to Rackup</a> &#8211; This is from the official Rack wiki and explains what Rackup files are and hwo to use them.</li>
</ul>
<h3>Screencasts, Videos, and Presentations</h3>
<p></p>
<ul>
<li><a href="http://wiki.github.com/rack/rack/presentations">Rack presentations</a> on the Rack GitHub wiki.</a></li>
<li><a href="http://mwrc2009.confreaks.com/13-mar-2009-11-05-in-a-world-of-middleware-who-needs-monolithic-applications-jon-crosby.html">Jon Crosby&#8217;s MountainWest Ruby Conf presentaiton</a> &#8211; In a world of middleware, who needs monolithic applications?
<li><a href="http://railscasts.com/episodes/151-rack-middleware">Rack middleware RailsCast</a> &#8211; Ryan Bates usual high quality screencasts on how to create a Rack Middleware</li>
<li><a href="http://railscasts.com/episodes/150-rails-metal">Rails Metal RailsCast</a> &#8211; An introduction to creating Rails Metal apps by Ryan Bates
<li><a href="http://remi.org/2009/02/19/rack-basics.html">Rack basics</a> &#8211; Remi goes in to the very basics of Rack.</li>
<li><a href="http://remi.org/2009/02/24/rack-part-2.html">Rack part 2</a> &#8211; Going over rackup files, creating an executable rack application, using middleware, reloading</a></li>
<li><a href="http://remi.org/2009/02/28/rack-part-3-middleware.html">Rack Middleware</a> &#8211; What it is, how to write your own, using it in Sinatra and Rails</li>
</li>
<li><a href="http://www.techscreencast.com/web-development/ruby-on-rails/rack-middleware/1540">Another Rack middleware screencast</a></li>
</ul>
<h3>Middleware</h3>
<p></p>
<ul>
<li><a href="http://wiki.github.com/rack/rack/list-of-middleware">List of Rack Middleware</a> on the Rack wiki</a>.</li>
<li><a href="http://tomayko.com/src/rack-cache/">Rack-Cache</a> &#8211; HTTP reverse proxy cache (<a href="http://groups.google.com/group/rack-cache/topics">Google Group</a>).    If you want to explore using HTTP caching to its fullest check out this link.  It has a few links that explain HTTP caching as well.</li>
<li><a href="http://github.com/peburrows/rack-contrib/blob/fea3d5b2c23cc5f9337555df9133da3c453fb23f/lib/rack/contrib/cssvariables.rb">CSS Variables</a> and a <a href="http://blog.philburrows.com/articles/2009/03/18/css-variables-with-rack-middleware/">tutorial</a> for using it.</li>
<li><a href="http://github.com/atmos/hancock-client/tree/master">Hancock-client</a> is a sinatra app and rack middleware piece for the hancock SSO server.</li>
</ul>
<h3>Documentation</h3>
<p></p>
<ul>
<li><a href="http://guides.rubyonrails.org/rails_on_rack.html ">Rails on Rack</a> gives you Rails and Rack specific information.  This was suggested by Hubert Lepicki in the comments.</li>
<li><a href="http://rack.rubyforge.org/doc/">Rack Documentation (RDOC)</a></li>
<li><a href="http://rack.rubyforge.org/doc/files/SPEC.html">Rack Specification</a></li>
</ul>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=32+Rack+Resources+to+Get+You+Started+http://bit.ly/a56Zt" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;t=32+Rack+Resources+to+Get+You+Started" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;t=32+Rack+Resources+to+Get+You+Started" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/xpvxHi1WP2Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started</feedburner:origLink></item>
		<item>
		<title>Rails metal call order</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/ztffW-d1q6w/rails-metal-call-order</link>
		<comments>http://jasonseifer.com/2009/04/08/rails-metal-call-order#comments</comments>
		<pubDate>Wed, 08 Apr 2009 02:45:01 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[metal]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=172</guid>
		<description><![CDATA[I was really mystified today trying to figure out how to bump up the response in Rails metal.  The default metal generator generates something that looks like the following:


I had mistakenly changed it to 500 and didn&#8217;t realize why the app completely broke. It turns out that Rails itself uses a 404 code in [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I was really mystified today trying to figure out how to bump up the response in Rails metal.  The default metal generator generates something that looks like the following:
</p>
<p><script src="http://gist.github.com/91599.js"></script></p>
<p>I had mistakenly changed it to 500 and didn&#8217;t realize why the app completely broke. It turns out that Rails itself uses a 404 code in the metal response to go up the call chain to the next metal:</p>
<p><script src="http://gist.github.com/91597.js"></script></p>
<p>So if you want to return from the metal, just send back a 404.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Rails+metal+call+order+http://bit.ly/2RTXEl" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;t=Rails+metal+call+order" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;t=Rails+metal+call+order" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/ztffW-d1q6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/04/08/rails-metal-call-order/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/04/08/rails-metal-call-order</feedburner:origLink></item>
		<item>
		<title>Passenger 2.1.1 and Local Production Environment</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/nBNlIbIcMcY/passenger-2-1-1-beta-production-env</link>
		<comments>http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env#comments</comments>
		<pubDate>Wed, 04 Mar 2009 13:03:26 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[passenger]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=163</guid>
		<description><![CDATA[If you're on the passenger 2.1.1 beta and having problems locally with getting your rails apps to not be in the production environment, read on.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re on the <a href="http://blog.phusion.nl/2009/03/01/phusion-passenger-211-beta-released-thanks-sponsors/">Passenger 2.1.1 beta</a> and can&#8217;t figure out why your rails app is going in to the production mode, it&#8217;s because it sets the RackEnv environment variable production instead of the RailsEnv variable.  This is fine on rails 2.3+ apps because they are based on Rack but if you have a rails 2.2.2 app or below, you&#8217;ll need the following in your apps passenger site config:</p>
<pre>

&lt;VirtualHost*:80&gt;
  ServerName myserver.local
  DocumentRoot "/myapp/public"
  RackEnv development
  RailsEnv development
  &lt;directory "/myapp/public"&gt;
    Order allow,deny
    Allow from all
  &lt;/directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p></p>
<p><strong>Update:</strong> I thought I should add, based on Hongli Lai&#8217;s response in the comments, that this is with me using the passenger preference pane in Leopard.  That might be the culprit.  Is anyone else seeing this problem?  Let me know in the comments.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Passenger+2.1.1+and+Local+Production+Environment+http://bit.ly/agVnV" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;t=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;t=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/nBNlIbIcMcY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env</feedburner:origLink></item>
		<item>
		<title>Ruby Hash Trickery</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/A-R5gn9pi9I/ruby-hash-trickery</link>
		<comments>http://jasonseifer.com/2009/03/03/ruby-hash-trickery#comments</comments>
		<pubDate>Tue, 03 Mar 2009 20:10:46 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[paste]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=159</guid>
		<description><![CDATA[Ilya Grigorick put up a pretty cool pastie showing a neat hack to make Ruby hashes raise errors with invalid keys:

  Delicious  Digg This Post  Facebook  Reddit This Post

No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://igvita.com">Ilya Grigorick</a> put up a pretty cool <a href="http://pastie.org/406312">pastie</a> showing a neat hack to make Ruby hashes raise errors with invalid keys:<br />
<script src='http://pastie.org/406312.js'></script></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Ruby+Hash+Trickery+http://bit.ly/RDZuU" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;t=Ruby+Hash+Trickery" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;t=Ruby+Hash+Trickery" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/A-R5gn9pi9I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/03/03/ruby-hash-trickery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/03/03/ruby-hash-trickery</feedburner:origLink></item>
		<item>
		<title>Rails Magazine Issue 1</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/E-a7wgh4t_w/rails-magazine-issue-1</link>
		<comments>http://jasonseifer.com/2009/03/01/rails-magazine-issue-1#comments</comments>
		<pubDate>Sun, 01 Mar 2009 03:43:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=157</guid>
		<description><![CDATA[The first issue of Rails Magazine is out!  I&#8217;m super excited because I&#8217;ve got an article in there on receiving email with Rails.  Go check it out.  I can reproduce the article here after the publication has been out for 30 days so stay tuned for that.
  Delicious  Digg This [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://railsmagazine.com/issues/1"><img src="http://jasonseifer.com/assets/2009/03/skitched-20090228-223944.jpg" alt="skitched-20090228-223944.jpg" border="0" width="233" height="128" align="right" /></a>The first issue of Rails Magazine is out!  I&#8217;m super excited because I&#8217;ve got an article in there on receiving email with Rails.  Go <a href="http://railsmagazine.com/issues/1">check it out</a>.  I can reproduce the article here after the publication has been out for 30 days so stay tuned for that.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Rails+Magazine+Issue+1+http://bit.ly/BVSfs" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;t=Rails+Magazine+Issue+1" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;t=Rails+Magazine+Issue+1" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/E-a7wgh4t_w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/03/01/rails-magazine-issue-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/03/01/rails-magazine-issue-1</feedburner:origLink></item>
		<item>
		<title>Ruby Interpreter Comparison</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/TIOr5ekHqjg/ruby-interpreter-comparison</link>
		<comments>http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison#comments</comments>
		<pubDate>Sat, 28 Feb 2009 00:41:23 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=150</guid>
		<description><![CDATA[I did a talk at QCon a while back on the different Ruby Virtual Machines.  You can check out the presentation the InfoQ web site: Ruby VMs: A Comparison.
  Delicious  Digg This Post  Facebook  Reddit This Post

No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.infoq.com/presentations/seifer-ruby-vm-comparison"><img src="http://jasonseifer.com/assets/2009/02/infoq-ruby-vms-a-comparison-1.jpg" alt="InfoQ_ Ruby VMs_ A Comparison-1.jpg" border="0" width="331" height="343"  style="float:right; margin: 6px" /></a>I did a talk at QCon a while back on the different Ruby Virtual Machines.  You can check out the presentation the InfoQ web site: <a href="http://www.infoq.com/presentations/seifer-ruby-vm-comparison">Ruby VMs: A Comparison</a>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Ruby+Interpreter+Comparison+http://bit.ly/XF57Q" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;t=Ruby+Interpreter+Comparison" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;t=Ruby+Interpreter+Comparison" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/TIOr5ekHqjg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison</feedburner:origLink></item>
		<item>
		<title>Offline Gem Server RDocs</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/NuIRCCguuLU/offline-gem-server-rdocs</link>
		<comments>http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs#comments</comments>
		<pubDate>Sun, 22 Feb 2009 07:17:55 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=129</guid>
		<description><![CDATA[
 ol li { margin: 15px 0 10px 0 }


Click To Zoom
Get Sinatra, Rubygems, and Passenger working for offline RDocs? Count me in.  I saw this and new I had to have it.  I&#8217;ve been on some long plane rides recently and I frequently find myself wanting to look up something from a [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<style type="text/css">
 ol li { margin: 15px 0 10px 0 }
</style>
<div style="text-align:center;"><a href="http://twitter.com/jnewland/status/1235806122"><img src="http://jasonseifer.com/assets/2009/02/twitter-jesse-newland-sinatra-rubygems-passeng.jpg" alt="Twitter _ Jesse Newland_ sinatra-rubygems + Passeng ....jpg" border="0" width="557" height="232" /></a></div>
<p><div style="text-align:center;float:right;"><a href="http://jasonseifer.com/assets/2009/02/rdoc-documentation.jpg" target="_blank"><img src="http://jasonseifer.com/assets/2009/02/rdoc-documentation-300x206.jpg" alt="RDoc Documentation.jpg" border="0"  /><br/><small>Click To Zoom</small></a></div>
<p>Get Sinatra, Rubygems, and Passenger working for offline RDocs? Count me in.  I saw this and new I had to have it.  I&#8217;ve been on some long plane rides recently and I frequently find myself wanting to look up something from a gem&#8217;s documentation while I&#8217;m coding. You can use the <code>gem server</code> command but that&#8217;s just such a pain to do every time you want to look something up.  I hadn&#8217;t really given it much thought that there might be an easier way until I saw Jesse&#8217;s tweet about it.  Having this offline using passenger at http://gems.local is great but I wanted to have a little more searching baked in.  Here&#8217;s how I did it:
</p>
<ol>
<li><strong>Install the hanna gem from mislav.</strong>
<p> You may need to have the HAML gem installed for this to work.  The hanna gem is a great theme for rdoc output.  It includes javascript to make some ajaxy type search so you can filter methods by typing in to a text field in one of the frames on the left.  It took me a little while to find this theme.  It&#8217;s the one currently in use on <a href="http://gitrdoc.com">GitRDoc</a>, which is a great resource (if you&#8217;re online).</p>
<p>
<script src="http://gist.github.com/68367.js"></script></li>
<li><strong>Tell rdoc to use the hanna theme</strong>
<p>In order to tell rdoc and gem to use this when you use the &quot;gem&quot; command, you need to add to your .gemrc.  Beware that this will affect all future rdoc generation when you install a gem.  Add the following to ~/.gemrc:<br />
<script src="http://gist.github.com/68377.js"></script>
</p>
<p></li>
<li><strong>Regenerate your rdocs</strong>
<p>You then need to regenerate all of your rdocs with this theme.  You can do this by executing the following:<br />
<script src="http://gist.github.com/68378.js"></script>
</p>
<p></li>
<li><strong>Get sinatra-rubygems</strong>
<p>Clone <a href="http://github.com/jseifer/sinatra-rubygems/tree/master">my fork</a> of <a href="http://github.com/jnewland/sinatra-rubygems/tree/master">Jesse Newland&#8217;s sinatra-rubygems</a> from GitHub:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">git clone git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>jseifer<span style="color: #000000; font-weight: bold;">/</span>sinatra-rubygems.git</pre></div></div>

</p>
<p>
</li>
<li><strong>Add it to Passenger</strong>
<p>Hook it up to your <a href="http://www.fngtps.com/2008/06/putting-the-pane-back-into-deployment">passenger preference pane</a> and set the name to &quot;gems.local&quot;, restart Apache and you&#8217;ll be all set:</p>
<div style="text-align:center;"><img src="http://jasonseifer.com/assets/2009/02/passenger-pref-pane.jpg" alt="passenger pref pane.jpg" border="0" width="460" height="339" /></div>
</li>
</ol>
<p>After you complete the above steps, everything should be working.  Enjoy!  This will come in handy next time you don&#8217;t have internet access and need to look up some methods.  I&#8217;d like to give a special thanks to <a href="http://jnewland.com">Jesse Newland</a> for releasing the sinatra-rubygems app.</p>
<p><strong>Update:</strong> k776 points out in the comments that this doesn&#8217;t work on the latest version of rdoc, which is 2.4.1 as of this writing.  It seems 2.3.0 is the version to go with.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Offline+Gem+Server+RDocs+http://bit.ly/18CRXX" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;t=Offline+Gem+Server+RDocs" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;t=Offline+Gem+Server+RDocs" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/NuIRCCguuLU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs</feedburner:origLink></item>
		<item>
		<title>Turning Off Webrat’s Automatic Browser Opening</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/IUx98B8TmdY/turning-off-webrats-automatic-browser-opening</link>
		<comments>http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening#comments</comments>
		<pubDate>Wed, 18 Feb 2009 14:36:36 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=121</guid>
		<description><![CDATA[If you&#8217;re using webrat for doing your integration testing with Rails and you&#8217;re on OS X you may notice that webrat opens an html version of the failing test every time you run it.  This can be fairly annoying if you&#8217;re running autotest.  I didn&#8217;t see how to turn it off in the [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice' rel='bookmark' title='Permanent Link: Getting RSpec and TextMate to play nice'>Getting RSpec and TextMate to play nice</a> <small> Elijah Miller has a great blog post on getting...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using <a href="http://github.com/brynary/webrat/tree/master">webrat</a> for doing your integration testing with Rails and you&#8217;re on OS X you may notice that webrat opens an html version of the failing test <strong>every time you run it</strong>.  This can be fairly annoying if you&#8217;re running autotest.  I didn&#8217;t see how to turn it off in the documentation but I found on <a href="http://blog.bitmacro.com/2008/11/14/shoulda-factory_girl-webrat">this page</a> that you can turn it off by doing the following:</p>
<p><script src="http://gist.github.com/66362.js"></script></p>
<p>This doesn&#8217;t work for the gem version I had installed but only with the GitHub version of brynary-webrat.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening+http://bit.ly/15nXn8" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;t=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;t=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice' rel='bookmark' title='Permanent Link: Getting RSpec and TextMate to play nice'>Getting RSpec and TextMate to play nice</a> <small> Elijah Miller has a great blog post on getting...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/IUx98B8TmdY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening</feedburner:origLink></item>
		<item>
		<title>NVidia Graphics Update 2009-01-26</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/nNS3YaojNSs/nvidia-graphics-update-2009-01-26</link>
		<comments>http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26#comments</comments>
		<pubDate>Mon, 26 Jan 2009 23:05:38 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=114</guid>
		<description><![CDATA[I&#8217;ve written before about the problems with the Mini DisplayPort to dual link DVI adapter from Apple.  Today Apple has released a graphics update that is supposed to fix the cursor movement problem.  After having installed it, it does NOT fix the out of sync issues.  I guess we&#8217;ll have to wait [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary' rel='bookmark' title='Permanent Link: Mini DisplayPort to Dual Link DVI Adapter Fix (Temporary)'>Mini DisplayPort to Dual Link DVI Adapter Fix (Temporary)</a> <small>The Mini DisplayPort to Dual Link DVI Adapter for the...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://jasonseifer.com/assets/2009/01/a7063cdd-4c14-4053-a921-0e77a54be623.jpg" alt="NVidia logo" border="0" width="150" align="right" />I&#8217;ve written before about the <a href="http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary">problems</a> with the Mini DisplayPort to dual link DVI adapter from Apple.  Today Apple has released a graphics update that is supposed to fix the cursor movement problem.  After having installed it, it does NOT fix the out of sync issues.  I guess we&#8217;ll have to wait on that one for a little while yet.</p>
<p>Regardless, you can download it <a href="http://support.apple.com/downloads/NVIDIA_Graphics_Update_2009">here</a>.</p>
<p><strong>Update:</strong> Apple has pulled the update for some unknown reason.  The page linked above is leads to a 404 not found page.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=NVidia+Graphics+Update+2009-01-26+http://bit.ly/GfBmC" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;t=NVidia+Graphics+Update+2009-01-26" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;t=NVidia+Graphics+Update+2009-01-26" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary' rel='bookmark' title='Permanent Link: Mini DisplayPort to Dual Link DVI Adapter Fix (Temporary)'>Mini DisplayPort to Dual Link DVI Adapter Fix (Temporary)</a> <small>The Mini DisplayPort to Dual Link DVI Adapter for the...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/nNS3YaojNSs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26</feedburner:origLink></item>
		<item>
		<title>Mepisto to WordPress Converter</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/Rj6GvU1yXDY/mepisto-to-wordpress</link>
		<comments>http://jasonseifer.com/2009/01/11/mepisto-to-wordpress#comments</comments>
		<pubDate>Sun, 11 Jan 2009 00:46:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[mephisto]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=102</guid>
		<description><![CDATA[As a recent experiment, I tried converting a blog from Mephisto to WordPress. After some quick Googling, I found out that Jason Gill had already largely solved the problem.
Unfortunately, his solution didn&#8217;t completely work for me because I didn&#8217;t want to launch Mephisto to do it and I have an aversion with that much code [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>As a recent experiment, I tried converting a blog from Mephisto to WordPress. After some quick Googling, I found out that <a href="http://blog.gilluminate.com/2008/05/08/how-i-converted-mephisto-to-wordpress/">Jason Gill</a> had already largely solved the problem.</p>
<p>Unfortunately, his solution didn&#8217;t completely work for me because I didn&#8217;t want to launch Mephisto to do it and I have an aversion with that much code in a controller. Even if it&#8217;s just going to be run once. Even if it&#8217;s just locally. I know, I have a problem. Anyway, I wanted to launch it from the command line also.</p>
<p>I had been planning to move the <a href="http://railsenvy.com">Rails Envy</a> blog to a different server and saw this as a good opportunity. The plan was to migrate the blog offline and put it on a separate subdomain (something like omgbeta.railsenvy.com). Once everything is totally working, I&#8217;d just point the main dns over. This is a fairly good strategy regardless of the application (blog, app, etc). First, though, I had to get that script working. Here&#8217;s what I came up with:</p>
<p><span><script src="http://gist.github.com/45760.js"></script></span></p>
<p></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Mepisto+to+WordPress+Converter+http://bit.ly/6IjYx" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;title=Mepisto+to+WordPress+Converter" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;title=Mepisto+to+WordPress+Converter" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;title=Mepisto+to+WordPress+Converter" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;title=Mepisto+to+WordPress+Converter" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;t=Mepisto+to+WordPress+Converter" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;t=Mepisto+to+WordPress+Converter" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;title=Mepisto+to+WordPress+Converter" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/11/mepisto-to-wordpress&amp;title=Mepisto+to+WordPress+Converter" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/Rj6GvU1yXDY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/01/11/mepisto-to-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/01/11/mepisto-to-wordpress</feedburner:origLink></item>
		<item>
		<title>Mini DisplayPort to Dual Link DVI Adapter Fix (Temporary)</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/XVrxpoMumhU/mini-displayport-to-dual-link-dvi-adapter-fix-temporary</link>
		<comments>http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary#comments</comments>
		<pubDate>Fri, 09 Jan 2009 05:11:59 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[monitor]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=77</guid>
		<description><![CDATA[The Mini DisplayPort to Dual Link DVI Adapter for the new aluminum Macbooks and Macbook Pros is getting some bad press due to sporadic flickering problems. There are seemingly very few people who aren&#8217;t having problems, myself included. This is a strange move by Apple. It seems unlikely that this could go unnoticed in testing [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26' rel='bookmark' title='Permanent Link: NVidia Graphics Update 2009-01-26'>NVidia Graphics Update 2009-01-26</a> <small>I&#8217;ve written before about the problems with the Mini DisplayPort...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://jasonseifer.com/assets/2009-01-05-at-15-04-1.jpg" alt="" width="380" height="312" align="right" />The <a href="http://store.apple.com/us/product/MB571">Mini DisplayPort to Dual Link DVI Adapter</a> for the new aluminum Macbooks and Macbook Pros is getting <a href="http://i.gizmodo.com/5119858/apples-mini-displayport-to-dual+link-dvi-adapter-has-periodic-distortion-issues">some bad press</a> due to sporadic flickering problems. There are seemingly very few people who aren&#8217;t having problems, myself included. This is a strange move by Apple. It seems unlikely that this could go unnoticed in testing given the amount of people who are experiencing problems.</p>
<p>Most people experiencing the problem have been unplugging and then re-plugging the usb part of the cable. This works but is kind of annoying to do and doesn&#8217;t seem to work for a long time &#8212; you do have to reboot eventually. Keeping the USB part hooked up to an external (powered) usb hub seems to lessen the symptoms but not alleviate them entirely.</p>
<p>Another option that I&#8217;ve found works is to go in to System Preferences and then Display Preferences. Change your resolution to 1280&#215;800 and then back to 2560&#215;1600. That&#8217;s been consistently working for me for a few hours at a time.</p>
<p>Other than that I&#8217;ve had a good experience with the adapter. The regular MacBook drives the 30&#8243; display just fine &#8212; exposé and spaces are both as zippy as when not hooked up to any external display at all. In case anyone is curious, I&#8217;m hooked up to a <a href="http://accessories.us.dell.com/sna/products/Monitors/productdetail.aspx?c=us&amp;l=en&amp;s=dhs&amp;cs=19&amp;sku=222-7175">Dell 3007WFP-HC</a> and having the extra screen real-estate is fantastic.</p>
<p><strong>Update:</strong> Pressing <strong>Ctrl + Shift + Eject</strong> seems to work as well.  This puts the displays to sleep.  After sleeping you just move the mouse and everything wakes up and works.  Your mileage may vary, but please let me know in the comments if it works for you.</p>
<p><strong>Update 2:</strong> Some people are reporting that Apple is retroactively saying that the adapter is only compatible with the Apple 30&#8243; cinema display.  I find this pretty unlikely for the following reasons:</p>
<ul>
<li> It&#8217;s a standard.</li>
<li> Apple hasn&#8217;t updated the MacBook page to reflect this.</li>
</ul>
<p>Again I&#8217;m pretty sure that this can be fixed via a software update since the above two &#8220;fixes&#8221; seem to work.  I&#8217;ll post again when Apple updates.<br />
<br class="final-break" /></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29+http://bit.ly/Ng1W0" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;title=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;title=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;title=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;title=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;t=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;t=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;title=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary&amp;title=Mini+DisplayPort+to+Dual+Link+DVI+Adapter+Fix+%28Temporary%29" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26' rel='bookmark' title='Permanent Link: NVidia Graphics Update 2009-01-26'>NVidia Graphics Update 2009-01-26</a> <small>I&#8217;ve written before about the problems with the Mini DisplayPort...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/XVrxpoMumhU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary</feedburner:origLink></item>
		<item>
		<title>I Win</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/Ort8IQ2Xz6A/i-win</link>
		<comments>http://jasonseifer.com/2008/12/16/i-win#comments</comments>
		<pubDate>Tue, 16 Dec 2008 09:32:34 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=67</guid>
		<description><![CDATA[I wanted to tell a story but realized I needed some background as to why it&#8217;s funny. I blogged about these once before, albeit very briefly. I thought I&#8217;d tell the story. It started a long time ago when I had an awesome job working at a student housing apartment complex. One of my coworkers [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://jasonseifer.com/assets/img-2244.jpg" class="image-link"><img class="linked-to-original" src="http://jasonseifer.com/assets/img-1.jpg" height="199" align="right" width="150" style="display:inline; margin: 10px; float: right" /></a>I wanted to tell a story but realized I needed some background as to why it&#8217;s funny. I blogged about <a href="http://jasonseifer.com/test-article" title="">these</a> once before, albeit very briefly. I thought I&#8217;d tell the story. It started a long time ago when I had an awesome job working at a student housing apartment complex. One of my coworkers gave me an awesome set of salt shakers. I displayed them because they were awesome. I lived with three other guys at the time so it wasn&#8217;t exactly out of the ordinary.</p>
<p>Fast forward a few months and I move in with my girlfriend. While we&#8217;re unpacking she holds them up and says:</p>
<p>&#8220;What&#8217;s this?&#8221;<br />&#8220;Salt shakers.&#8221;<br />&#8220;Uh huh. We&#8217;re throwing them away.&#8221;<br />&#8220;Um, no. How about if I just throw away something of yours? Like your laptop.&#8221;<br />&#8220;Fine but we&#8217;re putting them out of sight.&#8221;</p>
<p>I was about to protest but then I had an idea.</p>
<p>So I waited until she went to sleep and moved her alarm clock out of the way and put the salt shakers there so that she would hit those when she woke up instead of the snooze button. It worked! She said it was &#8220;very funny&#8221; and got ready for work.</p>
<p>The next morning they were staring at her in the bathroom when she went to get ready. She got smart this time and hid them. So I found them and put them in another spot and then another because she hid them every time. </p>
<p>One day she hid them really well and I didn&#8217;t find them for a couple of months. The next morning when she went to work they were staring at her on the dashboard of her car. When she got home I stole her keys again and grabbed them out of her glove compartment and hid them. She told me later she threw them away. Well, she thought she did and forgot all about it.</p>
<p>I waited until Christmas and took them with us to her family&#8217;s house and wrapped them up as a present to her. From her sister. It went well. She threw them away immediately. I fished them out of the garbage when no one was looking.</p>
<p>OK. Now we&#8217;re up to speed.</p>
<p>I&#8217;ve been having trouble sleeping lately and she had to work the night shift tonight sand was getting readty for work at 3:00 am. I&#8217;m still awake. She walks out of the bedroom and says &#8220;What are you still doing up?&#8221; For no specific reason I say &#8220;Shut up&#8221; in a Dr. Evil way. I keep it up when she says anything. It was just like that scene in Austin Powers.</p>
<p>I&#8217;m drinking Green Tea and she tells me it has caffeine in it. I tell her &#8220;No it doesn&#8217;t shut up.&#8221; She says &#8220;Google it.&#8221; So I go to Google and type in &#8220;should candace shut up&#8221; (note: no good results). So I had an idea.</p>
<p>You can see it at <a href="http://shouldcandaceshutup.com">shouldcandaceshutup.com</a>.</p>
<p>  <br class="final-break" /></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=I+Win+http://bit.ly/19p9Cz" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2008/12/16/i-win&amp;title=I+Win" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2008/12/16/i-win&amp;title=I+Win" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2008/12/16/i-win&amp;title=I+Win" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2008/12/16/i-win&amp;title=I+Win" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2008/12/16/i-win&amp;t=I+Win" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2008/12/16/i-win&amp;t=I+Win" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2008/12/16/i-win&amp;title=I+Win" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2008/12/16/i-win&amp;title=I+Win" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/Ort8IQ2Xz6A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2008/12/16/i-win/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2008/12/16/i-win</feedburner:origLink></item>
		<item>
		<title>Leopard LoadError: no such file to load — sqlite3</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/4f-oSddYxvs/leopard-sqlite3-loaderror</link>
		<comments>http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror#comments</comments>
		<pubDate>Mon, 24 Nov 2008 09:39:51 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=59</guid>
		<description><![CDATA[I&#8217;m not quite sure why this happened, but I kept getting this error with Leopard and sqlite3:
LoadError: no such file to load -- sqlite3
I tried to gem install and uninstall sqlite3-ruby a few times but that didn&#8217;t work out. However, installing from source did.  Head on over to the Rubyforge page and download the [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not quite sure why this happened, but I kept getting this error with Leopard and sqlite3:</p>
<p><code>LoadError: no such file to load -- sqlite3</code></p>
<p>I tried to gem install and uninstall sqlite3-ruby a few times but that didn&#8217;t work out. However, installing from source did.  Head on over to the <a href="http://rubyforge.org/projects/sqlite-ruby">Rubyforge page</a> and download the zip or tgz archive.  Extract it and just run:</p>
<p><code>ruby setup.rb</code></p>
<p>After that requiring sqlite3 should work fine.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3+http://bit.ly/4YobT" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;title=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;title=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;title=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;title=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;t=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;t=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;title=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror&amp;title=Leopard+LoadError%3A+no+such+file+to+load+%E2%80%94+sqlite3" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/4f-oSddYxvs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2008/11/24/leopard-sqlite3-loaderror</feedburner:origLink></item>
		<item>
		<title>Introduction to Podcasting</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/X-X4AD4bQSk/introduction-to-podcasting</link>
		<comments>http://jasonseifer.com/2008/09/27/introduction-to-podcasting#comments</comments>
		<pubDate>Sat, 27 Sep 2008 20:47:34 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[podcasting]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=46</guid>
		<description><![CDATA[
I did this talk at Blog Orlando 3 and thought some people might find this useful.  Feel free to share and get in touch with me if you have any questions or comments.
Podcasting Basics
Download PDF


  Podcasting Links
 Hivelogic Podcasting Equipment Guide: This is an excellent guide by Dan Benjamin
 Rails Envy Podcast (Shameless [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<div style="padding: 10px">
<p>I did this talk at <a href="http://www.blogorlando.com">Blog Orlando 3</a> and thought some people might find this useful.  Feel free to share and get in touch with me if you have any questions or comments.</p>
<div style="width:425px;text-align:left; margin-left: 10px" id="__ss_621899"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/jseifer/podcasting-basics-presentation?type=powerpoint" title="Podcasting Basics">Podcasting Basics</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=jason-seifer-podcasting-1222543342117432-8&#038;stripped_title=podcasting-basics-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=jason-seifer-podcasting-1222543342117432-8&#038;stripped_title=podcasting-basics-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p><a href="http://jasonseifer.com/assets/jason_seifer-podcasting.pdf">Download PDF</a><br />
</p>
<ul>
  <strong>Podcasting Links</strong></p>
<li> <a href="http://hivelogic.com/articles/2008/01/podcasting-equipment-guide">Hivelogic Podcasting Equipment Guide</a>: This is an excellent guide by <a href="http://danbenjamin.com">Dan Benjamin</a></li>
<li> <a href="http://railsenvy.com/podcast/">Rails Envy Podcast</a> (Shameless self promotion) .</li>
<li> <a href="http://www.podcasting-tools.com/">Podcasting Tools</a> &#8211; Provides a ton of information setting up a podcast.</li>
</ul>
<p></p>
<ul>
  <strong>Microphone Links</strong></p>
<li><a href="http://pro-audio.musiciansfriend.com/product/Kustom-KM4-Mic-with-Cable?sku=270720&#038;src=3WWRWXYB&#038;ZYXSEM=0">Kustom KM4</a> &#8211; Cheap but will get the job done (Don&#8217;t buy this).</li>
<li> <a href="http://www.amazon.com/exec/obidos/asin/B000H4MZU2/ref=nosim/danbenjamin-20">Samson C01U</a> &#8211; Complete podcasting pack.  This is USB so there is the latency effect involved with hearing yourself.  Great for starting out.</li>
<li><a href="http://www.amazon.com/M-Audio-Affordable-Capsule-Cardioid-Microphone/dp/B0002X869M/ref=nosim/jasoseif-20">M-Audio Nova</a> &#8211; This is the (arguably) the best mic you can get for under $200.</li>
<li><a href="http://www.amazon.com/exec/obidos/asin/B0002E4Z8M/ref=nosim/danbenjamin-20">Shure SM7B Dynamic Microphone</a> &#8211; Fantastic mic with great audio.  Top of the line.  As Dan Benjamin says, it&#8217;s a great &#8220;pro-sumer&#8221; mic.</li>
</ul>
<p></p>
<ul>
  <strong>Equipment Links</strong></p>
<li><a href="http://www.amazon.com/exec/obidos/asin/B0000TP57E/ref=nosim/danbenjamin-20">M-Audio MobilePre USB Mobile Preamp</a> &#8211; If you decide to go with a mic with an XLR connection, you&#8217;ll need this.</li>
<li><a href="http://www.amazon.com/Digidesign-Audio-Interface-Macintosh-Windows/dp/B000KW4TZK/ref=nosim/jasoseif-20">Digidesign MBox 2 Mini</a> &#8211; Awesome usb preamp that comes with pro tools.  More of a &#8220;pro-sumer&#8221; item.  This will only work with one mic at a time, though, so you&#8217;ll need a mixer of some sort if you want more.</li>
</ul>
<p></p>
<ul>
  <strong> Enhancing Your Podcast </strong></p>
<li> <a href="http://www.soundsnap.com">Sound Snap</a> for sound effects.</li>
<li> <a href="http://music.podshow.com">PodSafe Music Network</a> for Music you can (legally) play on your podcast.</li>
</ul>
<p></p>
<ul>
  <strong>Podcasting Services</strong></p>
<li> <a href="http://feedburner.com">FeedBurner</a> for podcasting easy podcast feed setup and stats.</li>
<li> <a href="http://podpress.org">PodPress</a> &#8211; Wordpress plugin for easy podcasting setup.</li>
</ul>
</div>
<p><del datetime="2008-09-27T20:44:46+00:00"></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Introduction+to+Podcasting+http://bit.ly/SKenS" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;title=Introduction+to+Podcasting" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;title=Introduction+to+Podcasting" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;title=Introduction+to+Podcasting" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;title=Introduction+to+Podcasting" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;t=Introduction+to+Podcasting" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;t=Introduction+to+Podcasting" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;title=Introduction+to+Podcasting" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2008/09/27/introduction-to-podcasting&amp;title=Introduction+to+Podcasting" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/X-X4AD4bQSk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2008/09/27/introduction-to-podcasting/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2008/09/27/introduction-to-podcasting</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 6.338 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-13 20:21:35 --><!-- Compression = gzip -->
