<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>almost effortless</title>
	<atom:link href="http://almosteffortless.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://almosteffortless.com</link>
	<description></description>
	<lastBuildDate>Fri, 12 Feb 2010 01:01:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>KZAK: an open source web-based&#160;jukebox</title>
		<link>http://almosteffortless.com/2010/02/08/kzak-an-open-source-web-based-jukebox/</link>
		<comments>http://almosteffortless.com/2010/02/08/kzak-an-open-source-web-based-jukebox/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 05:34:39 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[KZAK]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1835</guid>
		<description><![CDATA[I'm happy to announce that I've made my latest side-project open source. It's called KZAK. It's a simple web-based jukebox that you can use to share and listen to music with your friends. 
The feature set is pretty limited right, but I hope to continue to improve things over time. I'm already encouraged by how [...]]]></description>
			<content:encoded><![CDATA[<p>I'm happy to announce that I've made my latest side-project open source. It's called <a href="http://github.com/trevorturk/kzak">KZAK</a>. It's a simple web-based jukebox that you can use to share and listen to music with your friends. </p>
<p>The feature set is pretty limited right, but I hope to continue to improve things over time. I'm already encouraged by how quickly some of my friends have taken to the app, and I think you'll enjoy it - even in this early form.</p>
<p>So far you can:</p>
<ul>
<li>Invite people to use the site via email</li>
<li>Upload mp3, mp4, and m4a (iTunes) tracks with an upload queue and progress</li>
<li>Listen to the uploaded music as a playlist, even in an inactive browser tab</li>
</ul>
<p>Like I said, it's pretty basic (invite, upload, listen) but surprisingly functional. Plus, I'm using all kinds of interesting stuff behind the scenes, which is why I really wanted to share the code ;) </p>
<p>To begin with, we've got a Rails app that's using the latest and greatest in user authentication technology: <a href="http://github.com/plataformatec/devise">Devise</a>. If you're using something like restful_authentication or Authlogic, I implore you to take a look at Devise. It's a phenomenal improvement from these other two popular options, and it's being actively supported by <a href="http://github.com/josevalim">José Valim</a>, the latest Rails committer. Essentially, it's a Rails Engine that sits on top of <a href="http://github.com/hassox/warden">Warden</a> - a generalized Rack authentication framework. This combination is extraordinarily flexible and easy to use. It's opinionated (in a good way) while simultaneously doing a good job of staying out of the way. It introduces very little code into your application, and the source is well documented, well tested, and easy to follow. A++ highly recommended. </p>
<p>To handle the file uploads, I've switched from <a href="http://github.com/thoughtbot/paperclip">Paperclip</a> to <a href="http://github.com/jnicklas/carrierwave">CarrierWave</a>. While Paperclip has (and continues) to serve me well in many applications I work with, I really appreciate the modular approach that CarrierWave takes. It's agnostic as to which of the popular S3 clients you use, supporting both <a href="http://amazon.rubyforge.org/">aws/s3</a> and <a href="http://rightaws.rubyforge.org/">right_aws</a>. It's also ORM agnostic and not tightly coupled to Active Record. The tight coupling of Paperclip has caused us some grief at work, and I'm also confused about the state of Paperclip's support for aws/s3 and right_aws. So, I was happy to find this new project, and the maintainer <a href="http://github.com/jnicklas/">Jonas Nicklas</a> seems to be an extremely responsive and helpful dude, which is always good thing. The code looks great, and I've had an easy time working with this library so far. </p>
<p>In concert with CarrierWave, I'm also using the venerable <a href="http://swfupload.org/"> SWFUpload</a> to support upload queues and progress meters. I'm absolutely baffled as to why this kind of thing isn't easy/possible to support without Flash, but here we are. Of course, I have a fallback "regular upload form" that still uses some ajax to make things a little easier. There are a few blog posts and tutorial applications around on GitHub that helped me get SWFUpload working with Rails and jQuery, and I'm happy to put back out an example application that other people can refer to if they're interested in supporting upload queues and/or upload progress meters. </p>
<p>Next, to support audio playback while I work on supporting html5 properly, I'm using the extremely awesome <a href="http://www.schillmania.com/projects/soundmanager2/"> SoundManager 2</a>. Unfortunately, this is another part of the infrastructure using Flash, but the features and functionality of SoundManager are really something special. I've only scratched the surface of what this library can do, but I'm already enjoying it quite a bit. If you're working with jQuery and SoundManager, you may find the KZAK source code worth perusing. You might also take a look at <a href="http://github.com/adriengibrat/jQuery-SoundManager/">Adrien Gibrat's plugin</a>, which is a cool jQuery plugin that packs a lot of functionality. </p>
<p>Also running in the background of KZAK is a Twitter-style following/unfollowing system that I haven't exposed much of yet. It's basically the same system that's powering <a href="http://flowcoder.com">Flowcoder</a>. You can check out this <a href="http://github.com/trevorturk/tweets">example app</a> I made if you're interested in seeing that on its own. Currently, all users in the system follow (and are followed by) all of the other users. I plan to allow for "unfollowing" users some time soon, which will allow for some healthy splintering of the community in the case that you're not interested in everything that everyone is uploading. </p>
<p>Finally - and perhaps best of all - KZAK is fully compatible with and easy to install on Heroku. All you need is an S3 account and you're ready to get started with a web-based jukebox for you and your friends <i>for free</i>. </p>
<p><a href="http://github.com/trevorturk/kzak">http://github.com/trevorturk/kzak</a></p>
<p>Anyway, please feel free to dig around the source code if you're interested in any of this. I think there's a lot of good stuff in there, especially considering that the Ruby portion of the app is clocking in at under ~250 LOC right now. Thanks, open source community ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2010/02/08/kzak-an-open-source-web-based-jukebox/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cloudfront: no-brainer CDN support for&#160;S3</title>
		<link>http://almosteffortless.com/2010/02/08/cloudfront-no-brainer-cdn-support-for-s3/</link>
		<comments>http://almosteffortless.com/2010/02/08/cloudfront-no-brainer-cdn-support-for-s3/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 01:01:05 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1688</guid>
		<description><![CDATA[Amazon's CloudFront is a phenomenal addition to their S3 file-hosting service.
Amazon CloudFront is a web service for content delivery. It integrates with other Amazon Web Services to give developers and businesses an easy way to distribute content to end users with low latency, high data transfer speeds, and no commitments. 
Amazon CloudFront delivers your static [...]]]></description>
			<content:encoded><![CDATA[<p>Amazon's <a href="http://aws.amazon.com/cloudfront/">CloudFront</a> is a phenomenal addition to their <a href="https://s3.amazonaws.com/">S3</a> file-hosting service.</p>
<blockquote><p>Amazon CloudFront is a web service for content delivery. It integrates with other Amazon Web Services to give developers and businesses an easy way to distribute content to end users with low latency, high data transfer speeds, and no commitments. </p>
<p>Amazon CloudFront delivers your static and streaming content using a global network of edge locations. Requests for your objects are automatically routed to the nearest edge location, so content is delivered with the best possible performance. Amazon CloudFront works seamlessly with Amazon Simple Storage Service (Amazon S3) which durably stores the original, definitive versions of your files. Like other Amazon Web Services, there are no contracts or monthly commitments for using Amazon CloudFront – you pay only for as much or as little content as you actually deliver through the service.</p></blockquote>
<p>If you're using S3 and you're not using CloudFront, you should take a moment to check it out. You'll be surprised at how little work it takes to set up, how much it speeds up your assets serving, and how little it costs. </p>
<p>CloudFront is a part of the Amazon <a href="https://console.aws.amazon.com/">Console</a> now, so it's very easy to set up. All you need to do is to create a distribution, which means enabling CloudFront for a specific S3 bucket and choosing a CNAME that you'll serve your assets from. Then, you need to set up the CNAME in your DNS configuration on GoDaddy and you're done. </p>
<p>The following two screenshots illustrate the process. </p>
<p>Step one is to creating the distribution in Amazon's Console:</p>
<p><img src="http://almosteffortless.s3.amazonaws.com/cloudfront-1.png" style="width:580px" /></p>
<p>Note the <b>Domain Name</b> and <b>CNAMEs</b> sections in the lower half of the screen. I've chosen the CNAME of "s3.kzak.org" because I want my S3 bucket to be aliased such that URLs will look like this:</p>
<p>http://s3.kzak.org/example.jpg</p>
<p>CloudFront has provided me with the domain name that I need to provide to GoDaddy. Since I'm using their "Total DNS" option, all I have to do is add the CNAME like so:</p>
<p><img src="http://almosteffortless.s3.amazonaws.com/cloudfront-2.png" style="width:580px" /></p>
<p>Notice that the CNAME of "s3" is set to the domain name that CloudFront provided me. </p>
<p>These changes seem to take about 30 minutes to percolate through the internets, but that's all it takes to get started with CloudFront. </p>
<p>For bonus points, you may want to read up about <a href="http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html">using multiple asset hosts in Rails</a> and apply this technique in your applications for additional throughput. </p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2010/02/08/cloudfront-no-brainer-cdn-support-for-s3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flowcoder: Share, refactor, and tweet code&#160;snippets</title>
		<link>http://almosteffortless.com/2010/02/08/flowcoder-share-refactor-and-tweet-code-snippets/</link>
		<comments>http://almosteffortless.com/2010/02/08/flowcoder-share-refactor-and-tweet-code-snippets/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 00:38:33 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1619</guid>
		<description><![CDATA[I just realized that I never posts about our entry into the Rails Rumble last year.
Flowcoder: An Evolution of the Code Snippet Site
Coded and designed by @gbuesing, @scottymac, and @trevorturk for @railsrumble in 2009.

Flowcoder has what you would expect from a code snippet side: multiple language support, raw code view, and support for embedding on [...]]]></description>
			<content:encoded><![CDATA[<p>I just realized that I never posts about our entry into the Rails Rumble last year.</p>
<p><a href="http://flowcoder.com">Flowcoder</a>: An Evolution of the Code Snippet Site</p>
<p>Coded and designed by @<a href="http://twitter.com/gbuesing">gbuesing</a>, @<a href="http://twitter.com/scottymac">scottymac</a>, and @<a href="http://twitter.com/trevorturk">trevorturk</a> for @<a href="http://twitter.com/railsrumble/">railsrumble</a> in 2009.</p>
<p><a href="http://flowcoder.com"><img style="width:590px;" src="http://s3.amazonaws.com/almosteffortless/flowcoder_screen.png" /></a></p>
<p><a href="http://flowcoder.com">Flowcoder</a> has what you would expect from a code snippet side: multiple language support, raw code view, and support for embedding on other sites. </p>
<p>What was missing for us and what we really wanted was a site that featured not just the code, but the people creating the code. Just as we glean interesting tidbits about people's lives from Twitter, we wanted to learn from our favorite coders by being able to follow the kind of code snippets they create. We wanted to share our own code snippets and have others refactoring them: to fix, optimize, and make them better, and learn in the process. And we wanted to be kept informed: when your code is refactored on Flowcoder, you'll see an @reply from @flowcoderbot with some information and a link. This closes the loop in a casual, low bandwidth fashion and highlights the advantage of using Twitter as both an identity and notification system.</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2010/02/08/flowcoder-share-refactor-and-tweet-code-snippets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;2-1-10</title>
		<link>http://almosteffortless.com/2010/02/01/weekly-digest-2-1-10/</link>
		<comments>http://almosteffortless.com/2010/02/01/weekly-digest-2-1-10/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 04:52:46 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1820</guid>
		<description><![CDATA[If you enjoy these links, you should follow me on GitHub here.
iPhone / iPad icon PSD template
I’ve decided to work with my good friend, Sean Patrick O‘Brien to create a PSD based off the exact overlays, outlines, and masks the iPhone and iPad OS use to mask icons.
visionmedia's express
Sinatra-like JavaScript node.js web development framework -- [...]]]></description>
			<content:encoded><![CDATA[<p>If you enjoy these links, you should follow me on GitHub <a href="http://github.com/trevorturk/">here</a>.</p>
<p><a href="http://blog.cocoia.com/2010/iphone-ipad-icon-psd-template/">iPhone / iPad icon PSD template</a></p>
<blockquote><p>I’ve decided to work with my good friend, Sean Patrick O‘Brien to create a PSD based off the exact overlays, outlines, and masks the iPhone and iPad OS use to mask icons.</p></blockquote>
<p><a href="http://github.com/visionmedia/express">visionmedia's express</a></p>
<blockquote><p>Sinatra-like JavaScript node.js web development framework -- insanely fast, insanely sexy</p></blockquote>
<p><a href="http://github.com/rails/rails/commit/8ae25a8e41168801590fdb95891cc5990b4db21c">Commit 8ae25 to rails</a></p>
<blockquote><p>Introduce class_attribute to declare inheritable class attributes. Writing an attribute on a subclass behaves just like overriding the superclass reader method. Unifies and replaces most usage of cattr_accessor, class_inheritable_attribute, superclass_delegating_attribute, and extlib_inheritable_attribute.</p></blockquote>
<p><a href="http://github.com/jed/fab">jed's fab</a></p>
<blockquote><p>(fab) is a lightweight (~2KB minified and gzipped) toolkit that makes it easy to build asynchronous web apps. It takes advantage of the flexibility of javascript to create a concise DSL without pre-compilation or magic scope hackery.</p></blockquote>
<p><a href="http://manalang.com/static-websites-with-heroku">Static websites with Heroku</a></p>
<blockquote><p>I recently moved off of Dreamhost in favor of Heroku.  I have a few static sites I needed to move over and here's how I did it...</p></blockquote>
<p><a href="http://speirs.org/blog/2010/1/29/future-shock.html">Future Shock</a></p>
<blockquote><p>If the iPad and its successor devices free these people to focus on what they do best, it will dramatically change people's perceptions of computing from something to fear to something to engage enthusiastically with. I find it hard to believe that the loss of background processing isn't a price worth paying to have a computer that isn't frightening anymore.</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=1087596">Hacker News | Tinkerer’s Sunset</a></p>
<blockquote><p>The iPad has really brought out a lot of old, crochety "well in my day" engineers that are now to the point where its embarassing. The iPad will draw more people towards software engineering, because for the first time we will have a general purpose computer that doesn't suck horribly for normal people.</p></blockquote>
<p><a href="http://joehewitt.com/post/ipad/">Joe Hewitt: iPad</a></p>
<blockquote><p>iPad is an incredible opportunity for developers to re-imagine every single category of desktop and web software there is. Seriously, if you're a developer and you're not thinking about how your app could work better on the iPad and its descendants, you deserve to get left behind.</p></blockquote>
<p><a href="http://www.jslint.com/">JSLint</a></p>
<blockquote><p>The JavaScript Code Quality Tool</p></blockquote>
<p><a href="http://github.com/jeffkreeftmeijer/navvy">jeffkreeftmeijer's navvy at master - GitHub</a></p>
<blockquote><p>Simple Ruby background job processor inspired by delayed_job, but aiming for database agnosticism.</p></blockquote>
<p><a href="http://danieltenner.com/posts/0015-ipad-an-apple-for-mom.html">iPad: an Apple for Mom</a></p>
<blockquote><p>Most people have a computer at home. For some (like my mom), it’s an ancient Dell laptop they bought years ago. Others have bought into the netbook trend and invested a small amount of money into a machine that, for most people, can only be irritating to use (slow, small, ugly, and burns your lap – not a recipe for success). A few have actually paid good money for what was supposed to be a modern machine, and actually turned out to be yet another annoying slow, painful-to-use, Windows-based machine infested with trial software, spyware, and sometimes viruses.</p></blockquote>
<p><a href="http://github.com/documentcloud/underscore">documentcloud's underscore</a></p>
<blockquote><p>Functional Programming Aid for Javascript. Works well with jQuery.</p></blockquote>
<p><a href="http://github.com/neerajdotname/admin_data">neerajdotname's admin_data</a></p>
<blockquote><p>Browse and Manage your data using browser</p></blockquote>
<p><a href="http://plasmasturm.org/log/gitidxpraise/">In praise of git’s index</a></p>
<blockquote><p>The key to understanding it is how it interacts with git diff. Once you add something to the index (also referred to as staging it), it disappears off the diff. You can pass --cached to see what changes you have staged, but by default, it doesn’t show you the changes that you have asserted are ready for commit.</p></blockquote>
<p><a href="http://github.com/jnicklas/capybara">jnicklas's capybara</a></p>
<blockquote><p>webrat alternative which aims to support all browser simulators</p></blockquote>
<p><a href="http://github.com/thoughtbot/pacecar">thoughtbot's pacecar</a></p>
<blockquote><p>Generated scopes for ActiveRecord classes</p></blockquote>
<p><a href="http://github.com/quirkey/sammy">quirkey's sammy</a></p>
<blockquote><p>Sammy is a tiny javascript framework built on top of jQuery, It's RESTful Evented Javascript.</p></blockquote>
<p><a href="http://lindsaar.net/2010/1/26/new-actionmailer-api-in-rails-3">New ActionMailer API in Rails 3.0</a></p>
<blockquote><p>Action Mailer has long been the black sheep of the Rails family. Somehow, through many arguments, you get it doing exactly what you want. But it takes work! Well, we just fixed that. Action Mailer now has a new API.</p></blockquote>
<p><a href="http://ecorner.stanford.edu/authorMaterialInfo.html?mid=2334">Stanford's Entrepreneurship Corner: David Heinemeier Hansson, 37signals - Unlearn Your MBA</a></p>
<blockquote><p>David Heineimeier Hansson, the creator of Ruby on Rails and partner at 37signals in Chicago, says that planning is guessing, and for a start-up, the focus must be on today and not on tomorrow. He argues that constraints--fiscal, temporal, or otherwise--drive innovation and effective problem-solving. The most important thing, Hansson believes, is to make a dent in the universe with your company.</p></blockquote>
<p><a href="http://arstechnica.com/open-source/news/2010/01/bumps-ahead-as-vimeo-youtube-respond-to-html5-video-demand.ars">Bumps ahead as Vimeo, YouTube respond to HTML5 video demand</a></p>
<blockquote><p>Although there are still a number of important problems to solve before open video can displace Flash-based video playback on the Web, it seems likely that we will see more progress now that the major players are all on board and the users are enthusiastically calling for better standards support.</p></blockquote>
<p><a href="http://blog.plataformatec.com.br/2010/01/discovering-rails-3-generators/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+PlataformaBlog+%28Plataforma+Blog%29&utm_content=Google+Reader">Discovering Rails 3 generators</a></p>
<blockquote><p>This weekend during Rails Bugmash I stumbled across some nice posts about Rails 3 generators which motivated me to share them and add some comments!</p></blockquote>
<p><a href="http://m.onkey.org/2010/1/22/active-record-query-interface?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+monkeyonrails+%28m.onkey+on+rails%29&utm_content=Google+Reader">Active Record Query Interface 3.0</a></p>
<blockquote><p>I’ve been working on revamping the Active Record query interface for the last few weeks ( while taking some time off in India from consulting work, before joining 37signals ), building on top of Emilio’s GSOC project of integrating ARel and ActiveRecord. So here’s an overview of how things are going to work in Rails 3.</p></blockquote>
<p><a href="http://gizmodo.com/5451242/show-and-sell-the-secret-to-apples-magic">Show and Sell: The Secret to Apple's Magic</a></p>
<blockquote><p>Flash an exotic prototype, then—Presto!—get people to buy your more boring stuff. That kind of thinking still rules at most electronics companies. Apple under Steve Jobs only shows off actual products. The difference? Apple's arcane secret to success.</p></blockquote>
<p><a href="http://omgbloglol.com/post/344792822/the-path-to-rails-3-introduction">omgbloglol Rails 3 Introduction</a></p>
<blockquote><p>This post is kicking off a series that I’m doing about moving your skills and migrating your code to Rails 3. I’ll be sharing some practical insights and covering some pretty in-depth topics as we go along (I’ve got some notes for entries about upgrading plugins, taking advantage of new features like the agnosticism, migrating applications, and so on), but before I go into a lot of specifics, I thought it might be useful to go over some of the high-level philosophical and architectural changes that have gone on in the Rails code between versions 2 and 3.</p></blockquote>
<p><a href="http://mixergy.com/twitpic-noah-everett/">How A Spare Computer Became Twitpic</a></p>
<blockquote><p>In 2008, Noah Everett wanted to share photos on Twitter. Since there was no way to do it, he grabbed an old server and created Twitpic as a side project... A $1.5+ Million A Year Twitter Success Story...</p></blockquote>
<p><a href="http://wiki.apache.org/couchdb/API_Cheatsheet">API_Cheatsheet - Couchdb Wiki</a></p>
<blockquote></blockquote>
<p><a href="https://chartbeat.com/">chartbeat</a></p>
<blockquote><p>The web doesn't work with a 24-hour lag and neither should your analytics. Chartbeat gives you real-time analytics so that you know what's happening when it's happening. Control the story, track a product launch, exploit an opportunity from the moment they happen.</p></blockquote>
<p><a href="http://madebymany.co.uk/the-concept-is-the-execution-002574">The Concept *is* the Execution</a></p>
<blockquote><p>You cannot design a great service without an obsessional focus on the details.</p></blockquote>
<p><a href="http://graffitianalysis.com/">Graffiti Analysis</a></p>
<blockquote><p>Graffiti Analysis is an extensive ongoing study in the motion of graffiti. Custom software designed for graffiti writers creates visualizations of the often unseen motion involved in the creation of a tag.</p></blockquote>
<p><a href="http://maxklein.posterous.com/how-i-solved-email-overload-using-gmail">How I solved email overload using gmail</a></p>
<blockquote><p>It's simple. Every single email that arrives in my in-box is immediately put in a filter.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2010/02/01/weekly-digest-2-1-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;1-6-09</title>
		<link>http://almosteffortless.com/2010/01/06/weekly-digest-1-6-09/</link>
		<comments>http://almosteffortless.com/2010/01/06/weekly-digest-1-6-09/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 06:37:27 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1816</guid>
		<description><![CDATA[If you enjoy these links, you should follow me on GitHub here.
Steve Krug on Usability
I can’t think of a better intro to the essential points of usability than this presentation by Steve Krug. I especially appreciate his “least you can do” approach. Enjoy.
iBusted
...the Sun-Times is forwarding every page request to http://mobile.suntimes.com (the root “home page” [...]]]></description>
			<content:encoded><![CDATA[<p>If you enjoy these links, you should follow me on GitHub <a href="http://github.com/trevorturk/">here</a>.</p>
<p><a href="http://37signals.com/svn/posts/2092-i-cant-think-of-a-better-intro-to-the-essential">Steve Krug on Usability</a></p>
<blockquote><p>I can’t think of a better intro to the essential points of usability than this presentation by Steve Krug. I especially appreciate his “least you can do” approach. Enjoy.</p></blockquote>
<p><a href="http://blog.whiskyvangoghgo.com/post/318544275/ibusted">iBusted</a></p>
<blockquote><p>...the Sun-Times is forwarding every page request to http://mobile.suntimes.com (the root “home page” of the optimized site), thus breaking every link to every single article they’ve published. This is the very definition of a broken website.</p></blockquote>
<p><a href="http://getcaliper.com/caliper">Caliper: Hosted Ruby Metrics</a></p>
<blockquote><p>Ruby metrics don't get any easier than this.</p></blockquote>
<p><a href="http://adminnoob.com/">Admin Noob</a></p>
<blockquote><p>System Administration for Noobs</p></blockquote>
<p><a href="http://mentalized.net/journal/2005/11/29/ajax_activity_indicators/">AJAX activity indicators</a></p>
<blockquote><p>An important design element that’s part of the whole AJAX business is somehow letting your user know that stuff is actually happening while the server crunches away. A common way to do so, is to add a little animated GIF that is only shown when the AJAX request is happening.</p></blockquote>
<p><a href="http://www.ruby-toolbox.com/">The Ruby Toolbox</a></p>
<blockquote><p>The Ruby Toolbox gives you an overview of these tools, sorted in categories and rated by the amount of watchers and forks in the corresponding source code repository on GitHub so you can find out easily what options you have and which are the most common ones in the Ruby community.</p></blockquote>
<p><a href="http://blogobaggins.com/2009/03/31/waging-war-on-whitespace.html">Waging War on Whitespace (using TextMate)</a></p>
<blockquote><p>To avoid diff cruft you’ll need to instruct your text editor to remove trailing whitespace, preferably every time you save so you don’t have to remember to do it.</p></blockquote>
<p><a href="http://github.com/roman/warden_oauth/">roman's warden_oauth</a></p>
<blockquote><p>warden_oauth enhances the Warden authentication framework, offering a simple interface for creating oauth strategies.</p></blockquote>
<p><a href="http://github.com/ffmike/has_messages">ffmike's has_messages</a></p>
<blockquote><p>This plugin provides a nice and easy way to create simple internal messaging system in your application.</p></blockquote>
<p><a href="http://github.com/jpignata/temping">jpignata's temping</a></p>
<blockquote><p>Temping allows you to create arbitrary ActiveRecord models backed by a temporary SQL table for use in tests.</p></blockquote>
<p><a href="http://litanyagainstfear.com/blog/2009/10/14/gem-bundler-is-the-future/">Gem Bundler is the Future</a></p>
<blockquote><p>This guide went over how to use Bundler today, with a Rails 2.3.4 app. According to Yehuda, this eventually will be packaged in Rails 3, so the commands will be baked into Rails…so something like script/bundle. The nice thing is that you can use the bundler with any Ruby project, so this is good to know in general.</p></blockquote>
<p><a href="http://onehackoranother.com/projects/jquery/tipsy/">tipsy</a></p>
<blockquote><p>Tipsy is a jQuery for creating a Facebook-like tooltips effect based on an anchor tag's title attribute.</p></blockquote>
<p><a href="http://blog.plataformatec.com.br/2009/12/one-in-three-inherited-resources-has-scope-and-responders/">One in Three: Inherited Resources, Has Scope and Responders</a></p>
<blockquote><p>So we were there, building an application based on scaffold, and as we saw duplicated code we started to realize Inherited Resources contains a lot of tools that could be used outside its context. And this is what is happening right now, two new gems are being launched: Responders and HasScope.</p></blockquote>
<p><a href="http://www.johndcook.com/blog/2009/12/23/why-programmers-are-not-paid-in-proportion-to-their-productivity/">Why programmers are not paid in proportion to their productivity</a></p>
<blockquote><p>The romantic image of an über-programmer is someone who fires up Emacs, types like a machine gun, and delivers a flawless final product from scratch. A more accurate image would be someone who stares quietly into space for a few minutes and then says “Hmm. I think I’ve seen something like this before.”</p></blockquote>
<p><a href="http://www.wired.com/magazine/2009/12/fail_duke_nukem/all/1">Learn to Let Go: How Success Killed Duke Nukem</a></p>
<blockquote><p>It’s a dilemma all artists confront, of course. When do you stop creating and send your work out to face the public? Plenty of Hollywood directors have delayed for months, dithering in the editing room. But in videogames, the problem is particularly acute, because the longer you delay, the more genuinely antiquated your product begins to look — and the more likely it is that you’ll need to rip things down and start again. All game designers know this, so they pick a point to stop improving — to “lock the game down” — and then spend a frantic year polishing. But Broussard never seemed willing to do that.</p></blockquote>
<p><a href="http://github.com/jzawodn/mytop">jzawodn's mytop</a></p>
<blockquote><p>a "top" clone for MySQL</p></blockquote>
<p><a href="http://railstips.org/2009/12/18/why-i-think-mongo-is-to-databases-what-rails-was-to-frameworks">Why I think Mongo is to Databases what Rails was to Frameworks // RailsTips by John Nunemaker</a></p>
<blockquote><p>Below are 7 Mongo and MongoMapper related features that I have found to be really awesome while working on switching Harmony, a new website management system by my company, Ordered List, to Mongo from MySQL.</p></blockquote>
<p><a href="http://www.readwriteweb.com/archives/server-side_javascript_back_with_a_vengeance.php">Server-Side Javascript: Back With a Vengeance</a></p>
<blockquote><p>Last month was Javascript season in Europe, with two conferences dedicated to the language that powers interactive web applications, and a third, which featured it heavily. If a common theme emerged, it was the buzz about Javascript leaping out of the browser to serve other domains, and the noise has only become louder in the aftermath.</p></blockquote>
<p><a href="http://blog.plataformatec.com.br/2009/12/subdomains-and-sessions-to-the-rescue/">Subdomains and sessions to the rescue!</a></p>
<blockquote><p>After some research we decided to go with the subdomain-fu gem, which is great to give your application the ability of handling subdomains. Another great resource we have used is Ryan Bates’ screencast about the subject. But they did not solve our problem completely, so here we are going to document a few steps to help you get up and running easily with subdomains and sessions.</p></blockquote>
<p><a href="http://coderack.org/users/reagent/entries/93-racksnapshot">CodeRack: Rack::Snapshot</a></p>
<blockquote><p>Rack::Snapshot is a quick way to expand image urls for the popular image sharing services. If you have a URL to a public page for an image on Skitch, Img.ly, Twitpic, Yfrog, Flickr, or Twitgoo, this middleware will embed the direct image URL for you.</p></blockquote>
<p><a href="http://github.com/tobi/imagery/blob/master/config/deploy.rb">config/deploy.rb from tobi's imagery</a></p>
<blockquote><p>Capistrano tasks for a GitHub-style deployment.</p></blockquote>
<p><a href="http://github.com/sickill/racksh">sickill's racksh</a></p>
<blockquote><p>Console for any Rack based ruby web app.</p></blockquote>
<p><a href="http://github.com/tobi/clarity">tobi's clarity</a></p>
<blockquote><p>Web interface for the grep and tail -f unix tools. Useful for real-time log analysis. Remotely related to splunk.</p></blockquote>
<p><a href="http://github.com/tobi/imagery">tobi's imagery</a></p>
<blockquote><p>Image server / proxy that can resize images on demand based on common file prefixes ( such as _small, _medium ) and apply other rmagick effects. Supposed to be used between a Squid/Varnish and S3.</p></blockquote>
<p><a href="http://pivotallabs.com/users/brian/blog/articles/352-introducing-rr">Introducing RR</a></p>
<blockquote><p>I'm pleased to introduce a new Test Double (or mock) framework named RR, which is short for Double Ruby.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2010/01/06/weekly-digest-1-6-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;12-11-09</title>
		<link>http://almosteffortless.com/2009/12/11/weekly-digest-12-11-09/</link>
		<comments>http://almosteffortless.com/2009/12/11/weekly-digest-12-11-09/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 06:44:10 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1809</guid>
		<description><![CDATA[This time I have an excuse for the non-weekly nature of the weekly digest... I've been traveling! Please do check out some photos if you're interested on that sort of thing. 
Video of Node.js by Ryan Dahl at JSConf.eu
Node.js might be the most exciting single piece of software in the current JavaScript universe. Ryan received [...]]]></description>
			<content:encoded><![CDATA[<p>This time I have an excuse for the non-weekly nature of the weekly digest... I've been traveling! Please do <a href="http://www.flickr.com/photos/trevorturk/">check out some photos</a> if you're interested on that sort of thing. </p>
<p><a href="http://jsconf.eu/2009/video_nodejs_by_ryan_dahl.html">Video of Node.js by Ryan Dahl at JSConf.eu</a></p>
<blockquote><p>Node.js might be the most exciting single piece of software in the current JavaScript universe. Ryan received standing ovations for his talk and he really deserved it!</p></blockquote>
<p><a href="http://oscardelben.com/articles/2009/12/06/how-to-test-rails-3.html">How to Begin Playing With Rails 3</a></p>
<blockquote><p>Curious to take a look at Rails 3?</p></blockquote>
<p><a href="http://brianleroux.github.com/lawnchair/">Lawnchair</a></p>
<blockquote><p>Sorta like a couch except smaller and outside, also, a client side JSON document store. Perfect for webkit mobile apps that need a lightweight, simple and elegant persistence solution.</p></blockquote>
<p><a href="http://robots.thoughtbot.com/post/162185884/stupid-ruby-tricks">stupid ruby tricks</a></p>
<blockquote><p>Over the past few months of slinging Ruby here at Thoughtbot, I’ve picked up quite a few stupid ruby tricks smart ruby techniques that really help out your code.</p></blockquote>
<p><a href="http://labnotes.org/2009/11/19/vanity-experiment-driven-development-for-rails/">Vanity: Experiment Driven Development for Rails</a></p>
<blockquote><p>You’ve got your TDD, your BDD, your load testing, your user testing, your code metrics. All tools for testing your code and improving it. Here’s a question for you: what are you using to test your ideas?</p></blockquote>
<p><a href="http://www.selectorgadget.com/">SelectorGadget: point and click CSS selectors</a></p>
<blockquote><p>SelectorGadget is an open source bookmarklet that makes CSS selector generation and discovery on complicated sites a breeze.</p></blockquote>
<p><a href="http://blog.jayfields.com/2006/06/ruby-kernel-system-exec-and-x.html">Ruby Kernel system, exec and %x</a></p>
<blockquote><p>The Ruby Core Library documentation is very similar for Kernel.system, Kernel.exec and %x[..]. Recently I needed to kick off a system process, so I spent some time working with all 3 options.</p></blockquote>
<p><a href="http://simonwillison.net/2009/Nov/23/node/">Node.js is genuinely exciting</a></p>
<blockquote><p>I don’t see myself switching all of my server-side development over to JavaScript, but Node has definitely earned a place in my toolbox. It shouldn’t be at all hard to mix Node in to an existing server-side environment—either by running both behind a single HTTP proxy (being event-based itself, nginx would be an obvious fit) or by putting Node applications on a separate subdomain. Node is a tempting option for anything involving comet, file uploads or even just mashing together potentially slow loading web APIs. Expect to hear a lot more about it in the future.</p></blockquote>
<p><a href="http://github.com/dcparker/ruby-gmail">dcparker's ruby-gmail</a></p>
<blockquote><p>A Rubyesque interface to Gmail. Connect to Gmail via IMAP and manipulate emails and labels. Send email with your Gmail account via SMTP. Includes full support for parsing and generating MIME messages.</p></blockquote>
<p><a href="http://www.codinghorror.com/blog/archives/001313.html">Version 1 Sucks, But Ship It Anyway</a></p>
<blockquote><p>There's no question that, for whatever time budget you have, you will end up with better software by releasing as early as practically possible, and then spending the rest of your time iterating rapidly based on real world feedback.</p></blockquote>
<p><a href="http://aws.typepad.com/aws/2009/12/new-amazon-ec2-feature-boot-from-elastic-block-store.html">New Amazon EC2 Feature: Boot from Elastic Block Store</a></p>
<blockquote><p>You can now launch Amazon EC2 instances from an AMI backed by Amazon EBS (Elastic Block Store). This new functionality enables you to launch an instance with an Amazon EBS volume that serves as the root device.</p></blockquote>
<p><a href="http://www.zeldman.com/2009/12/06/the-stars-look-down/#comment-50635">The Stars Look Down</a></p>
<blockquote><p>...much as you and I may enjoy being encouraged through recognition and praise and dislike being saddened by rejection or indifference... deriving personal value from these transactions... is just plain faulty thinking, of the sort that makes otherwise capable, centred people all loopy and weird.</p></blockquote>
<p><a href="http://www.nytimes.com/2009/12/06/magazine/06fob-q4-t.html?_r=2">Questions for Jeffrey P. Bezos</a></p>
<blockquote><p>For every 100 copies of a physical book we sell, where we have the Kindle edition, we will sell 48 copies of the Kindle edition. It won’t be too long before we’re selling more electronic books than we are physical books. It’s astonishing.</p></blockquote>
<p><a href="http://developer.37signals.com/campfire/streaming">Campfire API</a></p>
<blockquote><p>The Streaming API allows you to monitor a room in real time.</p></blockquote>
<p><a href="http://pancakestacks.wordpress.com/2009/11/23/mounted-web-apps-sites/">Mounted Web Apps Sites</a></p>
<blockquote><p>...and between the two of use we had a Pancake stack that was proxying to couchdb in pretty short order.</p></blockquote>
<p><a href="http://pivotallabs.com/users/jpignata/blog/articles/1077-converting-rails-application-data-from-mysql-to-postgresql">Converting Rails application data from MySQL to PostgreSQL</a></p>
<blockquote><p>Our antiquely Perl-like script worked better than we expected — our application started right up with all of its data intact.</p></blockquote>
<p><a href="http://www.igvita.com/2009/11/20/state-of-ruby-vms-ruby-renaissance/?utm_source=feedburner&utm_campaign=Feed%3A+igvita+%28igvita.com%29&utm_content=feed">State of Ruby VMs: Ruby Renaissance</a></p>
<blockquote><p>In a short span of just a couple of years, the Ruby VM space has evolved to more than just a handful of choices: MRI, JRuby, IronRuby, MacRuby, Rubinius, MagLev, REE and BlueRuby. In fact, keeping up with all of the most recent developments within each VM is now easily a full-time job. For that reason, and with RubyConf ‘09 in full swing, let’s take a quick survey of the space and where it’s taking us.</p></blockquote>
<p><a href="http://www.techcrunch.com/2006/07/15/is-twttr-interesting/#comments">Odeo Releases Twttr</a></p>
<blockquote><p>There is also a privacy issue with Twttr. Every user has a public page that shows all of their messages. Messages from that person’s extended network are also public. I imagine most users are not going to want to have all of their Twttr messages published on a public website.</p></blockquote>
<p><a href="http://www.drunkenbastardman.co.za/horror/19music.htm">Why I Don't Care That I'm Killing Music</a></p>
<blockquote><p>...and brought to their knees they should be, without a doubt. For years they have enjoyed a monopoly, where they controlled the price of music and kept it artifically high to fuck us over. Personally, I don't think I would feel so good about stealing shit from people if they hadn't spent the last 4 decades rubbing our noses in it...</p></blockquote>
<p><a href="http://www.patrickmoberg.com/internet-vices/">Internet Vices</a></p>
<blockquote><p>[Double True.]</p></blockquote>
<p><a href="http://www.kungfugrippe.com/post/243861520/marco">Three things about Marco Arment</a></p>
<blockquote><p>All of this happens with zero intervention from me. Which means substantial, challenging prose that used to get skipped in the rush of the day now becomes available anyplace it suits me. In the line at the ATM. On a plane. Wherever.</p></blockquote>
<p><a href="http://www.rogueamoeba.com/utm/2009/11/13/airfoil-speakers-touch-1-0-1-finally-ships/">Airfoil Speakers Touch 1.0.1 Finally Ships</a></p>
<blockquote><p>The chorus of disenchanted developers is growing and we’re adding our voices as well. Rogue Amoeba no longer has any plans for additional iPhone applications, and updates to our existing iPhone applications will likely be rare. The iPhone platform had great promise, but that promise is not enough, so we’re focusing on the Mac.</p></blockquote>
<p><a href="http://blog.leahculver.com/2009/11/log-in-or-sign-up.html">Log in or sign up? - Leah Culver's Blog</a></p>
<blockquote><p>...we have just added the concept of user accounts. This includes the need for registration and log in (as well as log out and forgot password and so on). Leafy Chat only requires an email address and a password for both registration and log in, so it would be great to have some clever way to have both forms on the homepage.</p></blockquote>
<p><a href="http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html">The Nerd Handbook</a></p>
<blockquote><p>A nerd needs a project because a nerd builds stuff. All the time. Those lulls in the conversation over dinner? That’s the nerd working on his project in his head.</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=937430">Hacker News: Help: I'm lost</a></p>
<blockquote><p>From the outside you'd be amazed to know that inside I am in terrible turmoil. You know me because of code I've written, books I've published, and my contributions here. Perhaps you follow me on Twitter. But I have reached a point in my life where I do not know what to do, or where to turn.</p></blockquote>
<p><a href="http://yehudakatz.com/2009/11/03/using-the-new-gem-bundler-today/">Using the New Gem Bundler Today</a></p>
<blockquote><p>As you might have heard, Carl and I released a new project that allows you to bundle your gems (both pure-ruby and native) with your application.</p></blockquote>
<p><a href="http://www.engineyard.com/blog/2009/using-the-rubygems-bundler-for-your-app/">Using the Rubygems Bundler for Your App</a></p>
<blockquote><p>The new Rubygems bundler makes managing your application’s gem dependencies easy. And for applications with many components, it makes separating components’ dependencies easy too.</p></blockquote>
<p><a href="http://www.mnot.net/cache_docs/">Caching Tutorial for Web Authors and Webmasters</a></p>
<blockquote><p>A Web cache sits between one or more Web servers (also known as origin servers) and a client or many clients, and watches requests come by, saving copies of the responses — like HTML pages, images and files (collectively known as representations) — for itself. Then, if there is another request for the same URL, it can use the response that it has, instead of asking the origin server for it again.</p></blockquote>
<p><a href="http://howsoftwareisbuilt.com/2009/11/09/interview-with-ezra-zygmuntowicz-engine-yard/">Interview with Ezra Zygmuntowicz – Engine Yard</a></p>
<blockquote><p>The cloud providers are splitting into a few camps.  On one side, you have companies like Amazon that offer infrastructure as a service (IaaS), and Google who offers platform as a service (PaaS).  PaaS offers rapid development, and no server administration, but it locks you into a specific provider. Enter Engine Yard, a company that's enhancing Ruby on Rails to run on on top of arbitrary IaaS.  In this interview Ezra Zygmuntowicz paints the picture.</p></blockquote>
<p><a href="http://mail-archives.apache.org/mod_mbox/couchdb-user/200911.mbox/<6b5356e60911071609i23a87a33o256c0891f04815e2@mail.gmail.com>">CouchDB Twitter Clone Architecture</a></p>
<blockquote><p>So I've been thinking through the architecture of a Twitter-esque system in Couch as a kind of thought exercise to get a better handle on some of the more difficult corners of view generation. What would be the most effective manner of creating Twitter-like status streams?</p></blockquote>
<p><a href="http://alestic.com/2009/11/ec2-credentials">Understanding Access Credentials for AWS/EC2</a></p>
<blockquote><p>Amazon Web Services (AWS) has a dizzying proliferation of credentials, keys, ids, usernames, certificates, passwords, and codes which are used to access and control various account and service features and functionality. I have never met an AWS user who, when they started, did not have trouble figuring out which ones to use when and where, much less why.</p></blockquote>
<p><a href="http://webdeveloperplus.com/jquery/multiple-file-upload-with-progress-bar-using-jquery/">Multiple File Upload With Progress Bar Using jQuery</a></p>
<blockquote><p>Today I am going to show you how to create a multiple file upload form that allows multiple file selection using Ctrl/Shift keys and also displays a progress bar for each of the selected files while they are uploading.</p></blockquote>
<p><a href="http://blogs.bigfish.tv/adam/2009/06/14/swfupload-jquery-plugin/">SWFUpload jQuery Plugin</a></p>
<blockquote><p>When I first stumbled across SWFUpload about two years ago I was impressed by how easy it was to implement. However, their example code has always bugged me as being rather crap, having to assign a separate global event handler for each event, and the lack of multiple handlers for a single event.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/12/11/weekly-digest-12-11-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;11-6-09</title>
		<link>http://almosteffortless.com/2009/11/06/weekly-digest-11-6-09/</link>
		<comments>http://almosteffortless.com/2009/11/06/weekly-digest-11-6-09/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 20:27:15 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1806</guid>
		<description><![CDATA[How to Gemify your Rails Plugins
Ever since Rails added support for declaring gem dependencies, there is really no (good) reason to use plain ol’ plugins.
Plugging Rack into Rails
Rails 2.3 has Rack baked in. It uses Rack for things like sessions and parameter parsing. But what if you want to add your own middleware to a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://opensoul.org/2009/10/5/how-to-gemify-your-rails-plugins">How to Gemify your Rails Plugins</a></p>
<blockquote><p>Ever since Rails added support for declaring gem dependencies, there is really no (good) reason to use plain ol’ plugins.</p></blockquote>
<p><a href="http://opensoul.org/2009/3/3/plugging-rack-into-rails">Plugging Rack into Rails</a></p>
<blockquote><p>Rails 2.3 has Rack baked in. It uses Rack for things like sessions and parameter parsing. But what if you want to add your own middleware to a Rails app?</p></blockquote>
<p><a href="http://magicscalingsprinkles.wordpress.com/2009/11/02/the-meaning-of-information-technology/">The Meaning of Information Technology</a></p>
<blockquote><p>The first commercial computer was the Lyons Electronic Office I and was used in 1951 to perform vast calculations pertaining to the making and consumption of biscuits. You see, after the war, J. Lyons & Co., a popular chain of British tea shops, was confronted with an appetite for pastries so astronomical (which is understandable given years of tedious disputes with Germany), that the human mind was incapable of solving unaided the problem of distributing tea cakes to their customers.</p></blockquote>
<p><a href="http://librelist.com/">librelist.com</a></p>
<blockquote><p>Librelist.com is a free as in freedom mailing list site for open source projects. It is a place for FOSS communities to discuss all the things they want without ads, censorship, signup requirements, bundled apps, or requirements that you use any particular email client or service.</p></blockquote>
<p><a href="http://github.com/blog/542-introducing-resque">Introducing Resque - GitHub</a></p>
<blockquote><p>Resque is our Redis-backed library for creating background jobs, placing those jobs on multiple queues, and processing them later.</p></blockquote>
<p><a href="http://www.persistentfs.com/">PersistentFS.com</a></p>
<blockquote><p>PersistentFS is a fast and efficient POSIX-compliant file system that provides unlimited online storage in the Amazon Web Services (AWS) storage cloud. A PersistentFS file system can be mounted on any Linux computer connected to the internet and accessed like local storage. All data written to the file system is uploaded to Amazon S3 for reliable and cost effective off-site storage, while remaining instantly accessible. This allows you to take advantage of Amazon S3 using your existing software, without writing a single line of code.</p></blockquote>
<p><a href="http://coderack.org/users/tylerhunt/entries/6-canonical-host">CodeRack: Canonical Host</a></p>
<blockquote><p>There are often times when you'll need to redirect requests for some domains or subdomains to a single canonical host. This middleware lets you specify the canonical host for your application, and will perform a 301 redirect for all non-canonical requests.</p></blockquote>
<p><a href="http://www.slideshare.net/ihower/rails-best-practices">Rails Best Practices</a></p>
<blockquote><p>[Nice overview.]</p></blockquote>
<p><a href="http://diveintomark.org/archives/2009/11/02/why-do-we-have-an-img-element">Why do we have an IMG element?</a></p>
<blockquote><p>But none of this answers the original question: why do we have an <img> element? Why not an <icon> element? Or an <include> element? Why not a hyperlink with an include attribute, or some combination of rel values? Why an <img> element? Quite simply, because Marc Andreessen shipped one, and shipping code wins.</p></blockquote>
<p><a href="http://github.com/gabriel/shrub">gabriel's shrub</a></p>
<blockquote><p>S3 Proxy for Google App Engine [Awesome.]</p></blockquote>
<p><a href="http://s3hub.com/">S3Hub: S3 Client (for Mac OS X)</a></p>
<blockquote><p>View your S3 online storage, upload, download, set permissions, share with friends and more.</p></blockquote>
<p><a href="http://googleblog.blogspot.com/2009/10/this-week-in-search-103009.html">Official Google Blog: This week in search 10/30/09</a></p>
<blockquote><p>On Wednesday, we rolled out our new music search feature, fully integrated into Google's web search. Now, when you search for a band, singer, song name, or album title, Google will recognize it and return a special music result on the top of the page. These new special music results do exactly what you want - they let you listen to the full song.</p></blockquote>
<p><a href="http://incubator.apache.org/projects/trafficserver.html">Traffic Server Podling Status Page - Apache Incubator</a></p>
<blockquote><p>Traffic Server fills the need for a fast, extensible and scalable HTTP 1.1 proxy and cache. We have a production proven piece of software that can deliver HTTP traffic at high rates, and can scale well on modern SMP hardware. We have benchmarked Traffic Server to handle in excess of 35,000 RPS on a single box. Traffic Server has a rich feature set, implementing most of HTTP/1.1 to the RFC specifications.</p></blockquote>
<p><a href="http://entrepreneur.venturebeat.com/2009/10/30/start-up-studies-a-pop-quiz/">Start-up studies: A pop quiz</a></p>
<blockquote><p>There’s a classroom exercise that’s a part of the  Stanford technology venture program hits its students with each year: If you had five dollars and two hours, what would you do to make as much money as possible?</p></blockquote>
<p><a href="http://kottke.org/09/10/one-handed-computing-with-the-iphone">One-handed computing with the iPhone</a></p>
<blockquote><p>The easy single-handed operation of the iPhone1 is not one of its obvious selling points but is one of those little features that grows on you and becomes nearly indispensable. A portable networked computing and gaming device that can be easily operated with one hand can be used in a surprising variety of situations.</p></blockquote>
<p><a href="http://www.wired.com/techbiz/it/magazine/17-10/ff_netflix?currentPage=all">Netflix Everywhere: Sorry Cable, You're History</a></p>
<blockquote><p>There are a million different ways for Netflix to fail. But that has always been the case. Netflix should have failed already, taken down by Blockbuster or Wal-Mart, kneecapped by Hollywood, made irrelevant by BitTorrent or iTunes. Yet time and again, the company has not only survived but quietly thrived—on the strength of its unique algorithms and its relentless focus on getting customers content they didn't even know they wanted.</p></blockquote>
<p><a href="http://37signals.com/svn/posts/1989-speakers-tip-dont-tell-the-audience-you-arent-prepared">Speaker's Tip: Don't tell the audience you aren't prepared</a></p>
<blockquote><p>People take days off of work, spend hundreds on a conference ticket, travel for thousands of miles, and pay hefty rates for flights and hotels to come hear you speak, and you tell them you didn’t have time to prepare a talk? What’s cool about that?</p></blockquote>
<p><a href="http://documentcloud.github.com/underscore/">Underscore.js</a></p>
<blockquote><p>Underscore is a utility-belt library for JavaScript that provides a lot of the functional programming support that you would expect in Prototype.js (or Ruby), but without extending any of the built-in JavaScript objects.</p></blockquote>
<p><a href="http://journal.markbao.com/2009/10/startup-school-2009-summary/">The Y Combinator Startup School 2009 Summary</a></p>
<blockquote><p>Y Combinator’s Startup School 2009 was an incredible learning experience for new and experienced entrepreneurs alike. There are ten talks. Here are their key points.</p></blockquote>
<p><a href="http://rack.rubyforge.org/doc/classes/Rack/Utils.html">Module: Rack::Utils</a></p>
<blockquote><p>Rack::Utils contains a grab-bag of useful methods for writing web applications adopted from all kinds of Ruby libraries.</p></blockquote>
<p><a href="http://radar.oreilly.com/2009/10/whitehouse-switch-drupal-opensource.html">Thoughts on the Whitehouse.gov switch to Drupal</a></p>
<blockquote><p>Yesterday, the new media team at the White House announced via the Associated Press that whitehouse.gov is now running on Drupal, the open source content management system. That Drupal implementation is in turn running on a Red Hat Linux system with Apache, MySQL and the rest of the LAMP stack. Apache Solr is the new White House search engine. This move is obviously a big win for open source.</p></blockquote>
<p><a href="http://tomayko.com/writings/things-caches-do">Things Caches Do</a></p>
<blockquote><p>There are different kinds of HTTP caches that are useful for different kinds of things. I want to talk about gateway caches — or, “reverse proxy caches” — and consider their effects on modern, dynamic web application design.</p></blockquote>
<p><a href="http://www.websequencediagrams.com/">WebSequenceDiagrams.com - Create sequence diagrams in seconds</a></p>
<blockquote><p>Don't waste your afternoon drawing UML Sequence Diagrams. Just enter the description here, and click "draw". The SD/MSC Generator is an easy alternative to using mouse-centric tools like Microsoft Visio.</p></blockquote>
<p><a href="http://github.com/stefankroes/ancestry">stefankroes's ancestry</a></p>
<blockquote><p>Ancestry allows the records of a Ruby on Rails ActiveRecord model to be organised as a tree structure (or hierarchy). It uses a single, intuitively formatted database column, using a variation on the materialised path pattern. It exposes all the standard tree structure relations (ancestors, parent, root, children, siblings, descendants) and all of them can be fetched in a single sql query.</p></blockquote>
<p><a href="http://www.codinghorror.com/blog/archives/001306.html">Treating User Myopia</a></p>
<blockquote><p>When I said users don't read anything you put on the screen, I was lying. Users do read. But users will only read the absolute minimum amount of text on the screen necessary to complete their task. I can't quite explain it, but this kind of user myopia is epidemic. It's the same problem, everywhere I turn.</p></blockquote>
<p><a href="http://www.allthingsdistributed.com/2009/10/amazon_relational_database_service.html">The Amazon Relational Database Service (RDS)</a></p>
<blockquote><p>Today marks the launch of Amazon RDS - the Amazon Relational Database Service. Amazon RDS is a web service that makes it easy to set up, operate, and scale a relational database in the cloud. Amazon RDS handles all the "muck" of relational database management freeing up its users to focus on their applications and business.</p></blockquote>
<p><a href="http://blog.flickr.net/2009/10/21/people-in-photos/">Flickr! It’s made of people</a></p>
<blockquote><p>We’ve launched People in Photos, a new feature that will help put a face to the Flickrverse and enable you to highlight members that you’ve photographed in a whole new way. People in Photos lets you add a member to a photo, find photos of people you know, and manage which photos you’re in.</p></blockquote>
<p><a href="http://github.com/blog/530-how-we-made-github-fast">How We Made GitHub Fast</a></p>
<blockquote><p>Now that things have settled down from the move to Rackspace, I wanted to take some time to go over the architectural changes that we’ve made in order to bring you a speedier, more scalable GitHub.</p></blockquote>
<p><a href="http://www.rubyenterpriseedition.com/documentation.html#_garbage_collector_performance_tuning">Ruby Enterprise Edition Features Guide</a></p>
<blockquote><p>With REE, one can tune the garbage collector’s behavior for better server performance. It is possible to specify the initial heap size to start with. The heap size will never drop below the initial size. By carefully selecting the initial heap size one can decrease startup time and increase throughput of server applications.</p></blockquote>
<p><a href="http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/">Passing environment variables to Ruby from Phusion Passenger</a></p>
<blockquote><p>Some environment variables must be set before Ruby is started because the Ruby interpreter itself uses them. The RailsBench GC settings environment variables, which are now supported by Ruby Enterprise Edition, are examples of such environment variables.</p></blockquote>
<p><a href="http://www.pauldix.net/2009/10/using-the-nginx-memcached-module-with-passenger.html">Using the Nginx Memcached module with Passenger</a></p>
<blockquote><p>Nginx, everyone's favorite speedy web server has a module to hook in directly to memcached. For those of us running Ruby servers behind nginx we can avoid hitting our running Ruby processes completely on a cache hit.</p></blockquote>
<p><a href="http://collison.ie/blog/2009/10/surprises">Surprises</a></p>
<blockquote><p>Now, when coding, I try to think: “how can I write this such that if people saw my code, they’d be amazed at how little there is and how little it does”.</p></blockquote>
<p><a href="http://m.onkey.org/2009/10/18/railssummit-slides">Railssummit Slides</a></p>
<blockquote><p>Here are the slides of [Pratik Naik's] presentation at Railssummit 2009...  about Rails focused tips/tricks.</p></blockquote>
<p><a href="http://vimeo.com/6960507">Mint CEO Aaron Patzer on Startups</a></p>
<blockquote><p>Mint CEO Aaron Patzer talks with entrepreneurs at a JuicePitcher event about the history of his startup, Mint.</p></blockquote>
<p><a href="http://frozenplague.net/2009/10/connecting-to-multiple-databases-using-activerecord/">Connecting to Multiple Databases Using ActiveRecord</a></p>
<blockquote><p>You can call establish_connection with the key that points to another database config in your config/database.yml file</p></blockquote>
<p><a href="http://shortwaveapp.com/">Shortwave</a></p>
<blockquote><p>...is an extensible quick-search and shortcut bookmark. [Awesome.]</p></blockquote>
<p><a href="http://danieltenner.com/posts/0012-google-wave.html">What problems does Google Wave solve?</a></p>
<blockquote><p>It will probably take years before Wave fully penetrates large corporations and replaces the email systems everyone is used to. But it solves so many thorny problems with email that it might well manage to do so, where so many other tentative “email fixes” have failed.</p></blockquote>
<p><a href="http://www.rubyinside.com/21-rack-middlewares-2649.html">21 Rack Middlewares To Turbocharge Your Ruby Webapps</a></p>
<blockquote><p>In this post, we're going to highlight various Rack middlewares from CodeRack, an on-going Rack middleware competition...</p></blockquote>
<p><a href="http://github.com/hiddenloop/paging_keys_js/tree">hiddenloop's paging_keys_js</a></p>
<blockquote><p>Keyboard short cuts for paging through listings one item at at time (and across entire pages). Inspired by the navigation at FFFFOUND!</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/11/06/weekly-digest-11-6-09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>no-www Rack&#160;Middleware</title>
		<link>http://almosteffortless.com/2009/11/05/no-www-rack-middleware/</link>
		<comments>http://almosteffortless.com/2009/11/05/no-www-rack-middleware/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 00:59:58 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1790</guid>
		<description><![CDATA[I'm pleased to present my submission to the CodeRack contest: no-www. 
This middleware catches requests that begin with “www” and redirects them to the more reasonable "non-www" address. 
For example: http://www.example.com -> http://example.com
While such redirects might better be performed from within an Apache or nginx config, some hosts (i.e. Heroku) don't give you access to [...]]]></description>
			<content:encoded><![CDATA[<p>I'm pleased to present my submission to the <a href="http://coderack.org/">CodeRack</a> contest: <b>no-www</b>. </p>
<p>This middleware catches requests that begin with “www” and redirects them to the more reasonable "non-www" address. </p>
<p>For example: http://www.example.com -> http://example.com</p>
<p>While such redirects might better be performed from within an Apache or nginx config, some hosts (i.e. <a href="http://heroku.com">Heroku</a>) don't give you access to configure the server as such. </p>
<p>If you're unfamiliar with the <i>no-www</i> movement, the philosophy is simple. Websites should have a canonical address. This address shouldn’t begin with “www” because the use of "www" is unnecessary and wasteful. See <a href="http://no-www.org/">http://no-www.org/</a> for details. </p>
<p>And, without further ado:</p>
<p><script src="http://gist.github.com/224812.js"></script></p>
<p>If you know what <a href="http://rack.rubyforge.org">Rack</a> is, you problably already know how to use this. Still, an example usage for a Rails app wouldn't hurt. Start by copying the above middleware into <i>lib/no_www.rb</i>. Then, configure your application to use the middleware by placing the following in <i>config/environment.rb</i>: </p>
<pre class="ruby">&nbsp;
<span style="color:#6666ff; font-weight:bold;">Rails::Initializer</span>.<span style="color:#9900CC;">run</span> <span style="color:#9966CC; font-weight:bold;">do</span> |config|
  config.<span style="color:#9900CC;">middleware</span>.<span style="color:#9900CC;">use</span> “NoWWW” <span style="color:#9966CC; font-weight:bold;">if</span> RAILS_ENV == ‘production’
<span style="color:#9966CC; font-weight:bold;">end</span></pre>
<p>No more www. </p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/11/05/no-www-rack-middleware/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Installing Varnish with nginx, Passenger, and Monit on Ubuntu 8.10&#160;intrepid</title>
		<link>http://almosteffortless.com/2009/10/22/installing-varnish-with-nginx-passenger-and-monit-on-ubuntu-8-10-intrepid/</link>
		<comments>http://almosteffortless.com/2009/10/22/installing-varnish-with-nginx-passenger-and-monit-on-ubuntu-8-10-intrepid/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 02:32:23 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1761</guid>
		<description><![CDATA[Varnish is a state-of-the-art, high-performance HTTP accelerator. I first came to know about it thanks to Heroku, where they use it to provide built-in HTTP Caching. 
As their docs describe, using Varnish is easy:
# This tells the cache (Varnish) to serve the page for 300 seconds (5 minutes).
&#160;
class MyController &#60; ApplicationController
  def index
  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://varnish.projects.linpro.no/">Varnish</a> is a state-of-the-art, high-performance HTTP accelerator. I first came to know about it thanks to <a href="http://heroku.com/">Heroku</a>, where they use it to provide built-in <a href="http://docs.heroku.com/http-caching">HTTP Caching</a>. </p>
<p>As their docs describe, using Varnish is easy:</p>
<pre class="ruby"><span style="color:#008000; font-style:italic;"># This tells the cache (Varnish) to serve the page for 300 seconds (5 minutes).</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> MyController &lt; ApplicationController
  <span style="color:#9966CC; font-weight:bold;">def</span> index
    response.<span style="color:#9900CC;">headers</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'Cache-Control'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">'public, max-age=300'</span>
    render <span style="color:#ff3333; font-weight:bold;">:text</span> =&gt; <span style="color:#996600;">&quot;Rendered at #{Time.now}&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre>
<p>Simply setting the "Cache-Control" header like so allows you to serve up a page extremely quickly because requests completely bypass your application logic, database, and all of that related overhead and read straight from the cache. </p>
<p>If you're serving up the same page to all visitors, then setting up Varnish HTTP caching is a no-brainer. If you're serving up pages that are mostly the same for all users but have a custom header or something, you can still take advantage of the caching speed boost if you're willing to investigate the ins and outs of ESI and/or serving partials with Javascript. If you're serving pages that are different for each user, then you're out of luck :)</p>
<p>So, using Varnish for HTTP acceleration is great, but unfortunately for me the version of Ubuntu (8.10 intrepid) that we're using has a painfully out of date package in aptitude. If you're already running Varnish, you can check to make sure you're using a relatively recent release by running <i>varnishd -V</i>. If you see anything less than <i>2.0.4</i>, you should seriously consider upgrading. </p>
<p>Thanks to the <a href="http://projects.linpro.no/pipermail/varnish-dist/2009-October/thread.html">helpful people on the Varnish mailing lists</a>, I was able to get things up and running by doing the following:</p>
<blockquote><p>Note that there’s a new version of Varnish out now. The 2.0.4 tag is still pretty good, but you should check all the available tags and decide if you’d rather use a newer version. If so, you’ll have to adjust the installation instructions found at the top of this post slightly.</p></blockquote>
<blockquote><p>Note that the .deb files generated by the “dpkg-buildpackage” command may be different from those generated at the time this post was written. The basic steps still apply, though.</p></blockquote>
<pre>apt-get update
apt-get install subversion autotools-dev automake1.9 libtool autoconf libncurses-dev xsltproc quilt
cd /tmp
svn co http://varnish.projects.linpro.no/svn/tags/varnish-2.0.4
cd varnish-2.0.4/varnish-cache
dpkg-buildpackage
cd ..
dpkg -i libvarnish1_2.0.4-6_i386.deb
dpkg -i varnish_2.0.4-6_i386.deb</pre>
<p>You can then use <i>/etc/init.d/varnish</i> to stop/start/restart the service. </p>
<p>But, we're not done yet. Since it took me a while to get the whole app server stack configured, I thought it might help someone else out if I covered the rest of the steps it took to get Varnish working properly with my Ruby application. </p>
<p>You can get <a href="http://nginx.net/">nginx</a> installed with <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a> and <a href="http://www.modrails.com/">Passenger</a> by following the excellent documentation <a href="http://www.modrails.com/documentation/Users%20guide%20Nginx.html#install_passenger">on the Phusion website</a>. </p>
<p>I might suggest, however, doing the installation <a href="http://gist.github.com/216561">like this</a> in order to get the latest (secure) version of nginx. Even before that, you'll probably want to install Ruby Enterprise Edition, which I like to do <a href="http://gist.github.com/216587">the old fashioned way</a>.</p>
<p>You may also be interested in this <a href="http://gist.github.com/216549">example nginx init.d config</a>, which allows you to use nginx as you would if installed from a package. Make sure to consider doing some kind of log rotation with this kind of setup as well.</p>
<p>...</p>
<p>Now that you're using the fantastic nginx web server, you'll want to configure it to listen to port 8080, so that Varnish can listen to port 80 and forward any requests that aren't in its cache to the backend server (nginx). I'll just post the complete config we're using, and you can pick out the relevant details for your case. </p>
<p>Some interesting things to note is that this setup is configured to use <a href="http://www.sinatrarb.com/">Sinatra</a>, the lightweight Ruby web framework. If the application throws an exception, we're routing to the /error page. We're also using various other settings that you may or may not agree with. The important part with regard to Varnish and nginx cooperating, however, is that you set nginx to listen to port 8080 in your config file. My config is located in <i>/opt/nginx/conf/nginx.conf</i>:</p>
<pre>worker_processes 1;
pid /var/run/nginx.pid;

events {
  worker_connections  1024;
}

http {
  access_log /var/log/nginx_access.log;
  error_log /var/log/nginx_error.log;
  passenger_root /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-2.2.5;
  passenger_ruby /opt/ruby-enterprise/bin/ruby;
  passenger_max_pool_size 10;
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 65;
  gzip on;
  gzip_comp_level 2;
  gzip_buffers 16 8k;
  gzip_disable "MSIE [1-6]\.";
  gzip_proxied any;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  server {
    listen 8080; # the important part!
    root /var/www/example/current/public;
    passenger_enabled on;
    passenger_use_global_queue on;
    rack_env production; # use rails_env for a rails app
    # serve static files without running more rewrite tests
    if (-f $request_filename) {
      break;
    }
    # disable site via capistrano (cap deploy:web:disable)
    if (-f $document_root/system/maintenance.html) {
      rewrite ^(.*)$ /system/maintenance.html break;
    }
    # expires headers
    location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
      expires max;
      break;
    }
  }
}</pre>
<p>Now, I'm fairly new to using Varnish, so perhaps someone can advise me about how to better configure things, but I'll cover how I did it. Varnish comes with a few example configs loaded up in <i>/etc/default/varnish</i>. I ended up using the following:</p>
<pre>NFILES=131072
MEMLOCK=82000
INSTANCE=$(uname -n)
DAEMON_OPTS="-a :80 -f /etc/varnish/default.vcl -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"</pre>
<p>You can review the examples provided and see how you want to go about it, though. </p>
<p>Once you're all set with the general config, you'll need to provide a <a href="http://varnish.projects.linpro.no/wiki/VCL">VCL config</a>. I'm putting ours in <i>/etc/varnish/default.vcl</i> and it looks like this:</p>
<pre>backend default {
  .host = "127.0.0.1";
  .port = "8080";
}

# Warning: read the following before using this config:
# http://varnish.projects.linpro.no/wiki/VCLExampleCacheCookies

sub vcl_recv {
  unset req.http.cookie;
}</pre>
<p>The first part tells Varnish to forward any requests that aren't in its cache to a webserver running on localhost port 8080. That's nginx!</p>
<p>The second part unsets any cookies that are sent along with any requests. You won't want to do this unless you're serving the same pages for all users for your entire application. If you aren't careful here, you can very easily end up serving pages meant for one user to another. Be careful!</p>
<p>In my case this works fine because we're serving a site with no user-specific actions or views. It's all public. You're case might be different. Perhaps you can cache things like static files (images, etc) or certain areas of your application. Maybe you have a CMS with an admin interface that can't be cached, but with publically viewable pages that could be cached. I dunno. In any case, you should definitely read more about this <a href="http://varnish.projects.linpro.no/wiki/VCLExampleCacheCookies">on the Varnish wiki</a>.</p>
<p>Finally, since we're using <a href="http://mmonit.com/monit/">Monit</a> to monitor the health of our systems, I'll throw in an example config that covers SSH, nginx, and Varnish. This Monit config would email you using a Google Apps Domain if there was a problem. You probably wouldn't want to use this as-is, but it should serve as a decent starting point for you to create your own. We've got the config in <i>/etc/monit/monitrc</i>:</p>
<pre># Alerts
set daemon 120
set logfile syslog facility log_daemon
set mailserver smtp.gmail.com port 587
    username "noreply@example.com" password "sldkjkfdsj"
    using tlsv1
    with timeout 30 seconds
set alert tech@example.com with reminder on 30 cycles
set httpd port 2812
allow example:slkdjlskdjflskjd

# SSH
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restarts
if 5 restarts within 5 cycles then timeout

# nginx
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop  program = "/etc/init.d/nginx stop"
if failed host 127.0.0.1 port 8080 then restart
if cpu is greater than 40% for 2 cycles then alert
if cpu > 60% for 5 cycles then restart
if 10 restarts within 10 cycles then timeout

# Varnish
check process varnish with pidfile /var/run/varnishd.pid
start program = "/etc/init.d/varnish start"
stop  program = "/etc/init.d/varnish stop"
if failed host 127.0.0.1 port 80 then restart
if cpu is greater than 40% for 2 cycles then alert
if cpu > 60% for 5 cycles then restart
if 10 restarts within 10 cycles then timeout</pre>
<p>That's all folks!</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/10/22/installing-varnish-with-nginx-passenger-and-monit-on-ubuntu-8-10-intrepid/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;10-12-09</title>
		<link>http://almosteffortless.com/2009/10/12/weekly-digest-10-12-09/</link>
		<comments>http://almosteffortless.com/2009/10/12/weekly-digest-10-12-09/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 15:17:43 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1756</guid>
		<description><![CDATA[Monthly Digest? ;)
Pomodoro
Pomodoro Desktop is a desktop application for Time Management on your Mac OSX. It is a simple but effective way to manage your (coding) time, and it's based on the Pomodoro technique
Clean CSS
Optmize and Format your CSS
Hacker News &#124; GitHub's Unicorn Setup
[Interesting comments as usual.]
Picnik
Photo editing the easy way, online in your browser. [...]]]></description>
			<content:encoded><![CDATA[<p>Monthly Digest? ;)</p>
<p><a href="http://pomodoro.ugolandini.com/">Pomodoro</a></p>
<blockquote><p>Pomodoro Desktop is a desktop application for Time Management on your Mac OSX. It is a simple but effective way to manage your (coding) time, and it's based on the Pomodoro technique</p></blockquote>
<p><a href="http://www.cleancss.com/">Clean CSS</a></p>
<blockquote><p>Optmize and Format your CSS</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=872283">Hacker News | GitHub's Unicorn Setup</a></p>
<blockquote><p>[Interesting comments as usual.]</p></blockquote>
<p><a href="http://www.picnik.com/">Picnik</a></p>
<blockquote><p>Photo editing the easy way, online in your browser. Picnik makes your photos fabulous with easy to use yet powerful editing tools. Tweak to your heart’s content, then get creative with oodles of effects, fonts, shapes, and frames.</p></blockquote>
<p><a href="http://github.com/blog/517-unicorn">Unicorn! - GitHub</a></p>
<blockquote><p>We’ve been running Unicorn for more than a month. Time to talk about it.</p></blockquote>
<p><a href="http://munin.projects.linpro.no/">Munin</a></p>
<blockquote><p>Munin the monitoring tool surveys all your computers and remembers what it saw. It presents all the information in graphs through a web interface. Its emphasis is on plug and play capabilities. After completing a installation a high number of monitoring plugins will be playing with no more effort.</p></blockquote>
<p><a href="http://litanyagainstfear.com/blog/2009/10/09/on-gem-forking/">On Gem Forking</a></p>
<blockquote><p>So, GitHub has recommended Gemcutter as an alternative to hosting gems on GitHub...</p></blockquote>
<p><a href="http://cloudvox.com/">Cloudvox</a></p>
<blockquote><p>API-driven phone calls, in minutes (call your code: AGI/AMI, HTTP, Asterisk-Java, Adhearsion). Cloudvox is the most practical, stable, open environment for API-driven phone calls.</p></blockquote>
<p><a href="http://github.com/blog/515-gem-building-is-defunct">Gem Building is Defunct</a></p>
<blockquote><p>We will continue to serve old gems at http://gems.github.com/ for at least one year. [New gems can't be built, though.]</p></blockquote>
<p><a href="http://jacobian.org/writing/star-is-unix/">* is Unix</a></p>
<blockquote><p>Ryan’s I like Unicorn because it’s Unix appears to have started a mini-meme of folks writing simple forking network servers in their language of choice. I’m really enjoying reading ‘em — they’re a sort of Rosetta Stone of network code...</p></blockquote>
<p><a href="http://chargify.com/index.html">Chargify</a></p>
<blockquote><p>Chargify simplifies recurring billing for Web 2.0 and SaaS companies.</p></blockquote>
<p><a href="http://www.slideshare.net/atmosorg/everything-i-know-about-open-source-i-learned-from-indie-hip-hop">Everything I know about Open Source I learned from Indie Hip Hop</a></p>
<blockquote><p>Slides from an Aloha on Rails presentation.</p></blockquote>
<p><a href="http://www.apple.com/downloads/dashboard/status/flipclock_thedashboardwidgetandgadgetdevelopment.html">FlipClock</a></p>
<blockquote><p>Get the FlipClock Widget for your Dashboard!</p></blockquote>
<p><a href="http://tomster.org/blog/nginx-and-varnish-on-mac-os-x">nginx and varnish on Mac OS X</a></p>
<blockquote><p>Since I'm a happy user of the macports collection already anyway, I let it do the 'heavy lifting' of actually installing nginx and varnish. In addition I provided a launchd startup item for varnish and also added a host entry for wahlcomputer to enable virtual hosting for nginx and varnish.</p></blockquote>
<p><a href="http://github.com/atmos/rack_hoptoad">atmos's rack_hoptoad</a></p>
<blockquote><p>A gem that provides exception notifications to hoptoad as rack middleware.</p></blockquote>
<p><a href="http://articles.slicehost.com/2009/3/4/ubuntu-intrepid-adding-an-nginx-init-script">Ubuntu Intrepid - adding an Nginx init script</a></p>
<blockquote><p>...let's go ahead and create one for easy control of Nginx, and to ensure it restarts on a reboot.</p></blockquote>
<p><a href="http://blog.madeofcode.com/post/194902314/generate-gem-yml-and-gems-for-rails">Generate gem.yml and .gems for Rails</a></p>
<blockquote><p>A rake task which will generate gem configuration files based on your “config.gem” specifications in Rails. This comes in handy when deploying to Engine Yard, or Heroku.</p></blockquote>
<p><a href="http://www.engineyard.com/blog/2009/custom-chef-recipes-with-engine-yard-cloud/">Custom Chef Recipes with Engine Yard Cloud</a></p>
<blockquote><p>One of the power user features of Engine Yard Cloud is the ability to use custom Chef recipes to install or configure anything that can run on Gentoo Linux that we have not already automated as part of the platform. This allows for extensive customizations of your environments and empowers you to run virtually all custom software you might need.</p></blockquote>
<p><a href="http://shjs.sourceforge.net/">SHJS</a></p>
<blockquote><p>SHJS is a JavaScript program which highlights source code passages in HTML documents. Documents using SHJS are highlighted on the client side by the web browser.</p></blockquote>
<p><a href="http://zdzolton.wordpress.com/2009/09/04/getting-ready-for-couchdb-0-10/">Getting ready for CouchDB 0.10</a></p>
<blockquote><p>I’ve setup a local copy of CouchDB, from the 0.10 branch, just to see if my application code could handle its awesome powers. Here are my two big takeaways...</p></blockquote>
<p><a href="http://blog.madeofcode.com/post/201282903/paperclip-s3-delayed-job-in-rails">Paperclip, S3 & Delayed Job in Rails</a></p>
<blockquote><p>Here’s how I use Paperclip (with storage on S3) and delayed_job to process images after they’re uploaded in the background.</p></blockquote>
<p><a href="http://37signals.com/svn/posts/1952-i-gave-a-talk-on-ui-fundamentals-for-programmers">Ryan Singer of 37signals - UI Fundamentals for Programmers</a></p>
<blockquote><p>I gave a talk on “UI Fundamentals for Programmers” at WindyCityRails in Chicago last month. The talks covered modeling, breaking apps into screens, visual techniques, flows, and a few coding tips. [This is a great talk. Highly recommended viewing.]</p></blockquote>
<p><a href="http://www.hilite.me/">Source code beautifier / syntax highlighter – convert code snippets to HTML</a></p>
<blockquote><p>hilite.me converts your code snippets into pretty-printed HTML format, easily embeddable into blog posts and websites.</p></blockquote>
<p><a href="http://themomorohoax.com/2009/09/21/keeping-controllers-empty-with-faux-attributes">Keeping controllers empty with faux attributes - Momoro Machine</a></p>
<blockquote><p>The barely any code way... use a fake attribute. Define an attribute setter on User, and then just make a small form in the view to set it.</p></blockquote>
<p><a href="http://garry.posterous.com/build-it-9">Build it</a></p>
<blockquote><p>The good innovation -- the innovation that makes the world a better place and builds real wealth in society -- that stuff is done by radically self-reliant creators who get their hands dirty. Not talkers. Not dreamers. Builders.</p></blockquote>
<p><a href="http://actionrails.com/services.html">ActionRails</a></p>
<blockquote><p>At ActionRails, we offer a variety of services designed to push your Rails developers to the next level... Application Evaluation; Weekly Code Reviews; Developer Hotline.</p></blockquote>
<p><a href="http://sivers.org/1pct">And if only 1% of those people...</a></p>
<blockquote><p>...he forgot there was a number lower than one percent...</p></blockquote>
<p><a href="http://www.caterina.net/archive/001196.html">Working hard is overrated</a></p>
<blockquote><p>Much more important than working hard is knowing how to find the right thing to work on.</p></blockquote>
<p><a href="http://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy">Nginx_As_a_Reverse_Proxy - Couchdb Wiki</a></p>
<blockquote><p>Nginx can serve as a reverse proxy to CouchDB for scenarios such as URL rewriting, load-balancing, access restriction, etc.</p></blockquote>
<p><a href="http://s3sync.net/wiki">S3Sync</a></p>
<blockquote><p>This is a ruby program that easily transfers directories between a local<br />
directory and an S3 bucket:prefix. It behaves somewhat, but not precisely, like the rsync program. [I can verify that this is an awesome little tool.]</p></blockquote>
<p><a href="http://japhr.blogspot.com/2009/09/full-stack-etag-support.html">Full Stack ETag Support</a></p>
<blockquote><p>The conclusion that I draw is that I definitely want to use Rack::Cache—100% improvement over reassembling the HTML on each request is too good to pass up. As for the 20% speed boost that full stack ETag buys me, I am not sure that the complexity that is introduced warrants the speed boost.</p></blockquote>
<p><a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/">Browser Cache Usage Exposed</a></p>
<blockquote><p>...reducing the number of HTTP requests has the biggest impact on reducing response time...</p></blockquote>
<p><a href="http://googleblog.blogspot.com/2009/09/place-pages-for-google-maps-there-are.html">Place Pages for Google Maps</a></p>
<blockquote><p>A Place Page is a webpage for every place in the world, organizing all the relevant information about it. By every place, we really mean *every* place — there are Place Pages for businesses, points of interest, transit stations, neighborhoods, landmarks and cities all over the world.</p></blockquote>
<p><a href="http://github.com/couchapp/couchapp">couchapp</a></p>
<blockquote><p>CouchApp is designed to structure standalone CouchDB application development for maximum application portability. CouchApp is a set of scripts and a jQuery plugin designed to bring clarity and order to the freedom of CouchDB's document-based approach.</p></blockquote>
<p><a href="http://groups.google.com/group/phusion-passenger/browse_thread/thread/c004030ab1471e01">nginx, worker_processes, and passenger_max_pool_size</a></p>
<blockquote><p>The Phusion Passenger pool size is independent from the number of<br />
Nginx worker processes that you have. Setting the number of Nginx workers to the number of CPU cores should be sufficient.</p></blockquote>
<p><a href="http://www.sinatrarb.com/extensions.html">Sinatra: Writing Extensions</a></p>
<blockquote><p>Sinatra includes an API for extension authors to help ensure that consistent behavior is provided for application developers.</p></blockquote>
<p><a href="http://daringfireball.net/2009/09/how_should_mac_apps_be_distributed">How Should Mac Apps Be Distributed?</a></p>
<blockquote><p>...but to make this work for apps delivered by disk image, users have to understand that they must copy the app from the image to their startup drive. This is where some get lost.</p></blockquote>
<p><a href="http://www.quirkey.com/blog/2009/09/15/sammy-js-couchdb-and-the-new-web-architecture/">Sammy.js, CouchDB, and the new web architecture</a></p>
<blockquote><p>Welcome to the new world. HTTP Databases and JSON Storage. The simple act of making the database and the browser more powerful on either end has destroyed the need for the middle tier.</p></blockquote>
<p><a href="http://github.com/blog/493-github-is-moving-to-rackspace">GitHub is Moving to Rackspace!</a></p>
<blockquote><p>In just a few short weeks we will be moving GitHub to a new home at Rackspace. We’re aware of the current stability and performance issues, and we want to let you know what we’re doing about it.</p></blockquote>
<p><a href="http://hurl.it/">hurl</a></p>
<blockquote><p>Hurl makes HTTP requests. Enter a URL, set some headers, then view the response. Perfect for APIs.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/10/12/weekly-digest-10-12-09/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pygments</title>
		<link>http://almosteffortless.com/2009/09/16/pygments/</link>
		<comments>http://almosteffortless.com/2009/09/16/pygments/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 05:38:38 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1719</guid>
		<description><![CDATA[I'm pleased to announce the immediate availability of http://pygments.appspot.com. It's an unofficial API for the Pygments syntax highlighting library. It's designed to provide syntax highlighting for web applications that don't have Python installed. You can think of it as an HTTP interface for Pygments. 
To use it, simply POST to http://pygments.appspot.com with "lang" and "code" [...]]]></description>
			<content:encoded><![CDATA[<p>I'm pleased to announce the immediate availability of <a href="http://pygments.appspot.com">http://pygments.appspot.com</a>. It's an unofficial API for the <a href="http://pygments.org/">Pygments</a> syntax highlighting library. It's designed to provide syntax highlighting for web applications that don't have Python installed. You can think of it as an HTTP interface for Pygments. </p>
<p>To use it, simply POST to http://pygments.appspot.com with "lang" and "code" parameters in the body. You'll receive pygmentized HTML back, which you can store for later display on your site.</p>
<p><script src="http://gist.github.com/188359.js"></script></p>
<p>I'm using it so that I can host <a href="http://flowcoder.com">Flowcoder</a> on <a href="http://heroku.com">Heroku</a>. I was really impressed with the ease of getting this Pygments app running on <a href="http://appengine.google.com/">Google App Engine</a>. GAE is very much like a Python version of Heroku, which means it's awesome.</p>
<p> I'm hoping that this little project will spike my interest in learning a bit more about Python, which actually doesn't seem as evil as all my Ruby friends have made it out to be :P</p>
<p>The <a href="http://github.com/trevorturk/pygments">source code is on github</a>, in case you're curious about how this all works. </p>
<p>Enjoy!</p>
<p><a href="http://pygments.appspot.com">http://pygments.appspot.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/09/16/pygments/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Passenger with nginx on Mac OS&#160;X</title>
		<link>http://almosteffortless.com/2009/09/16/passenger-with-nginx-on-mac-os-x/</link>
		<comments>http://almosteffortless.com/2009/09/16/passenger-with-nginx-on-mac-os-x/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 20:19:42 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1690</guid>
		<description><![CDATA[Setting up nginx with Passenger support turns out to be fairly easy. 
Start by making sure you have the most recent version of Passenger, then install the nginx module. This will actually install and compile nginx with the Passenger module enabled, which is handy. Choose the recommended/default options when the installer prompts you.
sudo gem update [...]]]></description>
			<content:encoded><![CDATA[<p>Setting up <a href="http://www.nginx.net/">nginx</a> with <a href="http://www.modrails.com/">Passenger</a> support turns out to be fairly easy. </p>
<p>Start by making sure you have the most recent version of Passenger, then install the nginx module. This will actually install and compile nginx with the Passenger module enabled, which is handy. Choose the recommended/default options when the installer prompts you.</p>
<pre>sudo gem update passenger
sudo passenger-install-nginx-module</pre>
<p>Then, open up the nginx config file:</p>
<pre>mate /opt/nginx/conf/nginx.conf</pre>
<p>Add the following line to the top of the file:</p>
<pre>daemon off;</pre>
<p>This will prevent the "502 Bad Gateway" error you may see otherwise. I'm not sure why this is necessary, but I read about it <a href="http://www.ruby-forum.com/topic/161424">here</a>, and it seems to do the trick. nginx specifies that this should only be used for development, though. </p>
<p>Next, find the <i>http {</i> block, which should start around line 15 or so. You'll want to add a <i>server {</i> block within the <i>http {</i> block for each of your Rails/Rack applications, like so:</p>
<pre>server {
   listen 80;
   server_name eldorado.local;
   root /Users/trevorturk/Code/eldorado/public;
   passenger_enabled on;
   rails_env development;
}</pre>
<p>You'll need an entry in your <i>hosts</i> file if you don't already have one. Simply open up the file:</p>
<pre>mate /etc/hosts</pre>
<p>...and add lines for each of the apps you plan to run, like so:</p>
<pre>127.0.0.1 eldorado.local </pre>
<p>Now, we can set up a launchd item, so that nginx will start up automatically after a system reboot. Create a new plist file by opening it up in TextMate:</p>
<pre>mate /System/Library/LaunchDaemons/nginx.plist</pre>
<p>...and paste the following code in, which was kindly provided for us by this <a href="http://innenin.blogspot.com/2009/05/running-nginx-on-osx.html">helpful person</a>:</p>
<p><script src="http://gist.github.com/188167.js"></script></p>
<p>Then, run the following command to load it:</p>
<pre>launchctl load -F /System/Library/LaunchDaemons/nginx.plist</pre>
<p>Now, you can reboot your system and make sure it's all working as expected by visiting <a href="http://eldorado.local">http://eldorado.local</a>, or whatever address you've configured your application to be on. </p>
<p>I believe this nginx installation will override the existing Apache installation you may have running. This doesn't bother me, so I opened up my System Preferences -> Sharing prefpane and unchecked the Web Sharing box, so Apache is no longer running. If you have any ideas about how to keep both services running cooperatively, please do let me know. </p>
<p><b>Update</b>: Here are some additionally configuration options I'm using, which I cobbled together from various sources after Googling for things like "nginx, rails, gzip, expires" and such. Their powers combined, and I seem to have a <a href="http://developer.yahoo.com/yslow/">YSlow</a>-approved setup.</p>
<p>Just above your <i>server {</i> block, around line 40, add the following:</p>
<pre>gzip on;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6]\.";
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;</pre>
<p>That should cover gzip well enough. </p>
<p>Then, amend the aforementioned <i>server {</i> block to include some far future expires goodness that takes advantage of the Rails asset_tag helpers:</p>
<pre>server {
  listen 80;
  server_name eldorado.local;
  root /Users/trevorturk/Code/eldorado/public;
  passenger_enabled on;
  rails_env development;
  location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
      expires max;
      break;
  }
}</pre>
<p>These two configuartion tweeks are, I believe, the rough equivalent of the <a href="http://almosteffortless.com/2009/06/11/speed-up-your-apachepassenger-rails-app-in-2min/">technique previously discussed</a> on this blog for Apache. </p>
<p>Of course, any additional suggestions, comments, or insights you may have would be most welcome. I'm new to this whole nginx thing, but I'm enjoying it so far. </p>
<p><b>Update</b>: Here's an easy way to reload nginx, if you need to make a change to your conf. Make sure to have the following in your <i>/opt/nginx/conf/nginx.conf</i> file:</p>
<pre>pid /var/run/nginx.pid;</pre>
<p>Then, you can make an alias for the reload task in your <i>~/.bash_profile</i>:</p>
<pre>alias nr='sudo kill -HUP `cat /var/run/nginx.pid`'</pre>
<p>In case you're interested, you can check out my full <i>nginx.conf</i> file for local development here: </p>
<p><a href="http://gist.github.com/191331">http://gist.github.com/191331</a></p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/09/16/passenger-with-nginx-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Static: a super simple Rails CMS for&#160;Heroku</title>
		<link>http://almosteffortless.com/2009/09/11/static-a-super-simple-rails-cms-for-heroku/</link>
		<comments>http://almosteffortless.com/2009/09/11/static-a-super-simple-rails-cms-for-heroku/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 22:20:18 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1665</guid>
		<description><![CDATA[Static is a super simple Rails CMS built for Heroku. It supports file uploads to S3, makes image thumbnails, lets you make pages, has an optional admin password, and a customizable application layout that supports erb. It's really easy to install and deploy to Heroku. If you have an S3 account, you can get up [...]]]></description>
			<content:encoded><![CDATA[<p>Static is a super simple Rails CMS built for Heroku. It supports file uploads to S3, makes image thumbnails, lets you make pages, has an optional admin password, and a customizable application layout that supports erb. It's really easy to install and deploy to Heroku. If you have an S3 account, you can get up and running in under 5 minutes. </p>
<p>I made this little app a few weekends back because it scratched a personal itch of mine. I maintain a few small "static" or "brochure" <a href="http://seemaxwork.com/">sites</a> <a href="http://psalmuno.com/">for</a> <a href="http://amandagad.com/">friends</a>, which means I get to do boring HTML updates whenever they have a new picture or video they want to add. I figured that I could do a little upfront work and let them to do the rest. So, I looked around for a simple Rails CMS, but I couldn't find anything simple enough. Thusly, Static was born. </p>
<p>It doesn't do much for you, but that's the point. You get a really simple little Rails app that lets you add pages, upload stuff, and wrap everything in a layout that can be updated online. If you ever need to add any cool new functionality (like displaying recent Twitter updates?) you can do it using Ruby/Rails. No more lame old hacked-together PHP sites ;) Static's well-tested, 175 line code base could be the solid foundation for a site that grows over time. </p>
<p>This thing does exactly and only what I need it to do, but I'm happy to accept patches and such. Give it a shot, fork away, and let me know if you have something good for me to pull. </p>
<p><a href="http://github.com/trevorturk/static/">http://github.com/trevorturk/static/</a></p>
<p><a href="http://github.com/trevorturk/static/"><img style="margin-left:-30px;" src="http://s3.amazonaws.com/almosteffortless/static.png" /></a></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/09/11/static-a-super-simple-rails-cms-for-heroku/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;9-11-09</title>
		<link>http://almosteffortless.com/2009/09/11/weekly-digest-9-11-09/</link>
		<comments>http://almosteffortless.com/2009/09/11/weekly-digest-9-11-09/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 21:55:51 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1662</guid>
		<description><![CDATA[Still not weekly ;)
Github and Engineyard part ways
[This Hacker News thread has some more detail from EY and GH. EY couldn't afford to continue with the preexisting arrangement, so GH is moving to Rackspace.]
Tornado Web Server
Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application [...]]]></description>
			<content:encoded><![CDATA[<p>Still not weekly ;)</p>
<p><a href="http://news.ycombinator.com/item?id=817864">Github and Engineyard part ways</a></p>
<blockquote><p>[This Hacker News thread has some more detail from EY and GH. EY couldn't afford to continue with the preexisting arrangement, so GH is moving to Rackspace.]</p></blockquote>
<p><a href="http://www.tornadoweb.org/">Tornado Web Server</a></p>
<blockquote><p>Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application is written using a web framework that looks a bit like web.py or Google's webapp, but with additional tools and optimizations to take advantage of the underlying non-blocking infrastructure.</p></blockquote>
<p><a href="http://www.techcrunch.com/2009/09/09/twitter-and-the-revenue-dilemma/">Twitter And The Revenue Dilemma</a></p>
<blockquote><p>The company has to decide whether or not to turn revenue on. It sounds ridiculous, but it is a real decision. Once revenue is on, how the company is valued by the market can change dramatically.</p></blockquote>
<p><a href="http://groups.google.com/group/emm-ruby/browse_thread/thread/7d98a9bdf06c77c0">Using Ruby Enterprise for Rails script/console</a></p>
<blockquote><p>If you want to just use REE for script/console, without setting it for<br />
everything, you can...</p></blockquote>
<p><a href="http://blog.monochrome.co.uk/2009/02/if-architects-had-to-work-like-software-developers/">If architects had to work like software developers</a></p>
<blockquote><p>Please don’t bother me with small details right now. Your job is to develop the overall plans for the house: get the big picture. At this time, for example, it is not appropriate to be choosing the color of the carpet. However, keep in mind that my wife likes blue.</p></blockquote>
<p><a href="http://www.tbray.org/ongoing/When/200x/2009/09/02/Ravelry">Ravelry</a></p>
<blockquote><p>What we’ve done only takes 1 not-even-fulltime (I have lots of other duties) programmer/sysadmin and it’s very cool that the software available today makes this possible. It’s important — we can’t be spending money on “professional services” and we only have 3.5 employees.</p></blockquote>
<p><a href="http://epeus.blogspot.com/2009/03/how-twitter-works-in-theory.html">How Twitter works in theory</a></p>
<blockquote><p>It is said that an economist is someone who sees something that works in practice and wonders whether it works in theory. Twitter clearly works in practice... and I wanted to write about some theories that help me understand it.</p></blockquote>
<p><a href="http://www.emeraldion.it/software/widgets/minibatterystatus.html">MiniBatteryStatus Widget</a></p>
<blockquote><p>MiniBatteryStatus is a small Dashboard widget that monitors battery status, charge percentage and remaining battery life. Integrated with Growl to alert you when it's time to recharge your battery.</p></blockquote>
<p><a href="http://thewebfellas.com/blog/2009/8/29/protecting-your-paperclip-downloads/comments/8430#comment-8430">Protecting your Paperclip downloads</a></p>
<blockquote><p>[Excellent write-up that covers protected downloads using Apache, nginx, the local filsystem, and/or Amazon S3. Awesome.]</p></blockquote>
<p><a href="http://belitsky.info/freelance/yehuda-katz/">Yehuda Katz Interview</a></p>
<blockquote><p>A pretty good idea would be to contribute heavily to open source, and then look for work at companies that look at open source work as equivalent to a resume. If you build up enough really good open source work, you'll soon find people clamoring to hire you. [Even with my limited experience, I've found this to be true. Working in Open Source is a really efficient way to improve your skills, and helps immensely when looking for work.]</p></blockquote>
<p><a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars">Mac OS X 10.6 Snow Leopard: the Ars Technica review - Ars Technica</a></p>
<blockquote><p>Mac OS X 10.6, aka Snow Leopard has landed. This time around, Apple goes light on the glitz in favor of some heavy work under the hood. John Siracusa dives deep into Apple's new OS offering to see what's new, what's still the same, and whether it's worth upgrading.</p></blockquote>
<p><a href="http://lab.andre-michelle.com/tonematrix">aM laboratory</a></p>
<blockquote><p>Simple sinewave synthesizer triggered by an ordinary 16step sequencer. Each triggered step causes a force on the underlaying wave-map, which makes it more cute.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/09/11/weekly-digest-9-11-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Poor Man&#8217;s Heroku&#160;Backups</title>
		<link>http://almosteffortless.com/2009/09/11/poor-mans-heroku-backups/</link>
		<comments>http://almosteffortless.com/2009/09/11/poor-mans-heroku-backups/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 19:35:34 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1645</guid>
		<description><![CDATA[Here's a quick and dirty way to back up all of your Heroku-powered databases using their Taps gem with one easy command. It works well enough for my simple needs, but any improvements you've got would be most welcome!
Just add the following to your ~/.bash_profile, and you're good to go:

]]></description>
			<content:encoded><![CDATA[<p>Here's a quick and dirty way to <a href="http://docs.heroku.com/backups">back up</a> all of your <a href="http://heroku.com">Heroku</a>-powered databases using their <a href="http://adam.blog.heroku.com/past/2009/2/11/taps_for_easy_database_transfers/">Taps</a> gem with one easy command. It works well enough for my simple needs, but any improvements you've got would be most welcome!</p>
<p>Just add the following to your ~/.bash_profile, and you're good to go:</p>
<p><script src="http://flowcoder.com/59.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/09/11/poor-mans-heroku-backups/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;8-29-09</title>
		<link>http://almosteffortless.com/2009/08/29/weekly-digest-8-29-09/</link>
		<comments>http://almosteffortless.com/2009/08/29/weekly-digest-8-29-09/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 01:19:50 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1641</guid>
		<description><![CDATA[3 bugs that will screw you
Definitly turn up your paranoia when dealing with e-mail, security or payements. If someone’s picture doesn’t upload occasionally due to an ill-conceived model, that not a huge problem. If 30k people get sent a bad e-mail, hacked, or overcharged due to three lines of code, that’s a serious bummer.
5 Tips [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://themomorohoax.com/2009/08/26/3-bugs-that-will-screw-you">3 bugs that will screw you</a></p>
<blockquote><p>Definitly turn up your paranoia when dealing with e-mail, security or payements. If someone’s picture doesn’t upload occasionally due to an ill-conceived model, that not a huge problem. If 30k people get sent a bad e-mail, hacked, or overcharged due to three lines of code, that’s a serious bummer.</p></blockquote>
<p><a href="http://www.engineyard.com/blog/2009/5-tips-for-sphinx-indexing/">5 Tips for Sphinx Indexing</a></p>
<blockquote><p>Sphinx is our favorite tool for the job. Written in C++ by Andrew Aksyonoff, and originally released to open source in 2001, Sphinx is a blazing fast search engine. Considering that fast and complex full-text searching is a somewhat frequent need, I’ve put together this post with my top five tips for implementing Sphinx.</p></blockquote>
<p><a href="http://toffeenut.deviantart.com/art/Metal-Lights-Wallpaper-86093066">Metal Lights Wallpaper by ~ToffeeNut on deviantART</a></p>
<blockquote><p>Minimal desktop with two styles: Spotlights and Streaks.</p></blockquote>
<p><a href="http://www.macosxhints.com/article.php?story=20090608212411305">Remove the Add Bookmark button from Safari 4</a></p>
<blockquote><p>By default, the Add Bookmark button (+) is attached to the URL address in Safari 4. There isn't an option to turn it off, but there's a workaround...</p></blockquote>
<p><a href="http://garrickvanburen.com/archive/productivity-tip-empty-your-dock">Productivity Tip: Empty Your Dock</a></p>
<blockquote><p>Inspired partially by my preparation for the Tiger upgrade and partially by my proficiency with QuickSilver, I’ve emptied everything out of the doc. Only the Finder and Trash are persistent. Everything else, in when in use, out when not.</p></blockquote>
<p><a href="http://minimalmac.com/post/159796749/the-menubar-challenge">The Menubar Challenge</a></p>
<blockquote><p>...taking everything you own, save for the bare essentials, and moving it into storage. For a set period of time, retrieve items from the store when needed. Anything not accessed after said set period of time you likely do not really need and should be disposed of.</p></blockquote>
<p><a href="http://zygat3r.deviantart.com/art/Dark-Wood-58266349">Dark Wood</a></p>
<blockquote><p>The wood-like wallpaper pack. Hope u'll like it.</p></blockquote>
<p><a href="http://www.techcrunch.com/2009/08/23/the-funded-publishes-ideal-first-round-term-sheet/">The Funded Publishes Ideal First Round Term Sheet</a></p>
<blockquote><p>Start with the Y Combinator docs for your first early angel round, and move to Adeo’s document in your first real round of venture capital.</p></blockquote>
<p><a href="http://gist.github.com/173604">Poor Man's Deploy</a></p>
<blockquote><p>Start a Sinatra server on port 4000; GET / to that server triggers a git pull and mod_rails restart; Hit port 4000 locally after pushing</p></blockquote>
<p><a href="http://blog.antarestrader.com/posts/116">Antares Trader Blog</a></p>
<blockquote><p>Previous on this blog alluded to my misgivings about the big merge between Rails and Merb. I liked the trimmed-down, uncomplicated API of Merb. I knew what it was going to do and how to make non-standard things happen. Well it looks like Rails 3 is getting some of that mojo.</p></blockquote>
<p><a href="http://r09.railsrumble.com/">Rails Rumble :: Welcome to the '09 Rumble</a></p>
<blockquote><p>The Rails Rumble is a 48 hour web application development competition. As a contestant, your team gets one weekend to design, develop, and deploy the best web property that you can, using the awesome power of Ruby and Rails.</p></blockquote>
<p><a href="http://www.irradiatedsoftware.com/sizeup/">SizeUp</a></p>
<blockquote><p>SizeUp allows you to quickly position a window to fill exactly half the screen (splitscreen), a quarter of the screen (quadrant), full screen, or centered via the menu bar or configurable system-wide shortcuts (hotkeys). Similar to "tiled windows" functionality available on other operating systems.</p></blockquote>
<p><a href="http://blog.everyblock.com/2009/aug/17/acquisition/">MSNBC.com acquires EveryBlock</a></p>
<blockquote><p>After considering a number of options (some wildly different from others), we decided that working with MSNBC.com was the best fit for our site and our team.</p></blockquote>
<p><a href="http://www.changedetection.com/">ChangeDetection</a></p>
<blockquote><p>ChangeDetection.com provides page change monitoring and notification services to internet users worldwide. Anyone can use our service to monitor any website page for changes.</p></blockquote>
<p><a href="http://adam.blog.heroku.com/past/2009/7/15/video_game_lessons_for_business_strategy/">Video Game Lessons for Business Strategy</a></p>
<blockquote><p>I see video games as a petri dish, a place where the challenges and rewards of the real world are simulated in a simpler, more discrete fashion. Often the challenges faced remind me of the same challenges I face in my work as an entrepreneur. In the spirit of Scott Berkun’s Management lessons from Gears of War 2, I present you three business lessons I’ve learned from video games.</p></blockquote>
<p><a href="http://www.brandonwalkin.com/blog/2009/08/10/managing-ui-complexity/">Managing UI Complexity</a></p>
<blockquote><p>I’ve spent the past year redesigning a particularly complex application with my primary focus being on reducing complexity. In this article, I’ll go over some of the issues surrounding complexity and techniques that can be used to manage it.</p></blockquote>
<p><a href="http://github.com/aanand/deadweight/tree/master">aanand's deadweight</a></p>
<blockquote><p>Deadweight is RCov for CSS, kind of. Given a set of stylesheets and a set of URLs, it determines which selectors are actually used and reports which can be "safely" deleted.</p></blockquote>
<p><a href="http://github.com/blog/471-continuous-integration-spring-cleaning">Continuous Integration Spring Cleaning at GitHub</a></p>
<blockquote><p>We’re currently in the process of revamping our test suite (which we’ll blog about in the future) and moving servers, so I thought it’d be a good time to re-evaluate our options.</p></blockquote>
<p><a href="http://ihardlyknowher.com/faq.html">I Hardly Know Her</a></p>
<blockquote><p>IHKH is a minimalist Flickr viewer. Captions and titles are omitted and metadata is hidden until needed. Images can be made large in place.</p></blockquote>
<p><a href="http://github.com/laserlemon/vestal_versions/tree/master">laserlemon's vestal_versions</a></p>
<blockquote><p>vestal_versions keeps in the spirit of consolidating to one versions table, polymorphically associated with its parent models. But it goes one step further by storing a serialized hash of only the models’ changes.</p></blockquote>
<p><a href="http://www.ted.com/talks/lang/eng/alain_de_botton_a_kinder_gentler_philosophy_of_success.html">A kinder, gentler philosophy of success</a></p>
<blockquote><p>Alain de Botton examines our ideas of success and failure -- and questions the assumptions underlying these two judgments. Is success always earned? Is failure? He makes an eloquent, witty case to move beyond snobbery to find true pleasure in our work.</p></blockquote>
<p><a href="http://redbot.org/">RED: <></a></p>
<blockquote><p>RED is a robot that checks HTTP resources to see how they'll behave, pointing out common problems and suggesting improvements. Although it is not a HTTP conformance tester, it can find a number of HTTP-related issues.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/08/29/weekly-digest-8-29-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;8-10-09</title>
		<link>http://almosteffortless.com/2009/08/10/weekly-digest-8-10-09/</link>
		<comments>http://almosteffortless.com/2009/08/10/weekly-digest-8-10-09/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 15:41:12 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1599</guid>
		<description><![CDATA[Weekly in name only ;)
What's New in Edge Rails: Default RESTful Rendering
Controller responders handle the chore of matching the HTTP request method and the resource format type to determine what type of response should be sent. And since REST is so well-defined it’s very easy to establish a default responder to handle the basics.
Out of [...]]]></description>
			<content:encoded><![CDATA[<p>Weekly in name only ;)</p>
<p><a href="http://ryandaigle.com/articles/2009/8/10/what-s-new-in-edge-rails-default-restful-rendering">What's New in Edge Rails: Default RESTful Rendering</a></p>
<blockquote><p>Controller responders handle the chore of matching the HTTP request method and the resource format type to determine what type of response should be sent. And since REST is so well-defined it’s very easy to establish a default responder to handle the basics.</p></blockquote>
<p><a href="http://www.nytimes.com/2009/08/02/magazine/02cooking-t.html?_r=1&pagewanted=print">Out of the Kitchen, Onto the Couch</a></p>
<blockquote><p>“Here’s an analogy,” Balzer said. “A hundred years ago, chicken for dinner meant going out and catching, killing, plucking and gutting a chicken. Do you know anybody who still does that? It would be considered crazy! Well, that’s exactly how cooking will seem to your grandchildren: something people used to do when they had no other choice. Get over it.”</p></blockquote>
<p><a href="http://www.threeriversinstitute.org/blog/?p=333">Approaching a Minimum Viable Product</a></p>
<blockquote><p>The purpose of the MVP is to answer your most pressing question, to validate your most pressing business assumption. To create an MVP work backwards from your question, not forwards from a feature list. Invest as little as possible to answer the question because after this there will be another question and another and you’ll need enough money to answer them all.</p></blockquote>
<p><a href="http://m.onkey.org/2009/8/7/save-save/comments/11157#comment-11157">save! > save</a></p>
<blockquote><p>When you’re not expecting something to fail, always use the methods that raise exceptions on failure.</p></blockquote>
<p><a href="http://ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with">What's New in Edge Rails: Cleaner RESTful Controllers w/ respond_with</a></p>
<blockquote><p>REST is a first-class citizen in the Rails world, though most of the hard work is done at the routing level. The controller stack has some niceties revolving around mime type handling with the respond_to facility but, to date, there’s not been a lot built into actionpack to handle the serving of resources.</p></blockquote>
<p><a href="http://github.com/cldwalker/hirb/tree/master">cldwalker's hirb</a></p>
<blockquote><p>A mini view framework for console/irb that's easy to use, even while under its influence. Console goodies include a no-wrap table, auto-pager, tree and menu.</p></blockquote>
<p><a href="http://github.com/josevalim/simple_form/tree/master">josevalim's simple_form</a></p>
<blockquote><p>Simple easy contact form for Rails with I18n, validations, attachments and request information.</p></blockquote>
<p><a href="http://blog.envylabs.com/2009/08/the-rails-state-machine/">The Rails State Machine</a></p>
<blockquote><p>Ruby on Rails recently added a built-in ActiveModel::StateMachine implementation and even more recently tied it in to ActiveRecord.  And, for being a built-in library, it’s pretty damned fully-featured.</p></blockquote>
<p><a href="http://github.com/blog/470-deployment-script-spring-cleaning">Deployment Script Spring Cleaning at GitHub</a></p>
<blockquote><p>As we get ready to upgrade our servers I thought it’d be a good time to upgrade our deployment process. Currently pushing out a new version of GitHub takes upwards of 15 minutes. Ouch. My goal: one minute deploys (excluding server restart time).</p></blockquote>
<p><a href="http://quickmagick.rubyforge.org/">Quick_magick</a></p>
<blockquote><p>QuickMagick is a gem for easily accessing ImageMagick command line tools from Ruby programs.</p></blockquote>
<p><a href="http://github.com/GreenAsJade/s3-swf-upload-plugin/tree/master">GreenAsJade's s3-swf-upload-plugin</a></p>
<blockquote><p>A rails plugin which allow user upload files to S3 through an embedded flash directly. This fork has environment setting of amazon creds (to avoid hardcode in app), configurable message for the select button, bugfix on submit-without-select, much improved feedback to the user about what is happening, ability to check the file they selected, before it gets actually uploaded.</p></blockquote>
<p><a href="http://gigaom.com/2009/08/01/rss-subscribers-or-twitter-followers-which-are-worth-more/">RSS Subscribers or Twitter Followers: Which Are Worth More?</a></p>
<blockquote><p>I would need to test first to find the optimal valuation, but I am guessing it would be between 5 and 10 Twitter followers for each RSS subscriber.</p></blockquote>
<p><a href="http://www.tbray.org/ongoing/When/200x/2009/07/29/Feeds-and-Streams-and-People">You Have to Choose Who To Read</a></p>
<blockquote><p>The wonderful thing is that in A.D. 2009, the option of reading primary sources is open to anybody who’s willing to take a little trouble.</p></blockquote>
<p><a href="http://inessential.com/2009/07/30/anatomy_of_a_feature">Anatomy of a feature</a></p>
<blockquote><p>“Oh, it’s easy, just a quick http call. I could write a script to do it in like 20 seconds.” But of course it’s not as simple as just writing a quick script. It’s tempting to think that adding a feature like this is just about adding the functionality — but there’s a bunch more to it than that.</p></blockquote>
<p><a href="http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/">up and running with cassandra</a></p>
<blockquote><p>I think that Cassandra is the most promising current implementation of a runtime distributed database, but much work remains to be done. We're beginning to use Cassandra at Twitter</p></blockquote>
<p><a href="http://startuplessonslearned.blogspot.com/2009/07/embrace-technical-debt.html">Embrace technical debt</a></p>
<blockquote><p>As in many scalability decisions, we’d have been much better off investing in agility, so that we could change the architecture in response to actual customer demand, rather than trying to predict the future. That’s what Just-in-time Scalability is all about. Sometimes quick and dirty actually incurs less debt.</p></blockquote>
<p><a href="http://cssprism.com/">CSS Prism</a></p>
<blockquote><p>Enter the URL of any CSS file to view and modify its color spectrum.</p></blockquote>
<p><a href="http://www.paulgraham.com/ramenprofitable.html">Ramen Profitable</a></p>
<blockquote><p>Now that the term "ramen profitable" has become widespread, I ought to explain precisely what the idea entails.</p></blockquote>
<p><a href="http://www.37signals.com/svn/posts/1819-basecamp-now-with-more-vroom">Basecamp, now with more vroom</a></p>
<blockquote><p>To make a long story a little less long, we saw some pretty extreme performance improvements from moving Basecamp out of a virtualized environment and back onto dedicated hardware.</p></blockquote>
<p><a href="http://progit.org/">Pro Git Book</a></p>
<blockquote><p>This is the website for the Pro Git book, written by Scott Chacon and published by Apress. Here you can find the full content of the book, a blog with tips and updates about Git and the book and open source projects related to Git or referenced in the book.</p></blockquote>
<p><a href="http://blog.wyeworks.com/2009/7/27/drag-drop-sortable-lists">Drag & Drop Sortable Lists</a></p>
<blockquote><p>Time has come for us to make a sortable list, and let’s face it, drag&drop are the prettiest ones. So, let me explain how to proceed.</p></blockquote>
<p><a href="http://developer.yahoo.com/ypatterns/parent.php?pattern=reputation">Reputation - Yahoo! Design Pattern Library</a></p>
<blockquote><p>A person participating in a social structure expects to develop a reputation and hopes for insight into the reputations of others, but each designed model of participation and reputation embodies its own set of biases and incentive structures. Balancing these forces determines in large measure the success or failure of a social system.</p></blockquote>
<p><a href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub</a></p>
<blockquote><p>A simple, open, web-hook-based pubsub protocol & open source reference implementation.</p></blockquote>
<p><a href="http://sethgodin.typepad.com/seths_blog/2009/07/death-spiral.html">Death spiral!</a></p>
<blockquote><p>As Tom Peters says, "You can't shrink your way to greatness," and yet that's what so many dying businesses try to do. They hunker down and wait for things to get better, but they don't. This isn't a dip, it's a cul de sac. It's over.</p></blockquote>
<p><a href="http://daringfireball.net/2009/07/pay_walls">Pay Walls</a></p>
<blockquote><p>Newsstand and subscription prices have never been the main source of revenue for newspapers anyway — advertising is. But they can’t make as much money from web advertising as from print for several reasons. Pre-Internet, newspapers had inordinate control over the supply of news, and therefore over the supply of advertising, and they grew fat on the profits.</p></blockquote>
<p><a href="http://blog.railsrumble.com/2009/7/23/this-bird-s-ready-to-rumble">Rails Rumble - This Bird's Ready to Rumble</a></p>
<blockquote><p>Of course, even applications that aren’t quite so Twitter-centric can benefit from some Twitter integration. Here’s a list of some resources that may inspire you to include them in your Rumble application in some way.</p></blockquote>
<p><a href="http://railstips.org/2009/7/21/uploadify-and-rails23">Uploadify and Rails 2.3</a></p>
<blockquote><p>A few weeks back we (Steve and I) added multiple asset upload to Harmony using Uploadify. If you are thinking that sounds easy, you would be sorely mistaken.</p></blockquote>
<p><a href="http://github.com/madx/rackable/tree/master">madx's rackable</a></p>
<blockquote><p>Rackable is a tiny module that aims to make any Ruby object Rack-friendly and provide it with a REST-like interface. Basically, what it does is providing an object with a call() method that uses the Rack environement to dispatch to a method, giving helper objects such as headers, query parameters, ...</p></blockquote>
<p><a href="http://github.com/grosser/text_filter/tree/master">grosser's text_filter</a></p>
<blockquote><p>ActiveRecord / Rails Filter Text Fields Before Assigning them</p></blockquote>
<p><a href="http://railscasts.com/episodes/163-self-referential-association">Railscasts Self-Referential Association</a></p>
<blockquote><p>Creating a social networking site often requires a self-referential association on the User model to define friends/followers. In this episode I show how to do exactly that.</p></blockquote>
<p><a href="http://www.panic.com/~wade/picker/">Developer Color Picker</a></p>
<blockquote><p>A custom color picker designed specifically for developers. Makes getting colors out of Photoshop/Acorn mock-ups quick and easy.</p></blockquote>
<p><a href="http://www.collegemogul.com/content/plenty-drupal-jobs-computer-science-students">Drupal Job Boards</a></p>
<blockquote><p>If you're just getting started in computer science or looking to specialize in a web technology, then you should definitely look into Drupal. Jobs in the marketplace are in high demand, especially compared to some of the other CMS platforms. The number of Drupal job opportunities continues to increase.</p></blockquote>
<p><a href="http://paulgraham.com/makersschedule.html">Maker's Schedule, Manager's Schedule</a></p>
<blockquote><p>Those of us on the maker's schedule are willing to compromise. We know we have to have some number of meetings. All we ask from those on the manager's schedule is that they understand the cost.</p></blockquote>
<p><a href="http://www.therailsway.com/2009/7/22/do-it-later-with-delayed-job">Do it Later With Delayed Job</a></p>
<blockquote><p>The killer feature that delayed_job has is send_later, this lets you transparently turn a method call on a class or object into a delayed_job. It also supports declaring certain methods to be handled asynchronously in an environment file...</p></blockquote>
<p><a href="http://files.getdropbox.com/u/2/app.html">DropBox Y Combinator Application</a></p>
<blockquote><p>Y Combinator Funding Application, Summer 2007, DropBox</p></blockquote>
<p><a href="http://wiki.apache.org/incubator/TrafficServerProposal">TrafficServerProposal Apache Proposal from Yahoo</a></p>
<blockquote><p>Traffic Server fills a need for a fast, extensible and scalable HTTP proxy and caching. We have a production proven piece of software that can deliver HTTP traffic at high rates, and can scale well on modern SMP hardware. We have benchmarked Traffic Server to handle in excess of 35,000 RPS on a single box. Traffic Server has a rich feature set, implementing most of HTTP/1.1 to the RFC specifications.</p></blockquote>
<p><a href="http://daringfireball.net/2009/07/charging_for_access_to_news_sites">Daring Fireball: Charging for Access to News Sites</a></p>
<blockquote><p>...and it’s not really surprising that they’re failing to evolve. The decision-makers — the executives sitting atop large non-editorial management bureaucracies — are exactly the people who need to go if newspapers are going to remain profitable.</p></blockquote>
<p><a href="http://github.com/cldwalker/alias/tree/master">cldwalker's alias</a></p>
<blockquote><p>Creates, manages and saves aliases for class methods, instance methods, constants, delegated methods and more.</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=713339">Why Does Time Go Faster As We Get Older?</a></p>
<blockquote><p>If you travel to Australia, and the yield sign says "Give Way",you notice it again. That's why travel is so memorable... As we get older, unfamiliar things and new perceptions are fewer and fewer... Thus it seems that time is passing faster... My own philosophy, which I often forget to follow, is to optimize my perceived lifespan by doing as many unfamiliar things as possible.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/08/10/weekly-digest-8-10-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;7-19-09</title>
		<link>http://almosteffortless.com/2009/07/19/weekly-digest-7-19-09/</link>
		<comments>http://almosteffortless.com/2009/07/19/weekly-digest-7-19-09/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 16:09:14 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1567</guid>
		<description><![CDATA[Fever and the Future of Feed Readers
I’m not sure what the solution is here. Feed readers as we’ve known them are dying, but it’s as yet unclear what will take their place. Filtering feeds for relevance algorithmically seems all but fruitless; filtering through the social graph is only a slight improvement, but misses the rare [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://al3x.net/2009/07/18/fever-and-the-future-of-feed-readers.html">Fever and the Future of Feed Readers</a></p>
<blockquote><p>I’m not sure what the solution is here. Feed readers as we’ve known them are dying, but it’s as yet unclear what will take their place. Filtering feeds for relevance algorithmically seems all but fruitless; filtering through the social graph is only a slight improvement, but misses the rare content that may only strike a chord with a small audience.</p></blockquote>
<p><a href="http://giantrobots.thoughtbot.com/2009/7/17/the-journey-to-ruby-1-9">The Journey to Ruby 1.9</a></p>
<blockquote><p>Here’s some tips and tricks for those who want to upgrade their own Ruby install and have their gems to be compatible.</p></blockquote>
<p><a href="http://afreshcup.com/2009/07/12/big-old-rails-template/">Big Old Rails Template from A Fresh Cup</a></p>
<blockquote><p>Here’s a list of what this template sets up...</p></blockquote>
<p><a href="http://inessential.com/2009/07/16/dont_offer_50_for_your_favorite_feat">Don’t offer $50 for your favorite feature</a></p>
<blockquote><p>I bet every Mac and iPhone developer (and probably some Windows developers too) has heard this at least once, if not dozens of times, from someone who uses their software: “I will PayPal you $50 right now if you will add this feature for me.”</p></blockquote>
<p><a href="http://orderedlist.com/articles/structural-tags-in-html5">Structural Tags in HTML5</a></p>
<blockquote><p>The HTML5 specification has added quite a few interesting and useful tags for structuring your markup. For a majority of everyday uses, these tags will replace many of our typical div entries from our code. So let’s dig in.</p></blockquote>
<p><a href="http://nubyonrails.com/articles/five-features-from-mercurial-that-would-make-git-suck-less">Five Features from Mercurial That Would Make Git Suck Less</a></p>
<blockquote><p>This isn’t an attempt to convince you to use Mercurial exclusively. And I’m intentionally skipping any mention of Mercurial’s shortcomings. I want to see these features in upcoming versions of Git.</p></blockquote>
<p><a href="http://www.marco.org/143265621">Serious doubts</a></p>
<blockquote><p>I’ve never doubted the viability of running a serious business of writing iPhone apps before. For the first time, now, I am. [The developer of Instapaper on the state of the iPhone App Store.]</p></blockquote>
<p><a href="http://www.ultrasaurus.com/sarahblog/2009/07/rails-admin-interface-roundup/">rails admin interface roundup</a></p>
<blockquote><p>...I evaluated four plugins for admin UI...</p></blockquote>
<p><a href="http://unqualified-reservations.blogspot.com/2009/07/wolfram-alpha-and-hubristic-user.html">Wolfram Alpha and hubristic user interfaces</a></p>
<blockquote><p>Strangely, to the developers of intelligent control interfaces, these interfaces appear to work perfectly well. Moreover, when the developers demo these interfaces, the demo comes off without a hitch - and is often quite impressive. This is not the normal result of broken software. This "demo illusion" convinces the developers that the product is ready to ship, although it is not and will never be ready to ship.</p></blockquote>
<p><a href="http://iphonedevelopment.blogspot.com/2009/07/gah-up-is-down-right-is-wrong-make-it.html">Gah! Up is Down! Right is Wrong! Make it Stop!</a></p>
<blockquote><p>I'm not a fan of the GPL quite simply because I don't see the GPL as "open". The GPL is not defined by what it is, it's defined by what it isn't. It's "against" proprietary closed source code. It's against corporations. It's against software as a commercial product... Knowledge is expanded when it is shared. When solutions to problems are shared, that frees us up to tackle the next obstacle rather than spending time solving problems that have already been solved by others... If you truly believe that knowledge is not a zero-sum game, and that sharing knowledge tends to increase the sum of societal knowledge, then you don't go putting petty restrictions on your knowledge.</p></blockquote>
<p><a href="http://www.contrast.ie/blog/there-are-no-small-changes/">There are no small changes</a></p>
<blockquote><p>Adding a plugin to a codebase is easy. Integrating a new feature within an existing application is not. When you’re striving for quality there are no small changes.</p></blockquote>
<p><a href="http://blog.talbott.ws/articles/2009/7/15/how-capitalism-saves-ruby-from-corporatism">How Capitalism Saves Ruby from Corporatism</a></p>
<blockquote><p>...or... Owning the Means of Production. This talk was given at FutureRuby in Toronto, Canada in the summer of 2009.</p></blockquote>
<p><a href="http://daringfireball.net/2009/07/chrome_os_context">Putting What Little We Actually Know About Chrome OS Into Context</a></p>
<blockquote><p>I’m skeptical about the prospects of any new system or product that isn’t intended for use by the people creating it. Gmail, for example, is the best web mail system because it was designed to be used not just by “typical” users but by expert users, including the engineers at Google who made it.</p></blockquote>
<p><a href="http://www.softwarebyrob.com/2009/07/14/one-of-the-most-common-startup-roadblocks/">One of the Most Time Consuming Startup Roadblocks</a></p>
<blockquote><p>So take a risk this month: outsource your first task and see where it takes you. When was the last time a single tool or work habit offered the opportunity to save 20-60 hours in a month?</p></blockquote>
<p><a href="http://blog.wyeworks.com/2009/7/13/paperclip-file-rename">Paperclip file rename</a></p>
<blockquote><p>While developing an application with Sebastián that allow users to upload videos with some file name restrictions, meaning that it must contain only A-Z and 0-9 digits, underscores (_) as a valid component as well, and also the name must be preceded by it’s own #id, we came up with the need of applying this custom filter to each uploaded video.</p></blockquote>
<p><a href="http://www.techcrunch.com/2009/07/14/youtube-will-be-next-to-kiss-ie6-support-goodbye/">YouTube Will Be Next To Kiss IE6 Support Goodbye</a></p>
<blockquote><p>Judging by this screenshot taken by an IE6 user who was watching some videos on YouTube, it appears the Google company will be phasing out support for the browser shortly. [Die!]</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=703086">Hacker News on Zed Shaw: Why I (A/L)GPL</a></p>
<blockquote><p>[Interesting comments, as usual. My take: the GPL is like half-assed open-source. Sure, you can see the source, but it's not really open.]</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/07/19/weekly-digest-7-19-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El Dorado on&#160;Heroku</title>
		<link>http://almosteffortless.com/2009/07/09/el-dorado-on-heroku/</link>
		<comments>http://almosteffortless.com/2009/07/09/el-dorado-on-heroku/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 20:26:05 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[El Dorado]]></category>
		<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1535</guid>
		<description><![CDATA[I'm pleased to announce that El Dorado is now compatible with Heroku, the instant Ruby platform. 

This means that deploying El Dorado is no longer a pain in the ass. It also means that you can get started with El Dorado for free. Just follow along with the installation and deployment instructions in the README [...]]]></description>
			<content:encoded><![CDATA[<p>I'm pleased to announce that <a href="/eldorado">El Dorado</a> is now compatible with <a href="http://heroku.com">Heroku</a>, the instant Ruby platform. </p>
<p><a href="http://heroku.com"><img src="http://s3.amazonaws.com/almosteffortless/heroku.jpg" alt="heroku" title="heroku" width="185" height="73" class="alignnone size-full wp-image-1536" /></a></p>
<p>This means that deploying El Dorado is no longer a pain in the ass. It also means that you can get started with El Dorado <i>for free</i>. Just follow along with the installation and deployment instructions in the <a href="http://github.com/trevorturk/eldorado/tree/master">README</a> and you're good to go. </p>
<p>If you need help along the way, drop by the support site: <a href="http://eldorado.heroku.com/">http://eldorado.heroku.com/</a></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/07/09/el-dorado-on-heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;7-9-09</title>
		<link>http://almosteffortless.com/2009/07/09/weekly-digest-7-9-09/</link>
		<comments>http://almosteffortless.com/2009/07/09/weekly-digest-7-9-09/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:54:54 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1533</guid>
		<description><![CDATA[..."weekly," eh?
pauldix's typhoeus
Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.
iPhone-like password fields using jQuery
That may have been the reason why Apple developed implemented an alternative method on iPhone/iPod Touch: passwords get masked while typing but the last character in [...]]]></description>
			<content:encoded><![CDATA[<p>..."weekly," eh?</p>
<p><a href="http://github.com/pauldix/typhoeus/tree/master">pauldix's typhoeus</a></p>
<blockquote><p>Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.</p></blockquote>
<p><a href="http://blog.decaf.de/2009/07/iphone-like-password-fields-using-jquery/">iPhone-like password fields using jQuery</a></p>
<blockquote><p>That may have been the reason why Apple developed implemented an alternative method on iPhone/iPod Touch: passwords get masked while typing but the last character in row is shown in plain text.</p></blockquote>
<p><a href="http://www.apple.com/downloads/dashboard/developer/tangopalette.html">Tango Palette Dashboard Widget</a></p>
<blockquote><p>Colors from Tango Desktop Project with one-click! Click on color box will copy hex value (without #, useful, for example, with Photoshop) into the clipboard. Enjoy!</p></blockquote>
<p><a href="http://www.everyblock.com/code/">The EveryBlock source code</a></p>
<blockquote><p>EveryBlock.com is an experimental news Web site that provides information at a "microlocal" level — by neighborhood or city block. It was funded by a grant from Knight Foundation, which requires the site's backend code to be open-sourced. Here is the code.</p></blockquote>
<p><a href="http://railstips.org/2009/6/27/mongomapper-the-rad-mongo-wrapper">MongoMapper, The Rad Mongo Wrapper</a></p>
<blockquote><p>A few weeks ago, I wrote about Mongo and how awesome it is. Towards the end of the article (and in the slideshow) I mentioned MongoMapper, a project I’ve been working on.</p></blockquote>
<p><a href="http://wiki.apache.org/cassandra/">Cassandra Wiki</a></p>
<blockquote><p>Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store. Cassandra brings together the distributed systems technologies from  Dynamo and the data model from Google's  BigTable. Like Dynamo, Cassandra is  eventually consistent. Like BigTable, Cassandra provides a ColumnFamily-based data model richer than typical key/value systems.</p></blockquote>
<p><a href="http://github.com/tmm1/youtube-g/tree/master">tmm1's youtube-g</a></p>
<blockquote><p>youtube-g is a pure Ruby client for the YouTube GData API. It provides an easy way to access the latest YouTube video search results from your own programs. In comparison with the earlier Youtube search interfaces, this new API and library offers much-improved flexibility around executing complex search queries to obtain well-targeted video search results.</p></blockquote>
<p><a href="http://github.com/JaredKuolt/robustthread/tree/master">JaredKuolt's robustthread</a></p>
<blockquote><p>This module allows for the creation of a thread that will not simply die when the process dies. Instead, it joins all RobustThreads in Ruby’s exit handler.</p></blockquote>
<p><a href="http://github.com/zilkey/active_api/tree/master">zilkey's active_api</a></p>
<blockquote><p>ActiveApi allows you to define an XML schema in Ruby, and use that schema to convert ruby objects to xml. Features XSD or DTD generation; Versioning; The ability to represent your model in a way that is not tightly coupled to the model itself.</p></blockquote>
<p><a href="http://github.com/neerajdotname/admin_data/tree/master">neerajdotname's admin_data</a></p>
<blockquote><p>Rails plugin to browse and manage your data using your browser.</p></blockquote>
<p><a href="http://github.com/adamsalter/sitemap_generator-plugin/tree/master">adamsalter's sitemap_generator-plugin</a></p>
<blockquote><p>This plugin enables 'enterprise-class' Google Sitemaps to be easily generated for a Rails site as a rake task, using a simple 'Rails Routes'-like DSL. It allows you to take care of familiar Sitemap issues...</p></blockquote>
<p><a href="http://kottke.org/04/04/google-operating-system">GooOS, the Google Operating System</a></p>
<blockquote><p>Google isn't worried about Yahoo! or Microsoft's search efforts...although the media's focus on that is probably to their advantage. Their real target is Windows. Who needs Windows when anyone can have free unlimited access to the world's fastest computer running the smartest operating system? Mobile devices don't need big, bloated OSes...they'll be perfect platforms for accessing the GooOS.</p></blockquote>
<p><a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html">Introducing the Google Chrome OS</a></p>
<blockquote><p>So today, we're announcing a new project that's a natural extension of Google Chrome — the Google Chrome Operating System. It's our attempt to re-think what operating systems should be.</p></blockquote>
<p><a href="http://blog.posterous.com/new-on-posterous-audio-and-video-plays-on-you">New on Posterous: Audio and video *plays* on your iPhone in Safari, no flash needed</a></p>
<blockquote><p>Now, audio and video you attach and send to Posterous can be played on an iPhone in Mobile Safari. No more "missing flash" errors!</p></blockquote>
<p><a href="http://www.red-sweater.com/blog/825/getting-pretty-lonely">Getting Pretty Lonely</a></p>
<blockquote><p>As the developer evaluates communities to participate in, they must evaluate the legal impact such participation will have on their own project. The closed source communities are, by definition uninviting to outsiders. GPL communities are open and embracing of other GPL developers, but generally off-putting to liberal-license and closed-license developers. Only the liberal-license communities are attractive to developers from all 3 camps.</p></blockquote>
<p><a href="http://blog.clickdeck360.com/the-mythical-man-weekend">The Mythical Man Weekend</a></p>
<blockquote><p>The "I can do it in a weekend" beast reared its naive head on Hacker News recently which in turn generated some intelligent discussion on the topic. We've all been there and we've all learned the hard way.</p></blockquote>
<p><a href="http://ozmm.org/posts/when_github_goes_down.html">When GitHub goes down...</a></p>
<blockquote><p>There are quite a few ways to deploy without github… ah the wonders of git!</p></blockquote>
<p><a href="http://railslab.newrelic.com/2009/06/18/adam-wiggins-and-ryan-tomayko-heroku">Adam Wiggins and Ryan Tomayko, Heroku</a></p>
<blockquote><p>An interview in 3 parts with Adam Wiggins and Ryan Tomayko of Heroku from their recent visit to New Relic. They discuss the vision behind the creation of Heroku, their passion for helping developers create scalable, high-performance Rails apps in the cloud, taking full advantage of cloud deployment, and their tips and best practices to create a high-performance app.</p></blockquote>
<p><a href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-June/020620.html">[whatwg] Codecs for audio and video</a></p>
<blockquote><p>After an inordinate amount of discussions, both in public and privately, on the situation regarding codecs for video and audio in HTML5, I have reluctantly come to the conclusion that there is no suitable codec that all vendors are willing to implement and ship. I have therefore removed the two subsections in the HTML5 spec in which codecs would have been required, and have instead left the matter undefined, as has in the past been done with other features like img and image formats, embed and plugin APIs, or Web fonts and font formats.</p></blockquote>
<p><a href="http://www.slideshare.net/cxpartners/secrets-of-simplicity">Secrets of Simplicity</a></p>
<blockquote><p>Rules for being simple and usable (Giles Colborne)</p></blockquote>
<p><a href="http://onticoren.com/2009/06/29/go-daddy-dns-heroku/">Go Daddy DNS & Heroku</a></p>
<blockquote><p>As easy as using Heroku is, setting up DNS seems to be one of the trickier parts.</p></blockquote>
<p><a href="http://blog.bitquabit.com/2009/07/01/one-which-i-call-out-hacker-news/">The One in Which I Call Out Hacker News</a></p>
<blockquote><p>The next time you see an application you like, think very long and hard about all the user-oriented details that went into making it a pleasure to use, before decrying how you could trivially reimplement the entire damn thing in a weekend. Nine times out of ten, when you think an application was ridiculously easy to implement, you’re completely missing the user side of the story.</p></blockquote>
<p><a href="http://www.infoq.com/news/2009/06/Twitter-Architecture">Twitter, an Evolving Architecture</a></p>
<blockquote><p>Most of the tools used by Twitter are open source. The stack is made up of Rails for the front side, C, Scala and Java for the middle business layer, and MySQL for storing data. Everything is kept in RAM and the database is just a backup. The Rails front end handles rendering, cache composition, DB querying and synchronous inserts. This front end mostly glues together several client services, many written in C: MySQL client, Memcached client, a JSON one, and others.</p></blockquote>
<p><a href="http://en.blog.wordpress.com/2009/03/11/p2-the-new-prologue/">P2: The New Prologue</a></p>
<blockquote><p>Prologue broke ground when it brought microblogging to WordPress.com. Now it’s cooler, faster, sleeker, and ready for 2009 and beyond.</p></blockquote>
<p><a href="http://github.com/fesplugas/typus/tree/master">fesplugas's typus</a></p>
<blockquote><p>Effortless backend interface for Ruby on Rails applications. (Admin scaffold generator.)</p></blockquote>
<p><a href="http://blog.posterous.com/posterous-is-the-best-way-to-publish-video-an-0">Posterous is the best way to publish video and photos from your new iPhone 3G S</a></p>
<blockquote><p>Posterous has always been about email, so when Apple announced the iPhone 3G S would shoot video, we already knew it would just work with our site! We've optimized Posterous to work well with the iPhone 3.0, so now it's better than ever. [The benefits of having a simple, universal input are obvious.]</p></blockquote>
<p><a href="http://nuts.redsquirrel.com/post/128789373/fails-on-rails">Fails on Rails</a></p>
<blockquote><p>The total cost of development for a failed Ruby on Rails system is much less than a failed Java EE system.</p></blockquote>
<p><a href="http://intranation.com/entries/2009/03/development-virtual-machines-os-x-using-vmware-and/">Development virtual machines on OS X using VMWare and Ubuntu</a></p>
<blockquote><p>I’ve been using Linux as my primary development environment for a number of months now, despite being an abject Mac fanboy.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/07/09/weekly-digest-7-9-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Config vars and&#160;Heroku</title>
		<link>http://almosteffortless.com/2009/06/25/config-vars-and-heroku/</link>
		<comments>http://almosteffortless.com/2009/06/25/config-vars-and-heroku/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 02:52:04 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[El Dorado]]></category>
		<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1479</guid>
		<description><![CDATA[I don't really care for the suggested approach in the Heroku docs for setting configuration variables locally. I have an open-source project that I'm working to get onto Heroku, so I decided to do a little work to come up with a solution that I prefer. I think this would work well for open source [...]]]></description>
			<content:encoded><![CDATA[<p>I don't really care for the <a href="http://docs.heroku.com/config-vars#local-setup ">suggested approach</a> in the <a href="http://heroku.com">Heroku</a> docs for setting configuration variables locally. I have an open-source project that I'm working to get onto Heroku, so I decided to do a little work to come up with a solution that I prefer. I think this would work well for open source projects, as well as projects with multiple developers. </p>
<p>Here's the basic idea: </p>
<p>You have a config file that contains all of your local configuration variables. It looks a lot like database.yml.</p>
<pre class="ruby">&nbsp;
<span style="color:#008000; font-style:italic;"># config/config.yml</span>
&nbsp;
development:
  session_key: example_development
  session_secret: ESl6X3oKM1i1RRrD2QLwUUzz9jr1zxNO
  domain: http://example.<span style="color:#9900CC;">com</span>
&nbsp;
test:
  session_key: example_test
  session_secret: vrwPpJTvwnMVLP1wTSgqigSl7PMI7QcE
  domain: http://example.<span style="color:#9900CC;">com</span>
&nbsp;
production:
  session_key: <span style="color:#008000; font-style:italic;"># any string identifying your app</span>
  session_secret: <span style="color:#008000; font-style:italic;"># a random, secret string at least 32 characters long</span>
  domain: <span style="color:#008000; font-style:italic;"># http://example.com</span>
  mailer: <span style="color:#008000; font-style:italic;"># noreply@example.com</span>
&nbsp;</pre>
<p>You perform a little trickery in environment.rb to prefer the Heroku ENV storage of config vars (in the production environment), but you fall back to your config.yml if the config vars aren't found in ENV (in the development and test environments). </p>
<pre class="ruby">&nbsp;
<span style="color:#008000; font-style:italic;"># config/environment.rb</span>
&nbsp;
<span style="color:#6666ff; font-weight:bold;">Rails::Initializer</span>.<span style="color:#9900CC;">run</span> <span style="color:#9966CC; font-weight:bold;">do</span> |config|
  <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'yaml'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># support yaml and heroku config vars, preferring ENV for heroku</span>
  CONFIG = <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">YAML</span>.<span style="color:#9900CC;">load_file</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'config/config.yml'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span>RAILS_ENV<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span>ENV<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
  config.<span style="color:#9900CC;">action_controller</span>.<span style="color:#9900CC;">session</span> = <span style="color:#006600; font-weight:bold;">&#123;</span>
    <span style="color:#ff3333; font-weight:bold;">:key</span> =&gt; CONFIG<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'session_key'</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
    <span style="color:#ff3333; font-weight:bold;">:secret</span> =&gt; CONFIG<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'session_secret'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>Then, you create a rake task (<i>rake heroku:config</i>) that can be used to send all of the config vars for your production environment up to Heroku. This task can be invoked once to set things up, but can also be run again if you need to make any additions or changes. </p>
<pre class="ruby">&nbsp;
<span style="color:#008000; font-style:italic;"># lib/tasks/heroku.rake</span>
&nbsp;
namespace <span style="color:#ff3333; font-weight:bold;">:heroku</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  task <span style="color:#ff3333; font-weight:bold;">:config</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Reading config/config.yml and sending config vars to Heroku...&quot;</span>
    CONFIG = <span style="color:#CC00FF; font-weight:bold;">YAML</span>.<span style="color:#9900CC;">load_file</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'config/config.yml'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'production'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
    command = <span style="color:#996600;">&quot;heroku config:add&quot;</span>
    CONFIG.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span>|key, val| command &lt;&lt; <span style="color:#996600;">&quot; #{key}=#{val} &quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> val <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#CC0066; font-weight:bold;">system</span> command
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>This way, you've got all of your config vars stored with the project (.gitignored, of course)...</p>
<pre class="bash">&nbsp;
<span style="color: #808080; font-style: italic;"># .gitignore</span>
&nbsp;
/tmp/**/*
/log/*
*.log
/tmp/restart.txt
/config/config.yml
/config/database.yml
/db/*.sqlite3
&nbsp;</pre>
<p>...and you can easily set what you need on Heroku, like so:</p>
<pre class="bash">&nbsp;
$ rake heroku:config
Reading config/config.yml and sending config vars to Heroku...
Adding config vars:
  session_key =&gt; example_production
  session_secret =&gt; 1WlkMkYYi5611vtF...0ZMS2G3Xl67s4lEIK4sj65
  domain =&gt; http://example.com
  mailer =&gt; noreply@example.com
Restarting app...<span style="color: #000000; font-weight: bold;">done</span>.
&nbsp;</pre>
<p>The result is a pretty nice, I think. </p>
<p>You can see the installation and deployment instructions for my open source project <a href="http://github.com/trevorturk/eldorado/tree/master">El Dorado</a> if you're curious about the overall flow. </p>
<p>I'd love to get some feedback on this approach, but I really like it so far :) </p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/25/config-vars-and-heroku/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Install Ruby Enterprise, Phusion Passenger and El Dorado on Debian&#160;Lenny</title>
		<link>http://almosteffortless.com/2009/06/24/install-ruby-enterprise-phusion-passenger-and-el-dorado-on-debian-lenny/</link>
		<comments>http://almosteffortless.com/2009/06/24/install-ruby-enterprise-phusion-passenger-and-el-dorado-on-debian-lenny/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 20:32:47 +0000</pubDate>
		<dc:creator>Timothy O'Connell</dc:creator>
				<category><![CDATA[El Dorado]]></category>
		<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1461</guid>
		<description><![CDATA[These instructions require and assume the following:

You're running Debian Lenny and you've got root access
You've got a functioning apache2 installation
You know the basics of working on the command line (i.e. how to edit files, execute commands, etc.)

If the above is true of your situation, read on to learn how to install Ruby Enterprise, Phusion Passenger [...]]]></description>
			<content:encoded><![CDATA[<p>These instructions require and assume the following:
<ul>
<li>You're running Debian Lenny and you've got <em>root</em> access</li>
<li>You've got a functioning <em>apache2</em> installation</li>
<li>You know the basics of working on the command line (i.e. how to edit files, execute commands, etc.)</li>
</ul>
<p>If the above is true of your situation, read on to learn how to install <em>Ruby Enterprise</em>, <em>Phusion Passenger</em> and <em>El Dorado</em> from scratch in a sort of "one-off" setting where you've got one server and you want it to run one site.</p>
<p><strong>NB:</strong> These instructions don't use <em>git</em> or <em>capistrano</em>. The instructions contained in the <em>El Dorado</em> README describe how to install <em>El Dorado</em> using those tools. Using them makes for an easier and cleaner installation. It also makes for easier scalability, upgrading and patching: I highly recommend using those tools. </p>
<ol>
<li><strong>Resolve Dependencies</strong></li>
<p>The first thing you'll need to do, even before installing <em>RE</em> or <em>PP</em>, is make sure that you've got the development files for the databases that <em>RE</em> and <em>PP</em> applications use:
<pre>apt-get install libsqlite3-ruby postgresql-8.3-plruby libmysql-ruby libmysqlclient15-dev postgresql-server-dev-8.3 libsqlite3-dev</pre>
<p>If you don't resolve these dependencies now, you'll get a message during the <em>RE</em> installation that prompts you to install gems for mysql, postgres, etc. and then, when you go to install those gems, you'll get an error like this:
<pre>ERROR:  Error installing mysql:
	ERROR: Failed to build gem native extension.</pre>
<p>So just go ahead and resolve those dependencies in advance.</p>
<li><strong>Install <em>Ruby Enterprise</em></strong></li>
<p>The best practice for this, as far as I know, is to install the current stable release of <em>RE</em> in <em>/opt/</em>. First, download the release you plan to use:
<pre>lana:~# cd /opt
lana:/opt# wget http://rubyforge.org/frs/download.php/58677/ruby-enterprise-1.8.6-20090610.tar.gz</pre>
<p> Once that's down, untar it and execute the installer script:
<pre>lana:/opt# tar -zxvf ruby-enterprise-1.8.6-20090610.tar.gz
[...]
lana:/opt# cd ruby-enterprise-1.8.6-20090610/
lana:/opt/ruby-enterprise-1.8.6-20090610# ./installer</pre>
<p>That should run, after a few tappings of ye olde Enter key, to its error-free conclusion. If, during the installation, the installer finds that you're missing software packages, the installer will bail and you'll be given some commands that fill those holes. Resolve those dependencies and finish the installation.</p>
<p>At the end of the installation, you'll be given some syntax that will automatically install <em>PP</em>. You'll use that in the next step.</p>
<li><strong>Install <em>Phusion Passenger</em></strong></li>
<p>Use the automatically generated syntax:
<pre>lana:/opt/ruby-enterprise-1.8.6-20090610# /opt/ruby-enterprise-1.8.6-20090610/bin/passenger-install-apache2-module</pre>
<p>Again, the installer will bail and prompt you to resolve dependencies if you've got any:
<pre>Installation instructions for required software

 * To install Apache 2 development headers:
   Please run apt-get install apache2-prefork-dev as root.

 * To install Apache Portable Runtime (APR) development headers:
   Please run apt-get install libapr1-dev as root.

 * To install Apache Portable Runtime Utility (APU) development headers:
   Please run apt-get install libaprutil1-dev as root.</pre>
<p>Resolve dependencies and finish the installation. </p>
<p>Once it's finished, you'll be given some lines to add to your "Apache configuration file". The best file to add these lines to is <em>/etc/apache2/httpd.conf</em>.</p>
<p>Just don't forget that you added them there (as opposed to somewhere else), as you'll need to modify them if you upgrade <em>RE</em>. </p>
<p>You'll also probably want to go ahead and add the following lines while you've got the file open:
<pre>PassengerPoolIdleTime 14400
PassengerMaxInstancesPerApp 2</pre>
<p>Those lines do exactly what it looks like they do. They're also very sensible settings to start with, as they'll prevent <em>El Dorado</em> from hogging a bunch of system resources, etc. right off the bat. </p>
<p>You can find <a href="http://www.modrails.com/documentation/Users%20guide.html#_resource_control_and_optimization_options">more information here</a>.</p>
<p>Finally, your <em>/etc/apache2/httpd.conf</em> file should look something like this:
<pre>PassengerPoolIdleTime 14400
PassengerMaxInstancesPerApp 2

LoadModule passenger_module /opt/ruby-enterprise-1.8.6-20090610/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby-enterprise-1.8.6-20090610/lib/ruby/gems/1.8/gems/passenger-2.2.4
PassengerRuby /opt/ruby-enterprise-1.8.6-20090610/bin/ruby</pre>
<p>Once you've made those changes, you're ready to begin installing <em>El Dorado</em>.</p>
<p>When it exits, the <em>PP</em> installer will show you some sample syntax for how to write an apache configuration file for your first application. You can ignore that for now, as we're going to come back to it later.</p>
<li><strong>Install <em>El Dorado</em></strong></li>
<p>First, get the latest release of the software from Trevor's <em>github</em>: <a href="http://github.com/trevorturk/eldorado/tree/master">http://github.com/trevorturk/eldorado/tree/master</a></p>
<p>Once you've got the URL of the latest release, switch from <em>root</em> to a less privileged user, make a folder in your home dir for the site, download the latest release of <em>El Dorado</em> to that directory and untar it:
<pre>
toconnell@lana:~$ mkdir example.com
toconnell@lana:~$ cd example.com
toconnell@lana:~/example.com$ wget wget http://download.github.com/trevorturk-eldorado-a37d0c71e928f605d111d5f48b5786ff613bf676.tar.gz
tar -zxvf trevorturk-eldorado-a37d0c71e928f605d111d5f48b5786ff613bf676.tar.gz
</pre>
<p>Now, get all of those files out of that big, ugly directory and into the current working directory and ditch those old files:
<pre>toconnell@lana:~/example.com$ mv trevorturk-eldorado-a37d0c71e928f605d111d5f48b5786ff613bf676/* .
toconnell@lana:~/example.com$ rm -rf trevorturk-eldorado-a37d0c71e928f605d111d5f48b5786ff613bf676*</pre>
<p>Now, follow the instructions in the README and copy the example <em>yml</em> files to the places where the application will look for real, non-example files:
<pre>toconnell@lana:~/example.com$ cp config/database.example.yml config/database.yml
toconnell@lana:~/example.com$ cp config/config.example.yml config/config.yml</pre>
<p>Now, use your favorite editor to edit the last stanza in <em>config/config.yml</em> so that it matches the information of your site:
<pre>production:
  session_key: example_production
  session_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  # Replace these X's and make this string (at least) 32 random alpha-numerics for good site security
  domain: http://example.com
  mailer: noreply@example.com  </pre>
<p><strong>NB:</strong> There are "dev" and "test" entries in this default file. If you're not planning on doing anything development related with this installation, you can safely delete those entries.</p>
<p>Once you've edited that file, that's it, so far as the non-<em>git</em> installation is concerned. To get <em>El Dorado</em> up and running, you'll need to do some minor database tasks. Those are covered in the next section.</p>
<li><strong>Configure the Database</strong></li>
<p>Since MySQL is deprecated, I'll be using PostgreSQL for the remainder of these instructions.</p>
<p>If you look at <em>config/database.yml</em>, you'll notice that it's essentially a blank template:
<pre>development:
  adapter: sqlite3
  database: db/development.sqlite3
  timeout: 5000
  # adapter: mysql
  # database: eldorado_development
  # username:
  # password:
  # host: localhost

test:
  adapter: sqlite3
  database: db/test.sqlite3
  timeout: 5000

production:
  adapter:
  database:
  username:
  password:
  host:</pre>
<p>First, edit that file:
<pre>production:
  adapter: postgresql
  database: example
  username: example
  password: XXXXXXXXXXXXXXXXXXXX
  host: localhost</pre>
<p><strong>NB:</strong> Again: once you've added your "production" entries to this file, you can feel free to delete the "test" and "dev" lines, as they do nothing and could cause confusion down the line.</p>
<p>Now, create the database and the user:
<pre>toconnell@lana:~/example.com$ sudo su postgres -c "createuser example"
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
toconnell@lana:~/example.com$ sudo su postgres -c "createdb example"</pre>
<p>Next, start the postgres monitor as the postgres user and make the a few changes:
<pre>toconnell@lana:~/example.com$ sudo su postgres -c psql
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

postgres=# ALTER USER example PASSWORD 'XXXXXXXXXXXXXXXXXXXX';
ALTER ROLE
postgres=# ALTER DATABASE example OWNER TO example;
ALTER DATABASE</pre>
<p>Now, if you've got your Postgres database configured correctly and your new user can access your new postgres database, you're ready to rake the <em>El Dorado</em> production database:
<pre>toconnell@lana:~/example.com$ /opt/ruby-enterprise-1.8.6-20090610/bin/rake rake db:schema:load RAILS_ENV=production</pre>
<p>Once the database is successfully raked, all you've got to do to finish up is configure Apache. </p>
<li><strong>Apache Configuration</strong></li>
<p>The following assumes that you're doing apache the "Debian way".</p>
<p>If this is true, the first thing you'll do is create a symlink in <em>/var/www/</em> that points at your install directory:
<pre>lana:/var/www# ln -s /home/toconnell/example.com/</pre>
<p>Next, create a file in <em>/etc/apache2/sites-available</em> with the name of your site and then create a symlink to it in <em>/etc/apache2/sites-enabled</em>.</p>
<p>The file should look something like this:
<pre>#
# example.com
#
&nbsp;
&lt;VirtualHost *:80&gt;
  ServerName example.com
  ServerAlias www.example.com
  ServerAdmin youremail@example.com
  DocumentRoot /home/toconnell/example.com/public
&nbsp;
  &lt;Directory &quot;/var/www/example.com&quot;&gt;
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  &lt;/Directory&gt;
&nbsp;
  RewriteEngine On
&nbsp;
  RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
&nbsp;
  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /system/maintenance.html [L]
&nbsp;
  ErrorLog /var/log/apache2/example_error_log
  CustomLog /var/log/apache2/example_access_log combined
  RewriteLog /var/log/apache2/example_rewrite_log
  RewriteLogLevel 9
&nbsp;
&lt;/VirtualHost&gt;</pre>
<p>NB: I've added some <em>apache</em> custom logging. Logs are good.</p>
<p>Once you've got the file in <em>/etc/apache2/sites-available</em> and the symlink in <em>/etc/apache2/sites-enabled</em> that points at that file, you should be ready to restart apache and get rolling:
<pre>lana:/etc/logrotate.d# /etc/init.d/apache2 reload</pre>
</ol>
<p>And that, as they say, is that. Once you reload apache, provided that your DNS is set up correctly and you haven't got any system problems beyond the scope of this document, your single instance of <em>El Dorado</em> should be ready for prime time.</p>
<p>Navigate to your site in your browser and create an administrative account: the first user who attempts to login will be the administrator. Once you've got your admin created, you're ready to start tweaking your new <em>El Dorado</em> site's appearance and adding users.</p>
<p>A note on upgrades: if you find you need/want to upgrade an  instance of <em>El Dorado</em> that has been installed thus, consult the README. The basic gist is that you're going to want to download/copy the new source/program files over the old ones (while being careful not to erase your user-uploaded files) and then run <code>rake db:migrate RAILS_ENV=production</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/24/install-ruby-enterprise-phusion-passenger-and-el-dorado-on-debian-lenny/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;6-22-09</title>
		<link>http://almosteffortless.com/2009/06/22/weekly-digest-6-22-09/</link>
		<comments>http://almosteffortless.com/2009/06/22/weekly-digest-6-22-09/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 02:21:44 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1454</guid>
		<description><![CDATA[How to speed up gem installs 10x
Answer: Turn off ri and rdoc installation.
Perch
Perch is a really little content management system for when you (or your clients) need to edit content without the hassle of setting up a big CMS.
Installing Ruby on Rails and PostgreSQL on OS X, Third Edition
Over the past few years, I’ve helped [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://buddingrubyist.com/2009/02/14/how-to-speed-up-gem-installs-10x/">How to speed up gem installs 10x</a></p>
<blockquote><p>Answer: Turn off ri and rdoc installation.</p></blockquote>
<p><a href="http://grabaperch.com/">Perch</a></p>
<blockquote><p>Perch is a really little content management system for when you (or your clients) need to edit content without the hassle of setting up a big CMS.</p></blockquote>
<p><a href="http://www.robbyonrails.com/articles/2008/01/22/installing-ruby-on-rails-and-postgresql-on-os-x-third-edition">Installing Ruby on Rails and PostgreSQL on OS X, Third Edition</a></p>
<blockquote><p>Over the past few years, I’ve helped you walk through the process of getting Ruby on Rails up and running on Mac OS X. The last version has been getting a lot of comments related to issues with the new Apple Leopard, so I’m going this post will expand on previous installation guides with what’s working for me as of January 2008.</p></blockquote>
<p><a href="http://factoryjoe.com/blog/2009/06/16/thoughts-on-opera-unite/">Thoughts on Opera Unite</a></p>
<blockquote><p>Opera’s CEO Jon von Tetzchner claims that “Opera Unite now decentralizes and democratizes the cloud." I call bullshit. Opera Unite does indeed rely on a P2P-like network to function, but the big problem is that you must push all your traffic through Opera’s proxy service.</p></blockquote>
<p><a href="http://lesscss.org/">LESS - Leaner CSS</a></p>
<blockquote><p>Less is Leaner css. Less extends css by adding: variables, mixins, operations and nested rules. Less uses existing css syntax. This means you can migrate your current .css files to .less in seconds and there is virtually no learning curve.</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=660679">YC Company Hosting Stats</a></p>
<blockquote><p>[Interesting stats and discussion on hosting.]</p></blockquote>
<p><a href="http://jameswilding.net/2009/06/13/rip/">Rip: a RubyGems Replacement?</a></p>
<blockquote><p>This makes package management as simple as passing files between friends. Email me your latest library, and I can run rip install path/to/lib. That’s it — you don’t need spec files, and you don’t need to build anything before your send me your code.</p></blockquote>
<p><a href="http://en.wikipedia.org/wiki/BigTable">BigTable</a></p>
<blockquote><p>BigTable is a fast and extremely large-scale DBMS. However, it departs from the typical convention of a fixed number of columns, instead described by the authors as "a sparse, distributed multi-dimensional sorted map", sharing characteristics of both row-oriented and column-oriented databases. BigTable is designed to scale into the petabyte range across "hundreds or thousands of machines, and to make it easy to add more machines [to] the system and automatically start taking advantage of those resources without any reconfiguration".</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=659696">Opera Unite reinvents the Web: a Web server on the Web browser</a></p>
<blockquote><p>[Very interesting possibilities here. Making it easier for people to serve content on the web can only lead to good things.]</p></blockquote>
<p><a href="http://github.com/tenderlove/markup_validity/tree/master">tenderlove's markup_validity</a></p>
<blockquote><p>Test for valid markup with test/unit or rspec</p></blockquote>
<p><a href="http://hemlock-kills.com/">Hemlock</a></p>
<blockquote><p>Hemlock is an open-source framework that combines the richness of Flash with the scalability of XMPP, facilitating a new class of web applications where multiple users can interact in real time. Games, workspace collaboration, educational tools… The only limit is your imagination.</p></blockquote>
<p><a href="http://www.infoq.com/news/2009/06/rip">Rip: A New Package Management System for Ruby</a></p>
<blockquote><p>But why a completely new package manager? What's wrong with RubyGems? We asked one of Rip's developers, Chris Wanstrath...</p></blockquote>
<p><a href="http://martinfowler.com/articles/rubyAtThoughtWorks.html">Ruby at ThoughtWorks</a></p>
<blockquote><p>ThoughtWorks started using Ruby for production projects in 2006, from then till the end of 2008 we had done 41 ruby projects. In preparation for a talk at QCon I surveyed these projects to examine what lessons we can draw from the experience. I describe our thoughts so far on common questions about Ruby's productivity, speed and maintainability.</p></blockquote>
<p><a href="http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html">[git pull] drm-next</a></p>
<blockquote><p>See? All the rules really are pretty simple. There's that somewhat subtle<br />
interaction between "keep your own history clean" and "never try to clean<br />
up _other_ proples histories", but if you follow the rules for pulling,<br />
you'll never have that problem.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/22/weekly-digest-6-22-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitHub Protip: Follow other&#160;users</title>
		<link>http://almosteffortless.com/2009/06/11/github-protip-follow-other-users/</link>
		<comments>http://almosteffortless.com/2009/06/11/github-protip-follow-other-users/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 03:38:29 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1424</guid>
		<description><![CDATA[Inspired by this post, I thought I'd share a tip that helps me get the most out of GitHub. 
Don't just follow the projects that you're interested in &#8212; follow other users. Here's a list of people that I'm following. They're constantly turning me on to new and interesting projects, because I get to see [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by <a href="http://themomorohoax.com/2009/04/12/how-to-keep-up-with-ruby-7-people-to-follow-on-github">this post</a>, I thought I'd share a tip that helps me get the most out of <a href="http://github.com">GitHub</a>. </p>
<p>Don't just follow the projects that you're interested in &mdash; <i>follow other users</i>. Here's a list of people that <a href="http://github.com/trevorturk">I'm following</a>. They're constantly turning me on to new and interesting projects, because I get to see everything they're working on, and everything they're following. </p>
<p>&nbsp;</p>
<div class="followers">
<ul>
<li>
      <a href="http://github.com/technoweenie" rel="contact" title="technoweenie"><img alt="" height="24" src="http://www.gravatar.com/avatar/821395fe70906c8290df7f18ac4ac6cf?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mattpolito" rel="contact" title="mattpolito"><img alt="" height="24" src="http://www.gravatar.com/avatar/f9961873414a964cb8aa6d81aa2e2293?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/ryanb" rel="contact" title="ryanb"><img alt="" height="24" src="http://www.gravatar.com/avatar/8dbf316d36ff66aad4869a4fc3cfbd37?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/rails" rel="contact" title="rails"><img alt="" height="24" src="http://www.gravatar.com/avatar/30f39a09e233e8369dddf6feb4be0308?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/engineyard" rel="contact" title="engineyard"><img alt="" height="24" src="http://www.gravatar.com/avatar/0acd291e0507eb03e5e6e961eddfa6b3?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/courtenay" rel="contact" title="courtenay"><img alt="" height="24" src="http://www.gravatar.com/avatar/6962eeda5d20190857026da4621b9f9f?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/defunkt" rel="contact" title="defunkt"><img alt="" height="24" src="http://www.gravatar.com/avatar/b8dbb1987e8e5318584865f880036796?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/thoughtbot" rel="contact" title="thoughtbot"><img alt="" height="24" src="http://www.gravatar.com/avatar/def5902fe210ca1cb5152621f1effc89?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/lifesnapz" rel="contact" title="lifesnapz"><img alt="" height="24" src="http://www.gravatar.com/avatar/8bd63181ef9f7e7f682a82b6196bcc0a?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/bmizerany" rel="contact" title="bmizerany"><img alt="" height="24" src="http://www.gravatar.com/avatar/1a250566b475961b9b36abf359950c76?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/ezmobius" rel="contact" title="ezmobius"><img alt="" height="24" src="http://www.gravatar.com/avatar/64193462abf6bab535b4e0eb7a260558?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/svenfuchs" rel="contact" title="svenfuchs"><img alt="" height="24" src="http://www.gravatar.com/avatar/402602a60e500e85f2f5dc1ff3648ecb?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/marcel" rel="contact" title="marcel"><img alt="" height="24" src="http://www.gravatar.com/avatar/aefec48f6f83b6ead722c625c8edf78b?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/NZKoz" rel="contact" title="NZKoz"><img alt="" height="24" src="http://www.gravatar.com/avatar/efa76b164a7de4a5730e4fa397cc4425?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/gbuesing" rel="contact" title="gbuesing"><img alt="" height="24" src="http://www.gravatar.com/avatar/e3e98bfa99e82ac8b0cb63660dc23b14?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/wycats" rel="contact" title="wycats"><img alt="" height="24" src="http://www.gravatar.com/avatar/428167a3ec72235ba971162924492609?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mojombo" rel="contact" title="mojombo"><img alt="" height="24" src="http://www.gravatar.com/avatar/25c7c18223fb42a4c6ae1c8db6f50f9b?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/drnic" rel="contact" title="drnic"><img alt="" height="24" src="http://www.gravatar.com/avatar/cb2b768a5e546b24052ea03334e43676?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/github" rel="contact" title="github"><img alt="" height="24" src="http://www.gravatar.com/avatar/f63f20f3843f43fae28d77233e5db5d4?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/37signals" rel="contact" title="37signals"><img alt="" height="24" src="http://www.gravatar.com/avatar/349210726e1ce6aa21840f665749fe0d?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mbleigh" rel="contact" title="mbleigh"><img alt="" height="24" src="http://www.gravatar.com/avatar/795160eca476a92b560a724869d3d942?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/lifo" rel="contact" title="lifo"><img alt="" height="24" src="http://www.gravatar.com/avatar/a05834e9b5954947eb0ba3b570c47d5e?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/dhh" rel="contact" title="dhh"><img alt="" height="24" src="http://www.gravatar.com/avatar/ed9635566b34ade32274f510f0f9a6d2?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/why" rel="contact" title="why"><img alt="" height="24" src="http://www.gravatar.com/avatar/76edd1c1ba31a43789fd42c90733f8b7?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/josh" rel="contact" title="josh"><img alt="" height="24" src="http://www.gravatar.com/avatar/bbe5dc8dcf248706525ab76f46185520?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/joshsusser" rel="contact" title="joshsusser"><img alt="" height="24" src="http://www.gravatar.com/avatar/9f0f89bbd9e1ecfbaab6584e429b7a2f?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/schacon" rel="contact" title="schacon"><img alt="" height="24" src="http://www.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mattetti" rel="contact" title="mattetti"><img alt="" height="24" src="http://www.gravatar.com/avatar/c69521d6e22fc0bbd69337ec8b1698df?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/zdzolton" rel="contact" title="zdzolton"><img alt="" height="24" src="http://www.gravatar.com/avatar/946696209f50381fc280e4c0a85cceb8?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/scottymac" rel="contact" title="scottymac"><img alt="" height="24" src="http://www.gravatar.com/avatar/b1fca7961834295e14e61dd389989cc1?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/chneukirchen" rel="contact" title="chneukirchen"><img alt="" height="24" src="http://www.gravatar.com/avatar/7264fb16beeea92b89bb42023738259d?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/bumi" rel="contact" title="bumi"><img alt="" height="24" src="http://www.gravatar.com/avatar/fd9aebbd7d8fcd1e7aa3838b49815635?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/jnunemaker" rel="contact" title="jnunemaker"><img alt="" height="24" src="http://www.gravatar.com/avatar/e13c31390e0369fcd5972292ce0e7b92?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/NickCampbell" rel="contact" title="NickCampbell"><img alt="" height="24" src="http://www.gravatar.com/avatar/54c1d4d9c1fadb93f045616682f9706d?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/yfactorial" rel="contact" title="yfactorial"><img alt="" height="24" src="http://www.gravatar.com/avatar/abaf52cd995f15b141560c4d001a8495?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/tobi" rel="contact" title="tobi"><img alt="" height="24" src="http://www.gravatar.com/avatar/94eb1850ba7cf818144aec68cf8f20aa?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/jamis" rel="contact" title="jamis"><img alt="" height="24" src="http://www.gravatar.com/avatar/992fe8c19bbbc27f2b562a9f96efc03d?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/FooBarWidget" rel="contact" title="FooBarWidget"><img alt="" height="24" src="http://www.gravatar.com/avatar/204784d162fece694532d2ef5cdc5ca5?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/nakajima" rel="contact" title="nakajima"><img alt="" height="24" src="http://www.gravatar.com/avatar/3399cbfb9e5fec93c324789b29309911?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/notahat" rel="contact" title="notahat"><img alt="" height="24" src="http://www.gravatar.com/avatar/c9c7a65848f13e2b1a226bbe43bc3672?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/rtomayko" rel="contact" title="rtomayko"><img alt="" height="24" src="http://www.gravatar.com/avatar/abfc88b96ae18c85ba7aac3bded2ec5e?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mislav" rel="contact" title="mislav"><img alt="" height="24" src="http://www.gravatar.com/avatar/8f93a872e399bc1353cc8d4e791d5401?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/jeremymcanally" rel="contact" title="jeremymcanally"><img alt="" height="24" src="http://www.gravatar.com/avatar/6d3c187a8b3ef53b08e3e7e8572c4fea?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mattly" rel="contact" title="mattly"><img alt="" height="24" src="http://www.gravatar.com/avatar/de032f4237a3c33f1557fe668bed37aa?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/dchelimsky" rel="contact" title="dchelimsky"><img alt="" height="24" src="http://www.gravatar.com/avatar/5d38ab152e1e3e219512a9859fcd93af?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/topfunky" rel="contact" title="topfunky"><img alt="" height="24" src="http://www.gravatar.com/avatar/a9d024f5032b8de04d7c74528beb77ab?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/mischa" rel="contact" title="mischa"><img alt="" height="24" src="http://www.gravatar.com/avatar/ff937b6907db49432c980f2b6a5c7e71?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/jeremy" rel="contact" title="jeremy"><img alt="" height="24" src="http://www.gravatar.com/avatar/24d2f8804e6bb4b7ea6bd11e0a586470?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/entp" rel="contact" title="entp"><img alt="" height="24" src="http://www.gravatar.com/avatar/a99bd98f4ed85c0cb1be50e9f1a46eae?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/rack" rel="contact" title="rack"><img alt="" height="24" src="http://www.gravatar.com/avatar/5f4c764ffac5f39a327ff00942a01515?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/sinatra" rel="contact" title="sinatra"><img alt="" height="24" src="http://www.gravatar.com/avatar/049b3d4227187b11c5c5ae4df472fda7?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/toconnell" rel="contact" title="toconnell"><img alt="" height="24" src="http://www.gravatar.com/avatar/3a435b21a323d931cd9a1c566de8c38b?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/jchris" rel="contact" title="jchris"><img alt="" height="24" src="http://www.gravatar.com/avatar/f73048cc21035713618d5ffa690001f4?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/adamwiggins" rel="contact" title="adamwiggins"><img alt="" height="24" src="http://www.gravatar.com/avatar/fcafc7eab67d34d48b14f9d70bc05713?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/giraffesoft" rel="contact" title="giraffesoft"><img alt="" height="24" src="http://www.gravatar.com/avatar/aefacc79816f2a05349cb22868d16ce3?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/iamwilhelm" rel="contact" title="iamwilhelm"><img alt="" height="24" src="http://www.gravatar.com/avatar/887ce7326836f3941ea12d7585386ba0?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/joshbuddy" rel="contact" title="joshbuddy"><img alt="" height="24" src="http://www.gravatar.com/avatar/c7e2ce5b40f683dfb6c1bdf5e6af0c72?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/binarylogic" rel="contact" title="binarylogic"><img alt="" height="24" src="http://www.gravatar.com/avatar/328f0bb678423fcea01ebe3b0edc74e6?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/methodmissing" rel="contact" title="methodmissing"><img alt="" height="24" src="http://www.gravatar.com/avatar/28314d64ae18c43f6b5428dc00a48e6e?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/DrBold" rel="contact" title="DrBold"><img alt="" height="24" src="http://www.gravatar.com/avatar/900a334a70ad697b08f30adf28267231?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/brynary" rel="contact" title="brynary"><img alt="" height="24" src="http://www.gravatar.com/avatar/535d73db0b47b6f745e9981e80dabdb4?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/igrigorik" rel="contact" title="igrigorik"><img alt="" height="24" src="http://www.gravatar.com/avatar/a17f0025641b4be419a6cd3845e55dd2?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/ajordan" rel="contact" title="ajordan"><img alt="" height="24" src="http://www.gravatar.com/avatar/c00720d07e1123b054935d0dcb2428ca?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/dejan" rel="contact" title="dejan"><img alt="" height="24" src="http://www.gravatar.com/avatar/0970bae1e752f9bafbddf62c07db66ad?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/grosser" rel="contact" title="grosser"><img alt="" height="24" src="http://www.gravatar.com/avatar/59436ecd4fe6ad7c34f67654d839f05f?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/actionrails" rel="contact" title="actionrails"><img alt="" height="24" src="http://www.gravatar.com/avatar/c644c5f20b9004567404677d9840589e?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/qrush" rel="contact" title="qrush"><img alt="" height="24" src="http://www.gravatar.com/avatar/eb8975af8e49e19e3dd6b6b84a542e26?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/jeresig" rel="contact" title="jeresig"><img alt="" height="24" src="http://www.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/ddollar" rel="contact" title="ddollar"><img alt="" height="24" src="http://www.gravatar.com/avatar/d7210ed93db93fbfa3de0c2215d83b9a?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
<li>
      <a href="http://github.com/Shopify" rel="contact" title="Shopify"><img alt="" height="24" src="http://www.gravatar.com/avatar/c5c29e455b8c4f05112abbc01af58a29?s=24&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-24.png" width="24" /></a>
      </li>
</ul>
</div>
<p>Dig around the users that I follow, check out what they're been up to, and try it out. If you find that your feed becomes a bit much to manage, try subscribing to your personal RSS feed. There's a link on the home page when you're logged in. </p>
<p>Thanks, GitHub. You're the best. </p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/11/github-protip-follow-other-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatically Rotate your Log Files in&#160;Development</title>
		<link>http://almosteffortless.com/2009/06/11/automatically-rotate-your-log-files-in-development/</link>
		<comments>http://almosteffortless.com/2009/06/11/automatically-rotate-your-log-files-in-development/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 02:51:40 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1395</guid>
		<description><![CDATA[I'm trying to save hard drive space, since I've got this super small (and fast?) SSD hard drive on the way. I noticed that I was using a TON of space to store totally worthless logs for my Rails apps. Now, I know I could set up proper log rotation, but I don't feel like [...]]]></description>
			<content:encoded><![CDATA[<p>I'm trying to save hard drive space, since I've got this super small (and fast?) SSD hard drive on the way. I noticed that I was using a TON of space to store totally worthless logs for my Rails apps. Now, I know I could set up proper log rotation, but I don't feel like going through the trouble for my local machine. </p>
<p>Here's a quick tip I picked up <a href="http://marklunds.com/articles/one/410">here</a> that will set your logs to automatically rotate in the test and development environments. Just add the following line to these files:</p>
<ul>
<li>config/development.rb</li>
<li>config/test.rb</li>
</ul>
<pre>config.logger = Logger.new(config.log_path, 2, 20.megabytes)</pre>
<p>Make sure you've got these in your .gitignore file as well:</p>
<pre>/log/*
*.log</pre>
<p>That will keep your log files under control, but with plenty of room for digging in if need be. </p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/11/automatically-rotate-your-log-files-in-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speed up your Apache/Passenger Rails app in&#160;2min</title>
		<link>http://almosteffortless.com/2009/06/11/speed-up-your-apachepassenger-rails-app-in-2min/</link>
		<comments>http://almosteffortless.com/2009/06/11/speed-up-your-apachepassenger-rails-app-in-2min/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 02:39:44 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1402</guid>
		<description><![CDATA[Here's a quick tip for speeding up your Apache/Passenger powered Rails app. It'll take you about 2 minutes, and I guarantee you'll notice the speed-up. 

SSH onto your VPS
Run the following commands: "a2enmod expires" and "a2enmod deflate"

Now, open up your Apache vhost config for your Rails app. Add the following:

Then, restart Apache by running: "/etc/init.d/apache2 [...]]]></description>
			<content:encoded><![CDATA[<p>Here's a quick tip for speeding up your Apache/Passenger powered Rails app. It'll take you about 2 minutes, and I guarantee you'll notice the speed-up. </p>
<ul>
<li>SSH onto your VPS</li>
<li>Run the following commands: "a2enmod expires" and "a2enmod deflate"</li>
</ul>
<p>Now, open up your Apache vhost config for your Rails app. Add the following:</p>
<p><script src="http://gist.github.com/128392.js"></script></p>
<p>Then, restart Apache by running: "/etc/init.d/apache2 restart"</p>
<p>This will gzip your html, css, and javascript. It'll also add far future expires headers for the appropriate cacheable filetypes. There's no downside, and it only takes a second. Bang for buck. </p>
<p><b>Edit</b>: Check the comments for some possible downsides... ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/11/speed-up-your-apachepassenger-rails-app-in-2min/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;6-11-09</title>
		<link>http://almosteffortless.com/2009/06/11/weekly-digest-6-11-09/</link>
		<comments>http://almosteffortless.com/2009/06/11/weekly-digest-6-11-09/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 02:09:12 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1398</guid>
		<description><![CDATA[In this edition, Timothy moves to Washington DC and Trevor trims down his "watch list" on GitHub and shares many interesting projects with you via his delicious feed. 
Trevor's Links
Email. Twice daily. No more, no less.
So, using some motivation from The Four Hour Workweek1, I opted to come back to the studio and change my [...]]]></description>
			<content:encoded><![CDATA[<p>In this edition, Timothy moves to Washington DC and Trevor trims down his "watch list" on <a href="http://github.com/trevorturk">GitHub<a> and shares many interesting projects with you via his <a href="http://delicious.com/trevorturk">delicious</a> feed. </p>
<h3>Trevor's Links</h3>
<p><a href="http://www.robbyonrails.com/articles/2009/06/10/email-twice-daily-no-more-no-less">Email. Twice daily. No more, no less.</a></p>
<blockquote><p>So, using some motivation from The Four Hour Workweek1, I opted to come back to the studio and change my behavior. That morning, I emailed my entire team and my clients to let them know that I would only be checking my email at 10am and 4pm each day.</p></blockquote>
<p><a href="http://blog.linkibol.com/post/How-to-Build-a-Popularity-Algorithm-You-can-be-Proud-of.aspx">How to Build a Popularity Algorithm You can be Proud of</a></p>
<blockquote><p>Many web sites allow users to casts vote on items. These visitors' votes are then often used to detect the items' "popularity" and hence rank the rated items accordingly. And when "rank" comes into play things gets tricky...</p></blockquote>
<p><a href="http://forum.nin.com/bb/read.php?9,731489">Online communities, etc.</a></p>
<blockquote><p>Anyway, I'm bored on a long bus drive and there's no real moral to the story here, just writing. I will be tuning out of the social networking sites because at the end of the day it's now doing more harm than good in the bigger picture and the experiment seems to have yielded a result. Idiots rule.</p></blockquote>
<p><a href="http://marklunds.com/articles/one/410">Really Simple Rails Log Rotatation</a></p>
<blockquote><p>I always used logrotate Linux tool to setup log rotation for my Rails apps which has worked fine although it required finding some external config file and understanding its config options and syntax. [Great tip for development/test environments. Might not be a good idea in production?]</p></blockquote>
<p><a href="http://justinblanton.com/2009/03/instapaper-bookmarklet">Instapaper bookmarklet, modified to close the current tab</a></p>
<blockquote><p>I modified the bookmarklet slightly so that the tab closes immediately, without disturbing the pop-up. This way, saving something for later is one simple action, instead of two.</p></blockquote>
<p><a href="http://delicioussafari.com/">DeliciousSafari</a></p>
<blockquote><p>Use and create Delicious bookmarks from the Safari web browser.</p></blockquote>
<p><a href="http://blog.leetsoft.com/2009/6/2/so-about-this-shopify-platform">So, about this Shopify Platform</a></p>
<blockquote><p>The Shopify platform allows any programmer to create applications that integrate natively with the administration interface or storefront. These applications can be written in any language and communicate with Shopify using our handcrafted REST API. We even provide some amazing rails generators to get started quickly.</p></blockquote>
<p><a href="http://jamesgolick.com/2009/6/4/introducing-trample-a-better-load-simulator.html">Introducing Trample: A Better Load Simulator</a></p>
<blockquote><p>Most load sim tools make requests to a static list of urls. They spawn n threads and make requests to the urls on the list in succession, in each thread. Unfortunately, though, if your applicaition makes use of any kind of caching (including your database's internal caching facilities), this kind of load simulation is unrealistic.</p></blockquote>
<p><a href="http://www.tosback.org/timeline.php">TOSBack | The Terms-Of-Service Tracker</a></p>
<blockquote><p>TOSBack keeps an eye on 44 website policies. Every time one of them changes, you'll see an update here.</p></blockquote>
<p><a href="http://blog.twitter.com/2009/06/not-playing-ball.html">Twitter Blog: Not Playing Ball</a></p>
<blockquote><p>We do recognize an opportunity to improve Twitter user experience and clear up confusion beyond simply removing impersonation accounts once alerted. We'll be experimenting with a beta preview of what we're calling Verified Accounts this summer.</p></blockquote>
<p><a href="http://code.google.com/p/cdto/">cdto</a></p>
<blockquote><p>Fast mini application that opens a Terminal.app window cd'd to the front most finder window. This app is designed (including it's icon) to placed in the finder window's toolbar.</p></blockquote>
<h3>Trevor's GitHub Links</h3>
<p><a href="http://github.com/quirkey/sammy/tree/master">quirkey's sammy</a></p>
<blockquote><p>Sammy is a tiny javascript framework built on top of jQuery inspired by Ruby's Sinatra.</p></blockquote>
<p><a href="http://github.com/kabuki/heresy/tree/master">kabuki's heresy</a></p>
<blockquote><p>Heresy is a schema free wrapper around your database, heavily inspired by both CouchDB and FriendFeed.</p></blockquote>
<p><a href="http://github.com/paulmars/seven_minute_abs/tree/master">paulmars's seven_minute_abs</a></p>
<blockquote><p>ab testing for rails</p></blockquote>
<p><a href="http://github.com/binarylogic/searchlogic/tree/v2">binarylogic's searchlogic at v2</a></p>
<blockquote><p>Searchlogic has been completely rewritten for v2. It is much simpler and has taken an entirely new approach. To give you an idea, v1 had ~2300 lines of code, v2 has ~350 lines of code.</p></blockquote>
<p><a href="http://github.com/semanticart/is_paranoid/tree/master">semanticart's is_paranoid</a></p>
<blockquote><p>ActiveRecord 2.3 compatible gem "allowing you to hide and restore records without actually deleting them." Yes, like acts_as_paranoid, only implemented differently...</p></blockquote>
<p><a href="http://github.com/brynary/webrat/tree/master">brynary's webrat</a></p>
<blockquote><p>Webrat - Ruby Acceptance Testing for Web applications.</p></blockquote>
<p><a href="http://github.com/mbleigh/twitter-auth/tree/master">mbleigh's twitter-auth</a></p>
<blockquote><p>Standard authentication stack for Rails using Twitter to log in.</p></blockquote>
<p><a href="http://github.com/courtenay/splam/tree/master">courtenay's splam</a></p>
<blockquote><p>Simple, pluggable, easily customizable score-based spam filter plugin for Ruby-based applications.</p></blockquote>
<p><a href="http://github.com/jeremy/ruby-prof/tree/master">jeremy's ruby-prof</a></p>
<blockquote><p>a fast code profiler for Ruby</p></blockquote>
<p><a href="http://github.com/nakajima/roleful/tree/master">nakajima's roleful</a></p>
<blockquote><p>Generic roles for you and your objects.</p></blockquote>
<p><a href="http://github.com/37signals/wysihat/tree/master">37signals's wysihat</a></p>
<blockquote><p>A WYSIWYG JavaScript framework</p></blockquote>
<p><a href="http://github.com/binarylogic/authlogic/tree/master">binarylogic's authlogic</a></p>
<blockquote><p>A clean, simple, and unobtrusive ruby authentication solution.</p></blockquote>
<p><a href="http://github.com/joshuaclayton/blueprint-css/tree/master">joshuaclayton's blueprint-css</a></p>
<blockquote><p>A CSS framework that aims to cut down on your CSS development time.</p></blockquote>
<p><a href="http://github.com/stephencelis/dots/tree/master">stephencelis's dots</a></p>
<blockquote><p>Free progress dots for your scripts. Test::Unit-style.</p></blockquote>
<p><a href="http://github.com/wycats/merb-extlib/tree/master">wycats's merb-extlib</a></p>
<blockquote><p>Ruby core extensions library extracted from Merb core.</p></blockquote>
<p><a href="http://github.com/jodosha/plugin_migrations/tree/master">jodosha's plugin_migrations</a></p>
<blockquote><p>Rake tasks for running plugin migrations.</p></blockquote>
<p><a href="http://github.com/tcocca/acts_as_follower/tree/master">tcocca's acts_as_follower</a></p>
<blockquote><p>A Plugin to add "Follow" functionality for models</p></blockquote>
<p><a href="http://github.com/mojodna/active_queue/tree/master">mojodna's active_queue</a></p>
<blockquote><p>A toolkit for queueing tasks and creating worker processes</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/06/11/weekly-digest-6-11-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;5-31-09</title>
		<link>http://almosteffortless.com/2009/05/31/weekly-digest-5-31-09/</link>
		<comments>http://almosteffortless.com/2009/05/31/weekly-digest-5-31-09/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 02:42:04 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1387</guid>
		<description><![CDATA["Weekly" ]]></description>
			<content:encoded><![CDATA[<p>"Weekly" <- in scare-quotes</p>
<h3>Trevor's Links</h3>
<p><a href="http://factoryjoe.com/blog/2009/05/26/stowe-boyd-launches-microsyntax-org/">Stowe Boyd launches Microsyntax.org</a></p>
<blockquote><p>Stowe Boyd launched Microsyntax.org... a number of ideas for making posts on Twitter contain more information than what is superficially presented, and this new effort should create a space in which ideas, research, proposals and experiments can be made and discussed.</p></blockquote>
<p><a href="https://payments.amazon.com/sdui/sdui/business?sn=paynow/subscription">Amazon Payments Account Management</a></p>
<blockquote><p>Amazon Simple Pay Subscriptions enables you to charge your customers on a recurring basis using a single authorization from the customer. It is for those who offer digital content subscriptions, collect membership dues on a periodic basis, or provide premium services on their website.</p></blockquote>
<p><a href="http://www.siliconvalleywatcher.com/mt/archives/2009/05/7_great_reasons.php">7 Great Reasons Not To Take VC Money</a></p>
<blockquote><p>Raising venture capital for early stage start-ups seems to be the prevailing path for most entrepreneurs; however, most would-be founders should reconsider.</p></blockquote>
<p><a href="http://jcs.biologists.org/cgi/content/full/121/11/1771">The importance of stupidity in scientific research</a></p>
<blockquote><p>The crucial lesson was that the scope of things I didn't know wasn't merely vast; it was, for all practical purposes, infinite. That realization, instead of being discouraging, was liberating. If our ignorance is infinite, the only possible course of action is to muddle through as best we can.</p></blockquote>
<p><a href="http://themomorohoax.com/2009/05/21/when-to-use-self-in-ruby-rails-models">When to use self in Rails models</a></p>
<blockquote><p>When I started with Rails, half the words in my models were self. This wasn’t necessary. Now, when I edit code by other people, I find myself constantly deleting “self” from their code.</p></blockquote>
<p><a href="http://themomorohoax.com/2009/05/21/ruby-code-should-be-as-clear-as-english-the-guy-on-the-street-test">The random person test</a></p>
<blockquote><p>Why not try to write code that future programmers will thank me for because it was so clear and obvious? Programmer skill should be measured not only in the complexity of the problems that they can solve, but in the clarity of their solutions.</p></blockquote>
<p><a href="http://www.contrast.ie/blog/patience-and-hard-work/">Patience and hard work</a></p>
<blockquote><p>There is a gaping chasm between a web app sitting on a server somewhere, and the ingredients of a business. Establishing a brand, getting the right kind of people to listen, and growing your own customer-base doesn’t happen as a by product of really sweet Javascript effects.</p></blockquote>
<p><a href="http://radar.oreilly.com/2009/05/google-wave-what-might-email-l.html">Google Wave: What Might Email Look Like If It Were Invented Today</a></p>
<blockquote><p>Google wants other providers to adopt Wave - the protocol allows federation between independent Wave clouds. The team hopes that Wave will become as ubiquitous and interoperable as email and instant messaging, not just a Google product.</p></blockquote>
<p><a href="http://news.ycombinator.com/item?id=629040">Ask HN: I'm Tired of Hacking. What Do I Do? Please Advise.</a></p>
<blockquote><p>I just can't do it anymore. I hate sitting on my ass all day writing some code. My neck has been hurting for two years for spending so many hours in front of the computer. I kind of have been hating my career for a couple of years now and I have no clue about what I should do.</p></blockquote>
<p><a href="http://merbist.com/2009/05/27/macruby-changing-the-ruby-ecosystem/">MacRuby, changing the Ruby ecosystem</a></p>
<blockquote><p>MacRuby is an Apple-sponsored, open source, full Ruby implementation on top of  Objective-C runtime. In other words, whatever code runs on Ruby 1.9, should/will run on MacRuby. Yes, you read correctly, MacRuby can/will be able to run all your Ruby code.</p></blockquote>
<p><a href="http://www.bitcetera.com/en/techblog/2009/05/27/mac-friendly-autotest/">Mac-friendly Autotest</a></p>
<blockquote><p>ZenTest’s autotest is great, but it has one drawback: In order to detect whether you have modified a file, it relies on filesystem polling. In other words it constantly traverses the filesystem and thus causes a lot of CPU and harddrive load.</p></blockquote>
<p><a href="http://railstips.org/2009/5/15/include-verse-extend-in-ruby">Include vs Extend in Ruby</a></p>
<blockquote><p>Now that we know the difference between an instance method and a class method, let’s cover the difference between include and extend in regards to modules. Include is for adding methods to an instance of a class and extend is for adding class methods. Let’s take a look at a small example.</p></blockquote>
<p><a href="http://railstips.org/2009/5/11/class-and-instance-methods-in-ruby">Class and Instance Methods in Ruby</a></p>
<blockquote><p>Class methods can only be called on classes and instance methods can only be called on an instance of a class. It’s simple when you understand it, but I remember being confused when I was learning Ruby. Hope this helps. If I was unclear or incorrect at any point above, let me know. [Nice, easy to follow overview.]</p></blockquote>
<p><a href="http://simonwillison.net/2009/May/19/djng/">djng—a Django powered microframework</a></p>
<blockquote><p>djng is my experiment to see what Django would like without settings.py and with a whole lot more turtles. It’s Yet Another Python Microframework.</p></blockquote>
<p><a href="http://www.holovaty.com/writing/django-two-phased-rendering/">Django tip: Caching and two-phased template rendering</a></p>
<blockquote><p>We've launched user accounts at EveryBlock and we faced the interesting problem of needing to cache entire pages except for "You're logged in as [username]" bit top page. The solution ended up using is two-phased template rendering.</p></blockquote>
<p><a href="http://www.scribd.com/doc/3188436/Assembling-Pages-Last-Edge-Caching-ESI-and-Rails">Assembling Pages Last: Edge Caching, ESI and Rails</a></p>
<blockquote><p>[Good overview of ESI pros/cons.]</p></blockquote>
<p><a href="http://factoryjoe.com/blog/2009/05/18/the-open-social-web/">The open, social web</a></p>
<blockquote><p>If I told you that the iPhone was the best example of the success of standards and open source, you’d probably laugh at me, but check it out...</p></blockquote>
<h3>Timothy's Links</h3>
<p><a href="http://hostingfu.com/article/server-monitoring-cacti-serverstats">Server Monitoring with Cacti + ServerStats | HostingFu</a></p>
<blockquote><p>This is kind of cool: if you've got a computer somewhere on your local network and you want the laity to have access to rough stats, all you've got to do is fire this package up, tweak xinetd a little bit, and voila--your boss can look over your shoulder from the comforts of his own office.</p></blockquote>
<p><a href="http://www.slicehost.com/articles/2009/5/19/slicehost-for-android">Slicehost for Android // Slicehost - VPS Hosting</a></p>
<blockquote><p>Trevor pointed me in the direction of this one. It's a neat little app--very minimalist and very Linux-y--that lets you check on your bandwidth, slice stats (e.g. mem/proc/distro name and version) and gives you the option to do a remote /sbin/poweroff or an /sbin/shutdown -h now. Very neat.</p></blockquote>
<p><a href="http://threatpost.com/blogs/research-password-secret-question-woefully-insecure">Research: Password 'secret question' woefully insecure</a></p>
<blockquote><p>Let's get a movement going here: if enough Internet types spread the word that no one in their right mind or who possesses any kind of meaningful credential endorses "secret questions" and that, in fact, the research shows that they make accounts _less_ secure, maybe we can kick up enough dust to get rid of them.</p></blockquote>
<p><a href="http://www.cmdln.org/2009/05/19/three-letters/">Three Letters</a></p>
<blockquote><p>This take on the classic joke has a sysadmin slant; guaranteed to be appreciated by everyone from Exchange rebooters in silk cravats to consolemen who live on the metal.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/05/31/weekly-digest-5-31-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samba: change a Windows user&#8217;s hashed password. And then change it&#160;back.</title>
		<link>http://almosteffortless.com/2009/05/21/samba-change-a-windows-users-hashed-password-and-then-change-it-back/</link>
		<comments>http://almosteffortless.com/2009/05/21/samba-change-a-windows-users-hashed-password-and-then-change-it-back/#comments</comments>
		<pubDate>Thu, 21 May 2009 16:54:36 +0000</pubDate>
		<dc:creator>Timothy O'Connell</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1379</guid>
		<description><![CDATA[File this one under "hacks". Cross-list it under "more basic administrative tasks you can't do on Windows".
Here's the situation: you're the admin of a Windows domain where the Domain Controller is a Linux box serving Samba. Your problem, other than the fact that you're surrounded by Windows users, is that you've got a user who's [...]]]></description>
			<content:encoded><![CDATA[<p>File this one under "hacks". Cross-list it under "more basic administrative tasks you can't do on Windows".</p>
<p>Here's the situation: you're the admin of a Windows domain where the Domain Controller is a Linux box serving Samba. Your problem, other than the fact that you're surrounded by Windows users, is that you've got a user who's password you don't know and, for whatever reason, you need to log onto your Windows domain <em>as</em> that user: a simple <em>RUNAS</em> won't cut it this time. </p>
<p>Normally, you'd just nuke his password, change it to "password" (or whatever), log on as him, do your dirty, sinful business, log off, expire his password and then send him an email telling him that his password has been changed to "password" and that he'll be prompted to change it at his next log on.</p>
<p>But what if that wasn't an option? What if you needed to log on to your domain as that user and it was important that he be none the wiser?</p>
<h2>Grab the Hashes</h2>
<p>First, use your favorite smbldap-type tool to get the current password info on the user you're fixin' to use:
<pre>frances:~# smbldap-usershow toconnell
<strong>dn: uid=toconnell,ou=Users,dc=domain,dc=com</strong>
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
cn: toconnell
sn: toconnell
givenName: toconnell
uid: toconnell
uidNumber: 1007
[...]
sambaPwdCanChange: 1202398556
sambaPwdMustChange: 9223372036854775807
<strong>sambaLMPassword: BE41CD009FF0812C718CCFD7D98A52AA
sambaNTPassword: 9454453CBC8A48DEF442F6B0A10B3EAA</strong>
sambaPwdLastSet: 1202398556
<strong>userPassword: {SSHA}baSDvXS6C6DSBNkJGyEYplprZ3wslAa/</strong></pre>
<p>Copy everything that's bolded and stick it somewhere safe. That <em>dn</em> information is going to be necessary later on, as it contains the ldap tags that you'll need to specify the record you want to modify; those hashes at the bottom are the user's original passwords and, when you want to cover your tracks later on, you'll need that info.</p>
<p>Now that you've got those hashes, you're free to nuke the user's password (again, using your favorite smbldap-type-tool or however else you like to reset passwords), log in as him, do whatever you have to do, and then log out:
<pre>frances:~# smbldap-passwd toconnell
Changing UNIX and samba passwords for toconnell
New password:
Retype new password:
</pre>
<p>Once you're out, you're going to want to set his password back to what it once was. This is where <em>ldapmodify</em> comes into play.</p>
<h2>Kerberos</h2>
<p>Before you can do that, however, you'll need to get a <em>kerberos</em> ticket. This is because you'll need to be <em>kerberos</em>-authenticated to make your ldap modifications stick. So, first things first, get yourself an admin <em>kerberos</em> ticket:
<pre>frances:~# kinit toconnell/admin
Password for toconnell/admin@DOMAIN.COM:
frances:~# </pre>
<h2>ldapmodify</h2>
<p>A quick glance at the man page for <em>ldapmodify</em> shows that the most convenient way to make changes to an ldap entry is to use the <em>-f</em> flag and an input file. The example in the man page for how to construct the input file is this:
<pre> dn: cn=Modify Me,dc=example,dc=com
           changetype: modify
           replace: mail
           mail: modme@example.com
           -
           add: title
           title: Grand Pooba</pre>
<p>So, using the data we got above, we're going to make a similar file containing the original hashes from our target user in order to change his password back to what it used to be:
<pre>dn: uid=toconnell,ou=Users,dc=domain,dc=com
changetype: modify
replace: sambaLMPassword
sambaLMPassword: BE41CD009FF0812C718CCFD7D98A52AA
-
replace: sambaNTPassword
sambaNTPassword: 9454453CBC8A48DEF442F6B0A10B3EAA</strong>
-
replace: userPassword
userPassword: {SSHA}abSDvXS6C6DSBNkJGyEYplprZ3wslAa/</pre>
<p>Remember to include those "-" characters and to give them their own line: if you fail to do that, you'll get mystery errors about unknown types, etc.</p>
<p>Once you've got your file, fire off your changes like this:
<pre>ldapmodify -f /path/to/file</pre>
<p>And that's all you've got to do. When the original user attempts to log in with his old password, everything will look perfectly normal to him: you never saw his password in plaintext and, as far as he's concerned, none of this ever happened.</p>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/05/21/samba-change-a-windows-users-hashed-password-and-then-change-it-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Weekly Digest,&#160;5-17-09</title>
		<link>http://almosteffortless.com/2009/05/17/weekly-digest-5-17-09/</link>
		<comments>http://almosteffortless.com/2009/05/17/weekly-digest-5-17-09/#comments</comments>
		<pubDate>Mon, 18 May 2009 02:55:44 +0000</pubDate>
		<dc:creator>Weekly Digest</dc:creator>
				<category><![CDATA[Weekly Digest]]></category>

		<guid isPermaLink="false">http://almosteffortless.com/?p=1375</guid>
		<description><![CDATA[Trevor's Links
Interview with Ian Hickson, editor of the HTML 5 specification
You’ve heard it’s coming in 2012. Or maybe 2022. It’s certainly not ready yet, but some parts are already in browsers now so for the standards-savvy developers, the future is worth investigating today. Ian “Hixie” Hickson, editor of the HTML 5 specification, hopes that the [...]]]></description>
			<content:encoded><![CDATA[<h3>Trevor's Links</h3>
<p><a href="http://www.webstandards.org/2009/05/13/interview-with-ian-hickson-editor-of-the-html-5-specification/">Interview with Ian Hickson, editor of the HTML 5 specification</a></p>
<blockquote><p>You’ve heard it’s coming in 2012. Or maybe 2022. It’s certainly not ready yet, but some parts are already in browsers now so for the standards-savvy developers, the future is worth investigating today. Ian “Hixie” Hickson, editor of the HTML 5 specification, hopes that the spec will go to Last Call Working Draft in October this year.</p></blockquote>
<p><a href="http://www.rubyinside.com/the-mega-railsconf-2009-round-up-1757.html">The Mega RailsConf 2009 Round Up</a></p>
<blockquote><p>A week ago, RailsConf 2009 kicked off in Las Vegas. As usual, it didn't fall short on drama, interesting sessions, and inspiration for the 1000+ attendees. This post is an after-event summary and long-term source of links to the best RailsConf 2009 related content found so far.</p></blockquote>
<p><a href="http://www.37signals.com/svn/posts/1728-nuts-bolts-campfire-loves-erlang">Nuts & Bolts: Campfire loves Erlang</a></p>
<blockquote><p>Erlang definitely isn’t a replacement for Rails, but it is a fantastic addition to our collective toolbox for problems that Rails wasn’t designed to address. It’s always easier to work with the grain than against it, and adding more tools makes that more likely.</p></blockquote>
<p><a href="http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines">Tango Icon Theme Guidelines</a></p>
<blockquote><p>The Tango icon theme's goal is to make applications not seem alien on any desktop. A user running a multiplatform application should not have the impression that the look is unpolished and inconsistent with what he or she is used to. While this isn't about merging styles of all desktop systems, we do aim to not be drastically different on each platform.</p></blockquote>
<p><a href="http://lifehacker.com/5240827/rightzoom-makes-the-os-x-maximize-button-more-like-windows">RightZoom Makes the OS X Maximize Button More Like Windows</a></p>
<blockquote><p>Mac OS X only: System utility RightZoom runs in the background and modifies the OS X maximize behavior to fill the whole screen—perfect for readers that recently made the switch to Mac.</p></blockquote>
<p><a href="http://railscasts.com/episodes/158-factories-not-fixtures">Railscasts - Factories not Fixtures</a></p>
<blockquote><p>Fixtures are external dependencies which can make tests brittle and difficult to read. In this episode I show a better alternative using factories to generate the needed records. [I prefer Machinist to Factory Girl, but this is a particularly good episode all around.]</p></blockquote>
<p><a href="http://github.com/rails/rails/commit/4932f7b38f72104819022abca0c952ba6f9888cb">db/seeds.rb in Rails</a></p>
<blockquote><p>Added db/seeds.rb as a default file for storing seed data for the database. Can be loaded with rake db:seed (or created alongside the db with db:setup). (This is also known as the "Stop Putting Gawd Damn Seed Data In Your Migrations" feature) [DHH]</p></blockquote>
<h3>Timothy's Links</h3>
<p><a href="http://www.matasano.com/log/1674/the-security-implications-of-google-native-client/">The Security Implications Of Google Native Client</a></p>
<blockquote><p>This is a really cool from Matasano about how things like ActiveX and Java work from the perspective of someone trying to execute compiled code from a remote source without giving away the whole store, security-wise. Nice pictures, very informative.</p></blockquote>
<p><a href="http://www.debianadmin.com/how-to-add-date-and-time-to-your-bash-history-file.html">How to Add Date And Time To Your Bash History file -- Debian Admin</a></p>
<blockquote><p>This is a neat one-liner for your .bashrc that just might make your .bash_history a little more searchable. Add it to your custom .bashrc lines.</p></blockquote>
<p><a href="http://www.irbs.net/internet/postfix/0608/1651.html">Postfix main.cf analysis</a></p>
<blockquote><p>Here's the setup: the one dude pastes his postconf -n and the other dude does through it, telling him what's what. Kind of a cross between a postmortem and an x-ray. Useful to test your postfix knowledge/skills.</p></blockquote>
<p><a href="http://seerofsouls.com/wiki/How-Tos/SplitScreenVi">SoS Wiki - - Split Screen Vi</a></p>
<blockquote><p>If you use vi/vim and you don't do split screen, you are, in the immortal words of whatever Internet meme, doing it wrong. Study up!</p></blockquote>
<p><a href="http://www.howtogeek.com/howto/ubuntu/set-gmail-as-default-mail-client-in-ubuntu/">Set Gmail as Default Mail Client in Ubuntu :: the How-To Geek</a></p>
<blockquote><p>This is a neat little trick for writing a line or two of bash that will allow you to use gmail (via firefox) as your default email client in a gnome environment. It wouldn't take much to adapt the instructions for other desktop environments. (Props to Artie for sending this my way)</p></blockquote>
<p><a href="http://www.securityfocus.com/brief/957">Reports: Thief holds Virginia medical data ransom</a></p>
<blockquote><p>I guess, technically, that since I'm on the side of the law by virtue of my professional situation, I ought to regard this as terrifying or reprehensible or something. But you gotta admit: something about the idea of a blackhat utterly pwning someone's network to the extent of the pwnage described here is really, really exciting.</p></blockquote>
<p><a href="http://www.cyberciti.biz/faq/postfix-backup-mx-server-anti-spam/">Postfix Backup MX eMail Server Anti-Spam Configuration</a></p>
<blockquote><p>The English is a little messy on this one, but the conf text is right on. This is a nice little list of basic (yet above and beyond "stock") config options for reducing shenanigans and closing commonly exploited gaps.</p></blockquote>
<p><a href="http://snippets.dzone.com/posts/show/4819">Restore a single table from a large MySQL backup</a></p>
<blockquote><p>I'm not sure that I understand the ruby syntax completely, but people are passing this link around, so this is my obligatory bump.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almosteffortless.com/2009/05/17/weekly-digest-5-17-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
