<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>moments.each do { post }</description><title>Untilted*</title><generator>Tumblr (3.0; @bomberstudios)</generator><link>http://bomberstudios.tumblr.com/</link><item><title>CushyCMS - Take the work out of managing content</title><description>&lt;a href="http://www.cushycms.com/"&gt;CushyCMS - Take the work out of managing content&lt;/a&gt;: &lt;p&gt;The “add a class to make content editable” is brilliant.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/31829061</link><guid>http://bomberstudios.tumblr.com/post/31829061</guid><pubDate>Tue, 15 Apr 2008 15:32:26 +0200</pubDate></item><item><title>This is what happens when you let programmers design...</title><description>&lt;img src="http://10.media.tumblr.com/HeQJKK4kQ7r0qkyeIKajcGYH_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;This is what happens when you let programmers design interfaces.&lt;/p&gt;

&lt;p&gt;(via &lt;a href="http://news.ycombinator.com"&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/31622597</link><guid>http://bomberstudios.tumblr.com/post/31622597</guid><pubDate>Sun, 13 Apr 2008 12:26:51 +0200</pubDate></item><item><title>"cvs rm -rf ; cvs commit -m “Your license sucks. Your code sucks. You suck. Happy..."</title><description>“cvs rm -rf &lt;blah&gt;; cvs commit -m “Your license sucks. Your code sucks. You suck. Happy Christmas.”&lt;/blah&gt;”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://lists.freebsd.org/pipermail/freebsd-ports/2007-December/045479.html"&gt; Ion3 license violation
   &lt;/a&gt;&lt;/em&gt;</description><link>http://bomberstudios.tumblr.com/post/31617969</link><guid>http://bomberstudios.tumblr.com/post/31617969</guid><pubDate>Sun, 13 Apr 2008 10:57:14 +0200</pubDate></item><item><title>n.tecs Blog - ZFS vs. HammerFS</title><description>&lt;a href="http://www.ntecs.de/blog/articles/2008/01/17/zfs-vs-hammerfs"&gt;n.tecs Blog - ZFS vs. HammerFS&lt;/a&gt;: &lt;p&gt;Infinite snapshots, clustering, easy backups, fast recovery… what’s not to love about HammerFS? : )&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/31617782</link><guid>http://bomberstudios.tumblr.com/post/31617782</guid><pubDate>Sun, 13 Apr 2008 10:52:51 +0200</pubDate></item><item><title>"You have to learn Perl by memorizing, but you learn Ruby by understanding."</title><description>“You have to learn Perl by memorizing, but you learn Ruby by understanding.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://steve.yegge.googlepages.com/ruby-tour"&gt;Stevey’s Home Page - A Quick Tour of Ruby &lt;/a&gt;&lt;/em&gt;</description><link>http://bomberstudios.tumblr.com/post/31576418</link><guid>http://bomberstudios.tumblr.com/post/31576418</guid><pubDate>Sat, 12 Apr 2008 21:17:40 +0200</pubDate></item><item><title>visual image diff, v0.000000001</title><description>&lt;pre&gt;&lt;code&gt;
#!/usr/bin/env ruby

require "rubygems"
require "RMagick"

original = Magick::Image.read(ARGV[0]).first
new_version = Magick::Image.read(ARGV[1]).first
comparison = original.composite(new_version, Magick::CenterGravity, Magick::DifferenceCompositeOp)
comparison.write("diff.png")
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Save in ~/bin, add ‘bin’ to PATH, and use as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ vdiff original_version.png new_version.png
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and a ‘diff.png’ file highlighting the differences is created.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/29781397</link><guid>http://bomberstudios.tumblr.com/post/29781397</guid><pubDate>Tue, 25 Mar 2008 09:48:49 +0100</pubDate></item><item><title>“Respect standards: you do not work alone” (from the trace...</title><description>&lt;img src="http://14.media.tumblr.com/HeQJKK4kQ68tm7ol8HhCj2rv_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;“Respect standards: you do not work alone” (from the trace output of some Amazon flash thingie)&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/28108313</link><guid>http://bomberstudios.tumblr.com/post/28108313</guid><pubDate>Thu, 06 Mar 2008 13:09:16 +0100</pubDate></item><item><title>SwitchPipe - Process Manager and Proxy for Rapid Web App Deployment</title><description>&lt;a href="http://switchpipe.org/"&gt;SwitchPipe - Process Manager and Proxy for Rapid Web App Deployment&lt;/a&gt;: &lt;p&gt;SwitchPipe manages and forwards HTTP requests to Web application processes, automatically managing balancing, port numbers, monitoring and timeouts.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/27930760</link><guid>http://bomberstudios.tumblr.com/post/27930760</guid><pubDate>Tue, 04 Mar 2008 14:22:37 +0100</pubDate></item><item><title>ExpanDrive - Bring your remote files closer to home.</title><description>&lt;a href="http://www.magnetk.com/expandrive"&gt;ExpanDrive - Bring your remote files closer to home.&lt;/a&gt;: &lt;p&gt;“I’ve never seen TextMate work well on a network drive. With ExpanDrive, it’s a dream. And the drives stay mounted perfectly when I move my laptop between home and work.”&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/27875932</link><guid>http://bomberstudios.tumblr.com/post/27875932</guid><pubDate>Mon, 03 Mar 2008 23:38:01 +0100</pubDate></item><item><title>Jannis Leidel » Resurrecting MissingDrawer plugin for TextMate</title><description>&lt;a href="http://jannisleidel.com/2008/02/missingdrawer/"&gt;Jannis Leidel » Resurrecting MissingDrawer plugin for TextMate&lt;/a&gt;: &lt;p&gt;Some time ago Hetima published a plugin for TextMate called MissingDrawer which “provides Xcode-like project window interface without drawer.”&lt;/p&gt;

&lt;p&gt;I thought this would be a great idea but found it a little incomplete. Thankfully they released the source code under the MIT license which made modifications very easy.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/27320175</link><guid>http://bomberstudios.tumblr.com/post/27320175</guid><pubDate>Tue, 26 Feb 2008 12:58:20 +0100</pubDate></item><item><title>fuckingfuckingfuck</title><description>&lt;img src="http://14.media.tumblr.com/HeQJKK4kQ5ltugzsZxgNN2J2_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;fuckingfuckingfuck&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/26704400</link><guid>http://bomberstudios.tumblr.com/post/26704400</guid><pubDate>Tue, 19 Feb 2008 10:57:10 +0100</pubDate></item><item><title>Thin - yet another web server</title><description>&lt;a href="http://code.macournoyer.com/thin/"&gt;Thin - yet another web server&lt;/a&gt;: &lt;p&gt;Thin is a Ruby web server that glues together 3 of the best Ruby libraries in web history:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the Mongrel parser, the root of Mongrel speed and security&lt;/li&gt;
&lt;li&gt;Event Machine, a network I/O library with extremely high scalability, performance and stability&lt;/li&gt;
&lt;li&gt;Rack, a minimal interface between webservers and Ruby frameworks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Which makes it, with all humility, the most secure, stable, fast and extensible Ruby web server bundled in an easy to use gem for your own pleasure.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/26632095</link><guid>http://bomberstudios.tumblr.com/post/26632095</guid><pubDate>Mon, 18 Feb 2008 15:22:53 +0100</pubDate></item><item><title>The Language of Interaction</title><description>&lt;a href="http://www.languageofinteraction.com/"&gt;The Language of Interaction&lt;/a&gt;: &lt;p&gt;We are interaction designers during a time of rapid technological change, placing us in the incredible position of collectively creating and curating a new language, the language of interaction. The explosion of products with interfaces means that people have to continually adapt and learn new things. They will have to read each interface and look for clues, common visual elements that they’ve seen before. They’ll subconsciously look for a language that comprises words, sounds, colors, shapes, icons, motion, gestures, priorities, hierarchies and more. We are the custodians of this language, creating and curating it organically. We need to start seeing it everywhere and learn from each other as we define the future relationship between people and technology.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/26270775</link><guid>http://bomberstudios.tumblr.com/post/26270775</guid><pubDate>Wed, 13 Feb 2008 23:58:09 +0100</pubDate></item><item><title>Design Observer: "Look &amp; Feel"</title><description>&lt;a href="http://www.designobserver.com/archives/032084.html"&gt;Design Observer: "Look &amp; Feel"&lt;/a&gt;: &lt;p&gt;“Does any of this matter? If clients are happy to refer to the output of graphic designers as “look and feel,” where’s the harm? Well, the harm is that it’s a euphemistic term that no better describes what good design can do that “nip and tuck” describes the work of a skilled brain surgeon. We encourage its use at our peril. Resist, I say.”&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/25783513</link><guid>http://bomberstudios.tumblr.com/post/25783513</guid><pubDate>Thu, 07 Feb 2008 22:48:33 +0100</pubDate></item><item><title>Alimentarse!</title><description>ana: o vamos aaaaaal questá al ladow del mirrowrr?&lt;br /&gt;&#13;
ana: ahí ponen chupitos de chirrisclás&lt;br /&gt;&#13;
ana: que yo lo sé&lt;br /&gt;&#13;
adriana: Chupitos tienen nutrientes&lt;br /&gt;&#13;
Manu: especialmente si te comes el vaso&lt;br /&gt;&#13;
Manu: todo minerales</description><link>http://bomberstudios.tumblr.com/post/25655481</link><guid>http://bomberstudios.tumblr.com/post/25655481</guid><pubDate>Wed, 06 Feb 2008 13:37:02 +0100</pubDate></item><item><title>JoikuSpot, turn your Symbian mobile to WLAN HotSpot</title><description>&lt;p&gt;&lt;a href="http://www.joiku.com/?action=products&amp;mode=productDetails&amp;product_id=310"&gt;JoikuSpot&lt;/a&gt; is a free mobile software solution that turns Nokia Smartphones to WLAN HotSpots.&lt;/p&gt;

&lt;p&gt;JoikuSpot software is installed directly to the phone. When switched on, laptops and ipods can establish instant and fast wireless internet connection via smartphone’s JoikuSpot access point using phone’s own 3G internet connection.&lt;/p&gt;</description><link>http://bomberstudios.tumblr.com/post/25652371</link><guid>http://bomberstudios.tumblr.com/post/25652371</guid><pubDate>Wed, 06 Feb 2008 12:40:33 +0100</pubDate></item><item><title>"Changeset [6734] by ryan

More edit.php butchery. Time for designers to take over"</title><description>“&lt;p&gt;Changeset [6734] by ryan&lt;/p&gt;

&lt;p&gt;More edit.php butchery. Time for designers to take over&lt;/p&gt;”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;from the WordPress Changelog&lt;/em&gt;</description><link>http://bomberstudios.tumblr.com/post/25649854</link><guid>http://bomberstudios.tumblr.com/post/25649854</guid><pubDate>Wed, 06 Feb 2008 11:56:00 +0100</pubDate></item><item><title>"The act of composition, or creation, disciplines the mind; writing is one way to go about thinking,..."</title><description>“The act of composition, or creation, disciplines the mind; writing is one way to go about thinking, and the practice and habit of writing not only drain the mind but supply it, too.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;The Elements of Style, E.B. White&lt;/em&gt;</description><link>http://bomberstudios.tumblr.com/post/25495728</link><guid>http://bomberstudios.tumblr.com/post/25495728</guid><pubDate>Mon, 04 Feb 2008 12:43:56 +0100</pubDate></item><item><title>About design...</title><description>&lt;p&gt;After marveling at Michelangelo’s statue of Goliath-vanquishing David, the Pope asked the sculptor&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;How do you know what to cut away?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Michelangelo’s reply?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s simple. I just remove everything that doesn’t look like David.&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://bomberstudios.tumblr.com/post/24977508</link><guid>http://bomberstudios.tumblr.com/post/24977508</guid><pubDate>Tue, 29 Jan 2008 10:07:35 +0100</pubDate></item><item><title>Import your IMAP mail to GMail, the easy way</title><description>&lt;p&gt;found somewhere on the beautiful internet…&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/env ruby
require 'net/imap'
require 'timeout'

# Source server connection info.
SOURCE_HOST = "current.mailhost.com"
SOURCE_PORT = 143
SOURCE_SSL  = false
SOURCE_USER = "username"
SOURCE_PASS = "pass"

# Destination server connection info.
DEST_HOST = "imap.gmail.com"
DEST_PORT = 993
DEST_SSL  = true
DEST_USER = "username@gmail.com"
DEST_PASS = "pass"

UID_BLOCK_SIZE = 10 # max number of messages to select at once

#messages with known issues.
blacklist = []

# Mapping of @source folders to @destination folders. The key is the name of the
# folder on the @source server, the value is the name on the @destination server.
# Any folder not specified here will be ignored. If a @destination folder does
# not exist, it will be created.
FOLDERS = {
  # some examples:
  # 'INBOX.@archive.2003' =&gt; '2003',
  # 'INBOX.@archive.2004' =&gt; '2004',
  # 'INBOX.@archive.2006' =&gt; '2006',
  # 'INBOX.@archive.2007' =&gt; '2007',
  # 'INBOX.@archive.Sent-Archive' =&gt; '[Import].Sent Mail'
  'INBOX' =&gt; 'INBOX',
  'INBOX.Sent' =&gt; 'Sent Mail'
}

# Utility methods.
def dd(message)
  puts "[#{DEST_HOST}] #{message}"
end

def ds(message)
  puts "[#{SOURCE_HOST}] #{message}"
end

def uid_fetch_block(server, uids, *args)
  pos = 0
  while pos  e
      ds "error: select failed: #{e}"
      next
    end

    # Open (or create) @destination folder in read-write mode.
    begin
      dd "selecting folder ‘#{dest_folder}’..."
      @dest.select(dest_folder)
    rescue =&gt; e
      begin
        dd "folder not found; creating…"
        @dest.create(dest_folder)
        @dest.select(dest_folder)
      rescue =&gt; ee
        dd "error: could not create folder: #{e}"
        next
      end
    end

    # Build a lookup hash of all message ids present in the @destination folder.
    dest_info = {}

    dd "analyzing existing messages"
    uids = @dest.uid_search(['ALL'])
    dd "found #{uids.length} messages"
    if uids.length &gt; 0
      uid_fetch_block(@dest, uids, ['ENVELOPE']) do |data|
        dest_info[data.attr['ENVELOPE'].message_id] = true
      end
    end

    # Loop through all messages in the @source folder.
    uids = @source.uid_search(['ALL'])
    ds "found #{uids.length} messages"
    if uids.length &gt; 0
      uid_fetch_block(@source, uids, ['ENVELOPE']) do |data|
        mid = data.attr['ENVELOPE'].message_id

        # If this message is already in the @destination folder, skip it.
        next if dest_info[mid]
        #if this message has caused a hang before, skip it
        next if blacklist.include?(mid)  

        # Download the full message body from the @source folder.
        print mid # start with mid, then add d when downloaded, s when stored
        msg = @source.uid_fetch(data.attr['UID'], ['RFC822', 'FLAGS','INTERNALDATE']).first
        print "d" #downloaded

        # Append the message to the @destination folder, preserving flags and
        # internal timestamp.
        proceed = false
        begin
          status = Timeout::timeout(15) {
            @dest.append(dest_folder, msg.attr['RFC822'], msg.attr['FLAGS'], msg.attr['INTERNALDATE'])
          }
          proceed = true
        rescue Net::IMAP::BadResponseError =&gt; bre
          puts "Message Failed:  #{bre.message}, skipping ";
          blacklist.push(mid)
          proceed = true
        rescue Net::IMAP::NoResponseError =&gt; e
          puts "Got exception: #{e.message}. Retrying…"
          sleep 1
        end until proceed
        print "s " #stored
        $stdout.flush
      end # message store begin/rescue
    end #messages in folder loop
  rescue Timeout::Error =&gt; idle
    puts "Timeout… adding #{mid} to blacklist"
    blacklist.push(mid)
    puts "loging out.."
    @source.logout
    puts "disconnecting.."
    @source.disconnect
    # doesnt work if the connection has already hung @dest.disconnect
    setup_connections
    redo
  end # timeout begin/rescue
  @source.close
  @dest.close
end #folders loop

unless blacklist.empty?
  puts "#{blacklist.length} Problematic Messages were skipped:"
  blacklist.each { |mid| puts mid }
end

puts "done"&lt;/code&gt;&lt;/pre&gt;</description><link>http://bomberstudios.tumblr.com/post/23971221</link><guid>http://bomberstudios.tumblr.com/post/23971221</guid><pubDate>Thu, 17 Jan 2008 12:05:00 +0100</pubDate></item></channel></rss>
