<?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>Norwinter Studios &#187; Programming</title>
	<atom:link href="http://www.norwinter.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.norwinter.com</link>
	<description>Home of Bouncy Hunters and Konkret.</description>
	<lastBuildDate>Fri, 06 May 2011 18:00:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Diary app Chronicle.im peeks out.</title>
		<link>http://www.norwinter.com/2010/07/17/diary-app-chronicle-im-peeks-out/</link>
		<comments>http://www.norwinter.com/2010/07/17/diary-app-chronicle-im-peeks-out/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 20:38:32 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=187</guid>
		<description><![CDATA[Our latest project, Chronicle.im, which we&#8217;ve been working on secretly for about nine months now, now has a teaser preview up online at www.chronicle.im. In the next few weeks we hope to start opening up for beta testing of this online journal writer, so if you want in now is the last chance to sign [...]]]></description>
			<content:encoded><![CDATA[<p>Our latest project, Chronicle.im, which we&#8217;ve been working on secretly for about nine months now, now has a teaser preview up online at <a href="http://www.chronicle.im">www.chronicle.im</a>. In the next few weeks we hope to start opening up for beta testing of this online journal writer, so if you want in now is the last chance to sign up. Just enter your email address on that page. I guarantee we wouldn&#8217;t mind if you sent us a tweet or two regarding the site too!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2010/07/17/diary-app-chronicle-im-peeks-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find git commits which still need to be merged</title>
		<link>http://www.norwinter.com/2010/05/29/find-git-commits-which-still-need-to-be-merged/</link>
		<comments>http://www.norwinter.com/2010/05/29/find-git-commits-which-still-need-to-be-merged/#comments</comments>
		<pubDate>Sat, 29 May 2010 02:14:35 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=185</guid>
		<description><![CDATA[If you have a git branch which you are working on which is a clone from an upstream &#8216;official&#8217; branch, and you sometimes submit your commits to be integrated upstream, there&#8217;ll surely be times when your patches are not accepted or fall between the cracks. After a while it can get a little hairy to [...]]]></description>
			<content:encoded><![CDATA[<p>If you have a git branch which you are working on which is a clone from an upstream &#8216;official&#8217; branch, and you sometimes submit your commits to be integrated upstream, there&#8217;ll surely be times when your patches are not accepted or fall between the cracks. After a while it can get a little hairy to figure out which commits are unique to your branch and which ones are incorporated in the main repo.</p>
<p>The &#8216;git cherry&#8217; command can help with this. It lists all commits in one branch which are not in another. It works like this simply:</p>
<pre><code>git cherry -v upstream my_branch</code></pre>
<p>The man page describes the command succinctly:</p>
<blockquote>
<div id="_mcePaste">Every commit that doesn&#8217;t exist in the &lt;upstream&gt; branch has its id (sha1) reported, prefixed by a symbol. The ones that have equivalent change already in the &lt;upstream&gt; branch are prefixed with a minus (-) sign, and those that only exist in the &lt;head&gt; branch are prefixed with a plus (+) symbol.</div>
</blockquote>
<div>The problem is that sometimes the cherry command does not identify &#8216;equivalent changes&#8217;. I&#8217;m not sure why, but perhaps this happens when the main tree has cherry picked commits and made changes to whitespace or resolved merge conflicts. Or maybe it doesn&#8217;t work well at all with cherry pick. Either way, I had a list of changes which cherry returned which I knew had in fact been merged. So I whipped up up this silly little Python script to filter a cherry results list from a complete log of the upstream repo and to remove all commits with the same commit message. This is obviously not bullet proof as different commits may have the same message. But it was good enough for me in this case. So without further ado, here it is:</div>
<pre><code>import sys

cherry = open(sys.argv[1], "r")
filtr = open(sys.argv[2], "r")
lines = filtr.readlines()
unmatched = []

for line in cherry.readlines():
  plus, sha, message = line.split(" ", 2)
  for existing in lines:
    esha,emessage = existing.split(" ", 1)
    if message == emessage:
      break
  else:
    unmatched.append((sha, message))

for sha, message in unmatched:
  print "+ %s %s" % (sha, message)</code></pre>
<p>Usage:</p>
<p><code>
<pre>$ git checkout upstream
$ git log --oneline >all_commits.txt
$ git cherry -v upstream my_branch >cherry_commits.txt
$ python filter_cherry.py cherry_commits.txt all_commits.txt
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2010/05/29/find-git-commits-which-still-need-to-be-merged/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Django Celery Overview</title>
		<link>http://www.norwinter.com/2009/10/14/good-django-celery-overview/</link>
		<comments>http://www.norwinter.com/2009/10/14/good-django-celery-overview/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 17:18:41 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Celery]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[RabbitMQ]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=182</guid>
		<description><![CDATA[Happy stream of thoughts has a good overview over how RabbitMQ, Celery and Django work together to make distributed task processing easy and convenient in Django. The example described is for video processing. RabbitMQ, Celery and Django]]></description>
			<content:encoded><![CDATA[<p>Happy stream of thoughts has a good overview over how RabbitMQ, Celery and Django work together to make distributed task processing easy and convenient in Django. The example described is for video processing.</p>
<p><a href="http://robertpogorzelski.com/blog/2009/09/10/rabbitmq-celery-and-django/">RabbitMQ, Celery and Django</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/10/14/good-django-celery-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrate Eventum to Redmine.</title>
		<link>http://www.norwinter.com/2009/08/27/migrate-eventum-to-redmine/</link>
		<comments>http://www.norwinter.com/2009/08/27/migrate-eventum-to-redmine/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 23:22:29 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Eventum]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=172</guid>
		<description><![CDATA[I have migrated more stuff to the new Redmine setup. This time I pulled all issue data from an old and well used Eventum setup. I made some educated guesses about how the Eventum data was laid out and then hacked up the Redmine trac migration script until it worked for Eventum. It&#8217;s really not [...]]]></description>
			<content:encoded><![CDATA[<p>I have migrated more stuff to the new Redmine setup. This time I pulled all issue data from an old and well used Eventum setup. I made some educated guesses about how the Eventum data was laid out and then hacked up the Redmine trac migration script until it worked for Eventum.</p>
<p>It&#8217;s really not a very pretty script but since I won&#8217;t be doing any more work on it I&#8217;ll release it here in the spirit of open source. Whether it works for you or not is anyone&#8217;s guess, but one thing is for sure: if it was just sitting on my hard drive it definitely would not.</p>
<p>Download: <a href='http://www.norwinter.com/wp-content/uploads/2009/08/migrate_from_eventum.rake'>migrate_from_eventum.rake</a></p>
<p>See instructions in the beginning of the file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/08/27/migrate-eventum-to-redmine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactor Serializable Java Class</title>
		<link>http://www.norwinter.com/2009/08/20/refactor-serializable-java-class/</link>
		<comments>http://www.norwinter.com/2009/08/20/refactor-serializable-java-class/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 21:56:20 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=162</guid>
		<description><![CDATA[Today I renamed and moved a class in a Java program. It was a Serializable class containing some preferences. As we are getting rid of it I renamed it from Preferences to LegacyPreferences, with the intention of starting a new Preferences class using a regular config file instead of serialization. Bad idea. Java refused to [...]]]></description>
			<content:encoded><![CDATA[<p>Today I renamed and moved a class in a Java program. It was a Serializable class containing some preferences. As we are getting rid of it I renamed it from <code>Preferences</code> to <code>LegacyPreferences</code>, with the intention of starting a new <code>Preferences</code> class using a regular config file instead of serialization. Bad idea. Java refused to load serialized data into the new class for two reasons: one obvious and expected and one seriously braindamaged in true Java fashion.</p>
<p>The first problem was that the deserialization class could no longer find the class to deserialize to. No wonder since it was in a new package and had a new name. No problem. I subclassed <code>ObjectInputStream</code> and overrode <code>resolveClass(ObjectStreamClass desc)</code> to properly load the class from its new name and location.</p>
<p>That&#8217;s when Java freaked out with the following piece of brilliance:</p>
<blockquote><p><code>local class name incompatible with stream class name X</code></p></blockquote>
<p>Well, duh. Of course the name is different, that&#8217;s the point of a refactoring. What exactly were they trying to accomplish when they added this name check? The class has already been found, it&#8217;s interface is an exact match. The name of the class is irrelevant at this point.</p>
<p>I proceeded by overriding <code>readClassDescriptor()</code> with the intention to simply replace the name of the class with the new name when reading the stream. Java would never even realize the class used to have another name. But no: that method must return a <code>java.io.ObjectStreamClass</code> object, which you can&#8217;t instantiate or override unless you&#8217;re in the <code>java.io</code> package. And if you just grab the <code>super.readClassDescriptor()</code> instance you aren&#8217;t allowed to make any changes to it.</p>
<p>At this point I considered my favorite solution to Java damage. I&#8217;d like to call it &#8220;corrective Java surgery&#8221; &#8211; use reflection to force your way into the class and fix it. This is a very gratifying solution since you can undo the mistakes in Java and set things right. The drawback of course is that different versions of Java may require different corrective code.</p>
<p>That wasn&#8217;t necessary in this case since reading the source code of <code>ObjectInputStream</code> revealed a static method for creating <code>ObjectStreamClass</code>es: <code>ObjectStreamClass.lookup</code>. With that tool things fell into place very simply like so:</p>
<pre><code>@Override
protected java.io.ObjectStreamClass readClassDescriptor() throws IOException ,ClassNotFoundException {
	ObjectStreamClass desc = super.readClassDescriptor();
	if (desc.getName().equals("com.trueship.base.Preferences")) {
		return ObjectStreamClass.lookup(LegacyPreferences.class);
	}
	return desc;
};</code></pre>
<p>Hope that&#8217;ll help anyone else looking to rename and deserialize classes in Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/08/20/refactor-serializable-java-class/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQLAlchemy 0.5.3 and 0.5.5 error: Set changed size during iteration</title>
		<link>http://www.norwinter.com/2009/08/03/sqlalchemy-0-5-3-and-0-5-5-error-set-changed-size-during-iteration/</link>
		<comments>http://www.norwinter.com/2009/08/03/sqlalchemy-0-5-3-and-0-5-5-error-set-changed-size-during-iteration/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 02:52:15 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sqlalchemy]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=154</guid>
		<description><![CDATA[Update 1: See Mike Bayer&#8217;s comment below &#8211; looks like there&#8217;s a fix for this coming up in 0.5.6. Very responsive work by Mr. Bayer. Thanks! YippieMove has been running into some spurious problems with SQLAlchemy. When upgrading Python from 2.5 to 2.6 the errors became a lot more frequent. The error is &#8220;Set changed [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update 1:</strong> See Mike Bayer&#8217;s comment below &#8211; looks like there&#8217;s a fix for this coming up in 0.5.6. Very responsive work by Mr. Bayer. Thanks!</p>
<p>YippieMove has been running into some spurious problems with SQLAlchemy. When upgrading Python from 2.5 to 2.6 the errors became a lot more frequent. The error is &#8220;<code>Set changed size during iteration</code>&#8221; and happens in all kinds of random code paths when using the ORM layer. Today I saw it happen when getting a result object from a query by index, and then again when iterating over the result of another query.</p>
<p>The end of the traceback looks something like this:</p>
<pre><code>
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/SQLAlchemy-0.5.5-py2.6.egg/sqlalchemy/orm/dynamic.py", line 192, in __iter__
    sess = self.__session()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/SQLAlchemy-0.5.5-py2.6.egg/sqlalchemy/orm/dynamic.py", line 181, in __session
    sess.flush()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/SQLAlchemy-0.5.5-py2.6.egg/sqlalchemy/orm/session.py", line 1354, in flush
    self._flush(objects)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/SQLAlchemy-0.5.5-py2.6.egg/sqlalchemy/orm/session.py", line 1359, in _flush
    if (not self.identity_map.check_modified() and
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/SQLAlchemy-0.5.5-py2.6.egg/sqlalchemy/orm/identity.py", line 56, in check_modified
    for state in self._mutable_attrs:
RuntimeError: Set changed size during iteration
</code></pre>
<p>The code in question looks like this:</p>
<pre><code>
    for state in self._mutable_attrs:
        if state.modified:
            return True
</code></pre>
<p>The program is single threaded and it sure didn&#8217;t look like &#8220;state.modified&#8221; would cause the iterated over set to change. Weird. After snooping around for a while I found <a href="http://www.mail-archive.com/sqlalchemy@googlegroups.com/msg11283.html">this post</a> which suggests an async GC being the problem.</p>
<p>Sure enough the problem appears to have gone away when automatic GC is disabled. It&#8217;s not a nice workaround because the garbage collector in Python <a href="http://docs.python.org/library/gc.html">collects cyclic garbage</a>. But it did solve the problem for now so here it is if anyone else needs it:</p>
<pre><code>import gc
gc.disable()
</code></pre>
<p>Unless you want to be buried in garbage, make sure to collect it once in a while in a safe spot in your code using <code>gc.collect()</code>.</p>
<p>Hopefully this will be fixed in a future version.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/08/03/sqlalchemy-0-5-3-and-0-5-5-error-set-changed-size-during-iteration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migrate MoinMoinWiki to Redmine.</title>
		<link>http://www.norwinter.com/2009/08/02/migrate-moinmoinwiki-to-redmine/</link>
		<comments>http://www.norwinter.com/2009/08/02/migrate-moinmoinwiki-to-redmine/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 04:18:59 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[moinmoin]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=144</guid>
		<description><![CDATA[Today I switched a small wiki from MoinMoin to a new Redmine setup. I couldn&#8217;t find any existing scripts to convert the wiki pages over. For a moment I thought I could do MoinMoin to Trac and Trac to Redmine but I thought better of it. It&#8217;d be a lot of work and the wiki [...]]]></description>
			<content:encoded><![CDATA[<p>Today I switched a small wiki from MoinMoin to a new Redmine setup. I couldn&#8217;t find any existing scripts to convert the wiki pages over. For a moment I thought I could do MoinMoin to Trac and Trac to Redmine but I thought better of it. It&#8217;d be a lot of work and the wiki syntax would probably be completely mangled in the process.</p>
<p>Instead I hacked up Carl Nygard&#8217;s <a href="http://www.redmine.org/issues/1224">MediaWiki to Redmine script</a>. It&#8217;s an awful hack really but it worked for the pages I needed, and it does preserve revision history.</p>
<ul>
<li>Download  the script: <a href='http://www.norwinter.com/wp-content/uploads/2009/08/migrate_from_moinmoin.rake'>migrate_from_moinmoin.rake</a></li>
<li>Edit the source and enter your own email address instead of <code>admin@example.com</code>.</li>
<li>Place the file in <code>lib/tasks/</code> in your Redmine installation.</li>
<li>Run the command with
<pre><code>rake redmine:migrate_from_moinmoin RAILS_ENV="production"</pre>
<p></code></lI></p>
<li>Enter a project identifier.</li>
<li>Enter an absolute path to the <code>data/pages</code> folder of your MoinMoin install.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/08/02/migrate-moinmoinwiki-to-redmine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problem with jQuery 1.3 and :eq in a complex selector</title>
		<link>http://www.norwinter.com/2009/08/01/jquery-1-3-and-eq-in-a-complex-selector/</link>
		<comments>http://www.norwinter.com/2009/08/01/jquery-1-3-and-eq-in-a-complex-selector/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 22:55:19 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[javascript jquery xpath]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=141</guid>
		<description><![CDATA[While trying to recreate this XPath as a jQuery selector I ran into some unexpected difficulties: /html/body/table[3]/tbody/tr/td/table/tbody/tr My first attempt to convert it looked something like this: $("body > table:eq(2) > tbody > tr > td > table > tbody > tr") This gave no results. I simplified it a little bit, $("body > table:eq(2) [...]]]></description>
			<content:encoded><![CDATA[<p>While trying to recreate this XPath as a jQuery selector I ran into some unexpected difficulties:</p>
<p><code>/html/body/table[3]/tbody/tr/td/table/tbody/tr</code></p>
<p>My first attempt to convert it looked something like this:</p>
<p><code>$("body > table:eq(2) > tbody > tr > td > table > tbody > tr")</code></p>
<p>This gave no results. I simplified it a little bit,</p>
<p><code>$("body > table:eq(2) tr tr")</code></p>
<p>Still no luck. After experimenting for a while it looked to me like <code>:eq</code> wasn&#8217;t playing well in this expression. The following worked:</p>
<p><code>$("body > table").eq(2).find('tr tr')</code></p>
<p>Weird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/08/01/jquery-1-3-and-eq-in-a-complex-selector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improved Cygwin Terminal</title>
		<link>http://www.norwinter.com/2009/07/30/improved-cygwin-terminal/</link>
		<comments>http://www.norwinter.com/2009/07/30/improved-cygwin-terminal/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 17:51:38 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[cygwin windows terminal]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/2009/07/30/improved-cygwin-terminal/</guid>
		<description><![CDATA[The standard terminal in Cygwin is not very good. It can&#8217;t be made wider, you can&#8217;t select text normally using the mouse without first accessing the context menu and selecting &#8216;mark&#8217;, the default font is thick and ugly, etc. When you are used to the Mac OS X Terminal the Cygwin console is not fun. [...]]]></description>
			<content:encoded><![CDATA[<p>The standard terminal in Cygwin is not very good. It can&#8217;t be made wider, you can&#8217;t select text normally using the mouse without first accessing the context menu and selecting &#8216;mark&#8217;, the default font is thick and ugly, etc. When you are used to the Mac OS X Terminal the Cygwin console is not fun.</p>
<p>Here&#8217;s the solution: <a href="http://code.google.com/p/puttycyg/">puttycyg</a>. It&#8217;s a modification of putty which allows it to act as a cygwin terminal in addition to the normal ssh and telnet functionality. Very cool!</p>
<p>Found it through this <a href="http://highstick.blogspot.com/2004/09/better-cygwin-terminal.html">blog post</a>. Thank you Andreas Hochsteger!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/07/30/improved-cygwin-terminal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pipe into the clipboard on OS X: pbcopy</title>
		<link>http://www.norwinter.com/2009/07/27/pipe-into-the-clipboard-on-os-x-pbcopy/</link>
		<comments>http://www.norwinter.com/2009/07/27/pipe-into-the-clipboard-on-os-x-pbcopy/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 17:03:36 +0000</pubDate>
		<dc:creator>siker</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[pbcopy]]></category>
		<category><![CDATA[Terminal]]></category>

		<guid isPermaLink="false">http://www.norwinter.com/?p=135</guid>
		<description><![CDATA[I just discovered this handy command in OS X: pbcopy. It lets you pipe the output of a command right into the clipboard (or the &#8216;pasteboard&#8217;) so you can paste it into some non terminal application next. A convenient way to avoid having to scroll up and select the text in the terminal by hand. [...]]]></description>
			<content:encoded><![CDATA[<p>I just discovered this handy command in OS X: <code>pbcopy</code>. It lets you pipe the output of a command right into the clipboard (or the &#8216;pasteboard&#8217;) so you can paste it into some non terminal application next. A convenient way to avoid having to scroll up and select the text in the terminal by hand.</p>
<p>Example:</p>
<blockquote><p><code>cat myfile.txt | pbcopy</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.norwinter.com/2009/07/27/pipe-into-the-clipboard-on-os-x-pbcopy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using apc
Object Caching 562/581 objects using disk: basic

Served from: norwinter.* @ 2012-02-05 16:24:31 -->
