<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>the Lifestream.Home | ArchiveMy BookmarksHypemachine  ♥’s
Add me on Facebook
 

follow me on twitter/jhsu  

connect with me on LinkedIn.
</description><title>Joseph Hsu</title><generator>Tumblr (3.0; @jhsu)</generator><link>http://josephhsu.com/</link><item><title>RailsConf 2012 Live Coverage</title><description>&lt;p&gt;Check &lt;a href="http://lanyrd.com/2012/railsconf/coverage/"&gt;Lanyard for notes / slides&lt;/a&gt; from the conference.&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;I will be Live Blogging &lt;a href="http://railsconf2012.com"&gt;RailsConf 2012&lt;/a&gt; which will be from April 22 - 25 (including Ignite RailsConf the night before) as long as my phone has signal or I have wifi. Feel free to tweet at me ( &lt;strong&gt;@jhsu&lt;/strong&gt; ).&lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;Aso there&amp;#8217;s a Twitter leaderboard for the hashtag #railsconf: &lt;a href="http://railsconf.rubyonrails.io/"&gt;http://railsconf.rubyonrails.io/&lt;/a&gt;&lt;/p&gt;</description><link>http://josephhsu.com/post/21442991764</link><guid>http://josephhsu.com/post/21442991764</guid><pubDate>Fri, 20 Apr 2012 13:57:00 -0400</pubDate><category>ruby</category><category>rubyonrails</category><category>railsconf</category><category>railsconf2012</category><category>conference</category><category>liveblogging</category></item><item><title>Tip: RVM + Pow</title><description>&lt;p&gt;If you use RVM and Pow (&lt;a href="http://pow.cx"&gt;&lt;a href="http://pow.cx"&gt;http://pow.cx&lt;/a&gt;&lt;/a&gt; mac os x only), you will probably have to do this inside each of your ruby projects:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rvm env -- --env &amp;gt; .powenv
&lt;/code&gt;&lt;/pre&gt;</description><link>http://josephhsu.com/post/21386307243</link><guid>http://josephhsu.com/post/21386307243</guid><pubDate>Thu, 19 Apr 2012 13:14:45 -0400</pubDate><category>tips</category><category>rvm</category><category>ruby</category><category>rails</category></item><item><title>"Imagine if you are extended multiple job offers from different companies, and you are trying to..."</title><description>“Imagine if you are extended multiple job offers from different companies, and you are trying to decide which one you
will accept. Imagine that the way you go about this is that you write down the things that matter to you from most to
least and that you use 3-5 things at the top of that list to decide. Those are your decision drivers. What are they?”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Ilya Bagrak “&lt;a href="http://codercofounder.wordpress.com/2012/03/19/the-one-interview-question-i-always-ask/"&gt;The one interview question I always ask&lt;/a&gt;”&lt;/em&gt;</description><link>http://josephhsu.com/post/19783917333</link><guid>http://josephhsu.com/post/19783917333</guid><pubDate>Fri, 23 Mar 2012 11:23:42 -0400</pubDate></item><item><title>Bullet Points From WNY Ruby March Meetup</title><description>&lt;p&gt;Here&amp;#8217;s some notes from our march meetup (&lt;a href="http://www.meetup.com/Western-New-York-Ruby/events/51549782/"&gt;meetup page&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;img src="http://distilleryimage7.instagram.com/c8bbc46072e711e180d51231380fcd7e_7.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h1&gt;WNY Ruby March-a-palooza&lt;/h1&gt;

&lt;pre&gt;&lt;code&gt;`*.,*'^`*.,*'^`*.                         
^`*.,*'^`*.,*'^`*.,*'                     
'^`*.,*'^`*.,*'^`*.,*'^`*         ,---/V\  &amp;lt;  RUBY!! )
*'^`*.,*'^`*.,*'^`*.,*'^`*.,*    ~|__(o.o)
,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`  UU  UU 
&lt;/code&gt;&lt;/pre&gt;

&lt;h1&gt;Riak for the Ruby Brigade&lt;/h1&gt;

&lt;p&gt;by Andrew Thompson&lt;/p&gt;

&lt;h2&gt;Traits&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;key value&lt;/li&gt;
&lt;li&gt;simple operations (get, put, delete)&lt;/li&gt;
&lt;li&gt;rest inspired API&lt;/li&gt;
&lt;li&gt;optional metadata&lt;/li&gt;
&lt;li&gt;mapreduce (like ruby map / inject)&lt;/li&gt;
&lt;li&gt;links (link to other keys, useful for associations)&lt;/li&gt;
&lt;li&gt;full-text search (via ria-search, bundled)&lt;/li&gt;
&lt;li&gt;secondary indexes&lt;/li&gt;
&lt;li&gt;distribution, clustered (recommended)&lt;/li&gt;
&lt;li&gt;fault tolerance (no master / slave), handles node failure&lt;/li&gt;
&lt;li&gt;all data written N times&lt;/li&gt;
&lt;li&gt;network partitions (ie switch dies)&lt;/li&gt;
&lt;li&gt;Highly available (ask any node to get data)&lt;/li&gt;
&lt;li&gt;live node inherits responsibility of dead node&lt;/li&gt;
&lt;li&gt;define strickness&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Background&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;built with erlang/OTP (open telecom platform)&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Speaking REST&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;HTTP default interface&lt;/li&gt;
&lt;li&gt;works well with reverse proxy caches, load balances, web servers, etc&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Amazon dynomo inspired&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;masterless&lt;/li&gt;
&lt;li&gt;consistant hashing&lt;/li&gt;
&lt;li&gt;anti-entropy: read-repair, hinted hand-off&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Data Model&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;referenced by its key&lt;/li&gt;
&lt;li&gt;grouped into buckets&lt;/li&gt;
&lt;li&gt;object composed of metadata and value&lt;/li&gt;
&lt;li&gt;metadata:

&lt;ul&gt;&lt;li&gt;vector clock&lt;/li&gt;
&lt;li&gt;Content-Type (text/html, text/plain, application/json, etc.)&lt;/li&gt;
&lt;li&gt;Links&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Consistent Hashing&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;bucket/key combination is hashed to a 160-bit&lt;/li&gt;
&lt;li&gt;Ring is split into evenly sized partition, tries hard to prevent two
partitions handled by nodes&lt;/li&gt;
&lt;li&gt;ring divided evenly as possible among nodes&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Requests and magic numbers&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;N - number of replicas (default: 2)&lt;/li&gt;
&lt;li&gt;R - read quorum (how many reads you want to succeed)&lt;/li&gt;
&lt;li&gt;W - write quorum (how many writes before return, accepted the write)&lt;/li&gt;
&lt;li&gt;DW - durable write (write actually happened, likely on disk)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;every request will read every (N) replicas&lt;/p&gt;

&lt;h2&gt;Conflict resolution&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;Conflicting writes, using a vector clock to determine which is write&lt;/li&gt;
&lt;li&gt;you can configure to allow multiple (could use application to deal conflict
manually)&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Node failure&lt;/h2&gt;

&lt;ol&gt;&lt;li&gt;node dies (had certain partitions)&lt;/li&gt;
&lt;li&gt;partitions get redistributed to live nodes&lt;/li&gt;
&lt;li&gt;requests re-routed, writes succeed, N-replicatas of writes created still&lt;/li&gt;
&lt;li&gt;when node comes back up, revived node is updated&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;read repair -&amp;gt; one replica didn&amp;#8217;t get a write, that node gets pushed correct
information&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;can gracefully scale nodes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Clients&lt;/h2&gt;

&lt;p&gt;Official clients: erlang, java, ruby, python and php.&lt;/p&gt;

&lt;p&gt;There are several un-official clients.&lt;/p&gt;

&lt;h2&gt;Storage engine&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;Bitcask (default) - append-only, all keys stored in memory, disk for data&lt;/li&gt;
&lt;li&gt;Memory - all stored in memory&lt;/li&gt;
&lt;li&gt;LevelDB - by google, faster than Innostore&lt;/li&gt;
&lt;li&gt;Innostore - &amp;#8216;Embedded InnoDB&amp;#8217;, not supported by Oracle, GPL (not recommended)&lt;/li&gt;
&lt;li&gt;Multi - proxy to different backends depending on buckets name&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Search and secondary indexes&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;full-text search:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;custom analyzer support&lt;/li&gt;
&lt;li&gt;custom schema support&lt;/li&gt;
&lt;li&gt;Lucene inspired query syntax (inspired, not exact and not fully)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;secondayr indexes&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;leveldb backend only&lt;/li&gt;
&lt;li&gt;integer or string indexes&lt;/li&gt;
&lt;li&gt;can be arbitrary&lt;/li&gt;
&lt;li&gt;query on keys using secondary indexes, can do range (or exact) queries&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Both of these let you feed the result to map/reduce.&lt;/p&gt;

&lt;h2&gt;Enterprise edition (commercial offering)&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;materless multi-site replication (useful different regions), real-time
/ periodic (differential), can be bidirectional&lt;/li&gt;
&lt;li&gt;full customer support&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Reasons not to use&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;single server database&lt;/li&gt;
&lt;li&gt;simple relational model&lt;/li&gt;
&lt;li&gt;need to commit to using riak versus sql knowledge&lt;/li&gt;
&lt;li&gt;unsure of application data model, needs planning&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Reasons to use&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;Availability, assurance of uptime&lt;/li&gt;
&lt;li&gt;Scale predictibility&lt;/li&gt;
&lt;li&gt;latency predictibility&lt;/li&gt;
&lt;li&gt;willing&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Riak success stories&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;webapps: Yammer, Clipboard, GitHub (link shorteners)&lt;/li&gt;
&lt;li&gt;casual gaming&lt;/li&gt;
&lt;li&gt;medical records (Trifork + Denmark)&lt;/li&gt;
&lt;li&gt;smartphone applications (Voxer, Bump)&lt;/li&gt;
&lt;li&gt;caching (Posterous)&lt;/li&gt;
&lt;li&gt;session store&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Voxer&lt;/h2&gt;

&lt;p&gt;pusth-to-talk phone application&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;store both user and raw audio data in riak&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Questions&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;Q: scaling, initial configure of ring size
A: hard to do, it is a pain point but is being worked on. append-only is
   cleaned out periodically

Q: learning knew way to structure data
A: ocassionally, relational databases fall over at certain scale levels.
   time-series (range queries), can do a rollup 
&lt;/code&gt;&lt;/pre&gt;

&lt;h1&gt;Intro to MongoDB&lt;/h1&gt;

&lt;p&gt;Ines, Data Engineer @ Engine Yard&lt;/p&gt;

&lt;h2&gt;Relational World&lt;/h2&gt;

&lt;p&gt;ACID&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;sharding&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;NoSQL&lt;/h2&gt;

&lt;p&gt;CAP - Consistency, Availability, Partition Tolerance&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;horizontal Scaling&lt;/li&gt;
&lt;li&gt;unstructured data&lt;/li&gt;
&lt;li&gt;large quantity of data&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;MongoDB&lt;/h2&gt;

&lt;p&gt;Document oriented DB (binary JSON), cschema-less, memory-mapped files (2GB) written in C++&lt;/p&gt;

&lt;h2&gt;Query interface&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;js console&lt;/li&gt;
&lt;li&gt;&lt;p&gt;will have aggregation framework (native, faster)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;sharding out-of-the-box&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;map/reduce&lt;/li&gt;
&lt;li&gt;geospatial indexes&lt;/li&gt;
&lt;li&gt;backups&lt;/li&gt;
&lt;li&gt;imprort/export data&lt;/li&gt;
&lt;li&gt;single write lock (hinders heavy writes)&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Structure&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;single master DB&lt;/li&gt;
&lt;li&gt;roles: master and slave&lt;/li&gt;
&lt;li&gt;Replica sets:

&lt;ul&gt;&lt;li&gt;2-3 nodes basic install&lt;/li&gt;
&lt;li&gt;Primary, Secondary &amp;amp; arbiter (Tie-breaker)&lt;/li&gt;
&lt;li&gt;Automatic failover&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Replica sets recommended (1.7+) over Master / slave setup&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;replica sets: data&lt;/li&gt;
&lt;li&gt;config servers: sharding info, balancer&lt;/li&gt;
&lt;li&gt;mongos: connections to cluster, application slices&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Oplog&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;keeps track of replication&lt;/li&gt;
&lt;li&gt;capped collection: default 5% of total disk (EY uses 10%)&lt;/li&gt;
&lt;li&gt;size determines how much replication will be retained&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;The Journal&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;write-ahead redo logs&lt;/li&gt;
&lt;li&gt;performance impact&lt;/li&gt;
&lt;li&gt;faster recover&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Drivers&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;mongomapper&lt;/li&gt;
&lt;li&gt;mongoid&lt;/li&gt;
&lt;li&gt;ruby mongo driver&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Tips&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;Use in 64-bits, 32-bits limits to ~2.5 gb addressable memory then kaputt&lt;/li&gt;
&lt;li&gt;Don&amp;#8217;t run standalone, use replication&lt;/li&gt;
&lt;li&gt;use replica sets&lt;/li&gt;
&lt;li&gt;turn journaling on (default ~2.0.x)&lt;/li&gt;
&lt;li&gt;keep with current versions&lt;/li&gt;
&lt;li&gt;keep working set in memory&lt;/li&gt;
&lt;li&gt;use MMS for monitoring (mongo monitoring service)&lt;/li&gt;
&lt;li&gt;choose a good sharding key&lt;/li&gt;
&lt;li&gt;mind your config servers&lt;/li&gt;
&lt;/ul&gt;</description><link>http://josephhsu.com/post/19684549651</link><guid>http://josephhsu.com/post/19684549651</guid><pubDate>Wed, 21 Mar 2012 13:21:00 -0400</pubDate><category>ruby</category><category>wnyruby</category><category>meetup</category></item><item><title>Rails rendering partials</title><description>&lt;p&gt;just an fyi&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;render "some/partial", collection: @things
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;is not the same as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;render :partial =&amp;gt; "some/partial", collection: @things
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;thing&lt;/code&gt; won&amp;#8217;t be available in the views in the first one.&lt;/p&gt;</description><link>http://josephhsu.com/post/19427879959</link><guid>http://josephhsu.com/post/19427879959</guid><pubDate>Fri, 16 Mar 2012 21:50:45 -0400</pubDate></item><item><title>WNY Ruby Meetup - March-a-palooza</title><description>&lt;p&gt;&lt;img src="http://distilleryimage3.s3.amazonaws.com/59a463103bed11e180c9123138016265_7.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;Info&lt;/h2&gt;

&lt;p&gt;The meetup will be on Tuesday March 20th, 2012 at 7:00pm and be at our usual spot Caputis (2351 Sheridan Dr, Tonawanda, NY).&lt;/p&gt;

&lt;p&gt;This meetup will be all about databases (relational and nosql) and star two out of towners. This will be a huge turnout (&lt;a href="http://www.meetup.com/Western-New-York-Ruby/events/51549782/"&gt;~40 people rvsp&amp;#8217;d&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;Speakers&lt;/h2&gt;

&lt;p&gt;Ines Sombra (@&lt;a href="http://twitter.com/randommood"&gt;randommood&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;from Engine Yard HQ in SF to come talk about MongoDB&lt;/p&gt;

&lt;p&gt;Andrew Thompson (&lt;a href="https://github.com/Vagabond"&gt;Vagabond&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;from Basho to talk about Riak&lt;/p&gt;

&lt;p&gt;Wayne Seguin (@&lt;a href="http://twitter.com/wayneeseguin"&gt;wayneeseguin&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;of Engine Yard to discuss PostgreSQL.&lt;/p&gt;</description><link>http://josephhsu.com/post/19299276182</link><guid>http://josephhsu.com/post/19299276182</guid><pubDate>Wed, 14 Mar 2012 15:00:00 -0400</pubDate><category>ruby</category><category>rubyonrails</category><category>buffalo</category><category>databases</category><category>mongodb</category><category>riak</category><category>postgres</category><category>meetup</category></item><item><title>First attempt at d3.js</title><description>&lt;p&gt;I just started looking into &lt;a href="http://mbostock.github.com/d3/"&gt;D3.js, a Data-Driving Documents&lt;/a&gt; framework for working with data and displaying using svg.&lt;/p&gt;

&lt;p&gt;D3.js is powerful in what it can do (as seen from the &lt;a href="http://mbostock.github.com/d3/ex/"&gt;examples&lt;/a&gt;) but by itself it isn&amp;#8217;t specifically meant for graphing. Instead, it helps with positioning and calculations.&lt;/p&gt;

&lt;p&gt;My first attempt was creating a line graph&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzszm04WPS1qz50th.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Then, I created a simple sparkline graph along with a side scrolling animation:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://bl.ocks.org/1885497"&gt;http://bl.ocks.org/1885497&lt;/a&gt;&lt;/p&gt;</description><link>http://josephhsu.com/post/18074653814</link><guid>http://josephhsu.com/post/18074653814</guid><pubDate>Wed, 22 Feb 2012 11:40:00 -0500</pubDate><category>d3js</category></item><item><title>Ruby listen on Redis Queue, push to websocket channel</title><description>&lt;p&gt;Here&amp;#8217;s a fun bit of code.&lt;/p&gt;

&lt;script src="https://gist.github.com/1795722.js"&gt; &lt;/script&gt;</description><link>http://josephhsu.com/post/17455913556</link><guid>http://josephhsu.com/post/17455913556</guid><pubDate>Sat, 11 Feb 2012 19:16:00 -0500</pubDate><category>ruby</category></item><item><title>Scratching Itches: Chat</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyo3geNICS1qz50th.png" alt="weechat"/&gt;&lt;/p&gt;

&lt;h2&gt;Chat networks&lt;/h2&gt;

&lt;p&gt;I connect to multiple chat networks:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;IRC&lt;/li&gt;
&lt;li&gt;AIM&lt;/li&gt;
&lt;li&gt;MSN&lt;/li&gt;
&lt;li&gt;google talk&lt;/li&gt;
&lt;li&gt;facebook chat (jabber)&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Needs&lt;/h2&gt;

&lt;p&gt;I wanted to be able to connect to message a person or read messages from anywhere.&lt;/p&gt;

&lt;p&gt;I also didn&amp;#8217;t want to have to constantly connect just to check messages. I needed push notifications to my iPhone.&lt;/p&gt;

&lt;h2&gt;Solution&lt;/h2&gt;

&lt;p&gt;My solution allows for me to connect via any irc client, since irc clients are easily accessible on many devices.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.weechat.org/"&gt;Weechat&lt;/a&gt; (irc chat client in the terminal)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bitlbee.org/"&gt;Bitlbee&lt;/a&gt; - allows me to connect to all my non-irc chat networks&lt;/li&gt;
&lt;li&gt;&lt;a href="http://znc.in"&gt;ZNC&lt;/a&gt; (irc bouncer, keeps connections to bitlbee / freenode alive)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.prowlapp.com/"&gt;Prowl&lt;/a&gt; push notifications on iPhone 4s (there&amp;#8217;s a Prowl module for ZNC that i use)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://itunes.apple.com/us/app/colloquy-irc-client/id302000478?mt=8"&gt;Colloquy&lt;/a&gt; on iPhone&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This setup requires a server to run ZNC and Bitlbee.&lt;/p&gt;

&lt;p&gt;This setup allows me to connect using any irc connection and let&amp;#8217;s me disconnect with my client without losing connection to messaging. When I get messaged I get a push notification to my phone, then I can reconnect and reply however I choose, either via computer in weechat or through my phone in Colloquy.&lt;/p&gt;</description><link>http://josephhsu.com/post/16823161927</link><guid>http://josephhsu.com/post/16823161927</guid><pubDate>Tue, 31 Jan 2012 12:00:05 -0500</pubDate><category>scratchingitches</category></item><item><title>#WNYRuby meetup, my "Using and Abusing Git Hooks" presentation</title><description>&lt;p&gt;&lt;a href="http://jhsu.github.com/githooks-presentation"&gt;&lt;a href="http://jhsu.github.com/githooks-presentation"&gt;http://jhsu.github.com/githooks-presentation&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://josephhsu.com/post/15654066494</link><guid>http://josephhsu.com/post/15654066494</guid><pubDate>Tue, 10 Jan 2012 22:27:44 -0500</pubDate><category>git</category></item><item><title>Foo Ross Daaaaaaaaaaaaaaa thanks #reddit #secretsanta (Taken...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lwbhtpDzp71qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Foo Ross Daaaaaaaaaaaaaaa thanks #reddit #secretsanta (Taken with &lt;a href="http://instagr.am"&gt;instagram&lt;/a&gt;)&lt;/p&gt;</description><link>http://josephhsu.com/post/14324262799</link><guid>http://josephhsu.com/post/14324262799</guid><pubDate>Fri, 16 Dec 2011 17:15:24 -0500</pubDate><category>reddit</category><category>secretsanta</category></item><item><title>Taken with instagram</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lvfkj0Dcmk1qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Taken with &lt;a href="http://instagr.am"&gt;instagram&lt;/a&gt;&lt;/p&gt;</description><link>http://josephhsu.com/post/13503100229</link><guid>http://josephhsu.com/post/13503100229</guid><pubDate>Tue, 29 Nov 2011 11:30:35 -0500</pubDate></item><item><title>Rails (2 &amp; 3) Rake console</title><description>&lt;p&gt;A little script (./script/taskrunner) to run a little rake console without having to start up the env everytime, works with environment variables too.&lt;/p&gt;

&lt;p&gt;to get it set up, run this from your rails project directory:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -o ./script/taskrunner &lt;a href="https://raw.github.com/gist/1072723/61b9eb6d458e643b3ea9e679d6501c388f3d3377/taskrunner.rb"&gt;https://raw.github.com/gist/1072723/61b9eb6d458e643b3ea9e679d6501c388f3d3377/taskrunner.rb&lt;/a&gt;
chmod +x ./script/taskrunner
./script/taskrunner
&lt;/code&gt;&lt;/pre&gt;

&lt;script src="https://gist.github.com/1072723.js"&gt; &lt;/script&gt;</description><link>http://josephhsu.com/post/8010282537</link><guid>http://josephhsu.com/post/8010282537</guid><pubDate>Sun, 24 Jul 2011 15:20:07 -0400</pubDate><category>rails</category></item><item><title>Nyc at a greek place (Taken with picplz.)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_loc83c6jct1qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Nyc at a greek place (Taken with &lt;a href="http://picplz.com"&gt;picplz&lt;/a&gt;.)&lt;/p&gt;</description><link>http://josephhsu.com/post/7622570906</link><guid>http://josephhsu.com/post/7622570906</guid><pubDate>Thu, 14 Jul 2011 15:13:59 -0400</pubDate></item><item><title>(Taken with picplz.)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_loa690p6HD1qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;(Taken with &lt;a href="http://picplz.com"&gt;picplz&lt;/a&gt;.)&lt;/p&gt;</description><link>http://josephhsu.com/post/7576628095</link><guid>http://josephhsu.com/post/7576628095</guid><pubDate>Wed, 13 Jul 2011 12:38:59 -0400</pubDate></item><item><title>Pafdle boat (Taken with picplz.)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lo311zYQx81qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Pafdle boat (Taken with &lt;a href="http://picplz.com"&gt;picplz&lt;/a&gt;.)&lt;/p&gt;</description><link>http://josephhsu.com/post/7427840931</link><guid>http://josephhsu.com/post/7427840931</guid><pubDate>Sat, 09 Jul 2011 16:03:34 -0400</pubDate></item><item><title>Scratching Itches: Listening to Music</title><description>&lt;p&gt;&lt;em&gt;In this series I&amp;#8217;ll be talking about little lifehacks I have found that work for me.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All my music is stored in one location, but I want to be able to listen to it from work, in the car or wherever I go.&lt;/p&gt;

&lt;p&gt;I hardly ever plug my phone into my computer and I don&amp;#8217;t want to have to manually sync my music over. I want to be able to listen to my latest music without syncing.&lt;/p&gt;

&lt;h3&gt;My criteria for a solution:&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;don&amp;#8217;t want to have to sync anything&lt;/li&gt;
&lt;li&gt;in browser&lt;/li&gt;
&lt;li&gt;mobile accessible&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;And So I Found&amp;#8230; &lt;a href="http://www.subsonic.org/"&gt;Subsonic&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;iphone &amp;amp; android apps (which can cache songs onto the phone)&lt;/li&gt;
&lt;li&gt;accessible in the browser&lt;/li&gt;
&lt;li&gt;user authentication&lt;/li&gt;
&lt;li&gt;last.fm scrobbling&lt;/li&gt;
&lt;li&gt;playlist support&lt;/li&gt;
&lt;li&gt;multi-user&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The downside of running subsonic is that there is some setup. You need a dedicated machine to run the server and set up port forwarding through your router if you want to access it externally.  Using no-ip.com helps so I don&amp;#8217;t have to remember an IP address to access subsonic. Subsonic also has to transcode the audio to the bitrate of your choice so you can&amp;#8217;t skip positions right away (unless the song is already cached on your device).&lt;/p&gt;

&lt;p&gt;The music player also is flash (which isn&amp;#8217;t so great on linux especially on a 64-bit OS).&lt;/p&gt;

&lt;p&gt;Subsonic can also eat up bandwidth when streaming to something outside the network. I had to mitigate this using QoS on my DD-WRT router.&lt;/p&gt;

&lt;h2&gt;Long-term conclusion&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;ve been using this setup for almost a year and I&amp;#8217;ve had no problems with it. I listen to my music on my phone, listen to music in the browser at work and home (no native music player needed).&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dl.dropbox.com/u/114389/Screenshots/20110622_screenshot.png" alt="Screenshot of Subsonic"/&gt;&lt;/p&gt;</description><link>http://josephhsu.com/post/6812060627</link><guid>http://josephhsu.com/post/6812060627</guid><pubDate>Wed, 22 Jun 2011 22:12:00 -0400</pubDate><category>scratchingitches</category></item><item><title>weapon of #railsconf be afraid (Taken with picplz.)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lldh59rJNK1qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;weapon of #railsconf be afraid (Taken with &lt;a href="http://picplz.com"&gt;picplz&lt;/a&gt;.)&lt;/p&gt;</description><link>http://josephhsu.com/post/5597629852</link><guid>http://josephhsu.com/post/5597629852</guid><pubDate>Tue, 17 May 2011 23:46:21 -0400</pubDate></item><item><title>(Taken with picplz.)</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_ll9bouNMqY1qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;(Taken with &lt;a href="http://picplz.com"&gt;picplz&lt;/a&gt;.)&lt;/p&gt;</description><link>http://josephhsu.com/post/5523931094</link><guid>http://josephhsu.com/post/5523931094</guid><pubDate>Sun, 15 May 2011 17:58:04 -0400</pubDate></item><item><title>flying blimp at work (Taken with picplz.)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_ljp7u24JGk1qz50tho1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;flying blimp at work (Taken with &lt;a href="http://picplz.com"&gt;picplz&lt;/a&gt;.)&lt;/p&gt;</description><link>http://josephhsu.com/post/4633812432</link><guid>http://josephhsu.com/post/4633812432</guid><pubDate>Fri, 15 Apr 2011 10:49:08 -0400</pubDate></item></channel></rss>

