<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>A Quantum Immortal</title>
	
	<link>http://ripper234.com</link>
	<description>Stuff Ron Gross Finds Interesting</description>
	<lastBuildDate>Sat, 24 Jul 2010 08:47:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AQuantumImmortal" /><feedburner:info uri="aquantumimmortal" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Lock Freedom is overrated (sometimes)</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/NM35AmR7VCk/</link>
		<comments>http://ripper234.com/p/lock-freedom-is-overrated/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 08:11:56 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Threading]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1301</guid>
		<description><![CDATA[Locking and synchronization is expensive in a multi-threaded environment. When you&#8217;re writing a component that should scale to 10K concurrent requests, all your data structures must be lock-free, right? Wrong. It is true that if you have a single object that is synchronized in every request, locking that object will severely impact performance when concurrency [...]


Related posts:<ol><li><a href='http://ripper234.com/p/dont-switch-your-lock-object-mid-lock/' rel='bookmark' title='Permanent Link: Don&#8217;t switch your lock object mid-lock'>Don&#8217;t switch your lock object mid-lock</a></li>
<li><a href='http://ripper234.com/p/never-use-synchronized-methods-or-lock-on-this/' rel='bookmark' title='Permanent Link: Never use synchronized methods or lock on this'>Never use synchronized methods or lock on this</a></li>
<li><a href='http://ripper234.com/p/playing-with-a-few-readerwriterlocks-in-net/' rel='bookmark' title='Permanent Link: Playing with a few ReaderWriterLocks in .Net'>Playing with a few ReaderWriterLocks in .Net</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Locking and synchronization is expensive in a multi-threaded environment. When you&#8217;re writing a component that should scale to 10K concurrent requests, all your data structures must be <a href="http://en.wikipedia.org/wiki/Non-blocking_synchronization">lock-free</a>, right?</p>
<p>Wrong.</p>
<p>It is true that if you have a single object that is synchronized in every request, locking that object will severely impact performance when concurrency goes up. <strong>However</strong>, you should analyze the actual usage pattern and data structures to determine the actual contention.</p>
<p>For instance, suppose you are writing a messaging application, where clients write and read from their respective inboxes. The application as a whole is meant to support 10,000s concurrent clients. The supported operations are writing an object to someone&#8217;s inbox, reading objects from a specific inbox, and subscribing to notifications. With this performance profile, it&#8217;s seems like a good idea to make the global data structure that <a href="http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentMap.html">maps client&#8217;s IDs to inboxes lock-free</a>, otherwise concurrent searches to find a specific inbox will block one another.</p>
<p>However, if any specific inbox is not meant to carry a significant load, there is no harm in implementing the Inbox data structure (that is responsible for one specific Inbox/Message Queue) without restricting yourself to lock-free data structures. Locking when there is no contention is <a href="http://www.theregister.co.uk/2008/05/22/java_performance_myths/">not an expensive operation</a>!</p>
<p>Writing and using lock-free structures is usually harder than locking, except for simple scenarios. In order to maintain class invariants between the different data structures you use, sometimes a lock is simple and effective. You should be familiar with your language&#8217;s lock-free options, but don&#8217;t be swayed by the hype and &#8220;coolness&#8221; of lock-freedom, and use it when it&#8217;s actually required or where it saves you code. If it complicates your design, try to <a href="http://www.petefreitag.com/item/509.cfm">defer it until you&#8217;re convinced you actually need it</a>.</p>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/dont-switch-your-lock-object-mid-lock/' rel='bookmark' title='Permanent Link: Don&#8217;t switch your lock object mid-lock'>Don&#8217;t switch your lock object mid-lock</a></li>
<li><a href='http://ripper234.com/p/never-use-synchronized-methods-or-lock-on-this/' rel='bookmark' title='Permanent Link: Never use synchronized methods or lock on this'>Never use synchronized methods or lock on this</a></li>
<li><a href='http://ripper234.com/p/playing-with-a-few-readerwriterlocks-in-net/' rel='bookmark' title='Permanent Link: Playing with a few ReaderWriterLocks in .Net'>Playing with a few ReaderWriterLocks in .Net</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/NM35AmR7VCk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/lock-freedom-is-overrated/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/lock-freedom-is-overrated/</feedburner:origLink></item>
		<item>
		<title>Props to lnbogen</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/U1BohtSLrhs/</link>
		<comments>http://ripper234.com/p/props-to-lnbogen/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 21:51:55 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[meta]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1302</guid>
		<description><![CDATA[I&#8217;m following his lead and integrating Facebook&#8217;s Like button in this blog. No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m following <a href="http://lnbogen.com/2010/07/15/LnbogenMeetsFacebookLike.aspx">his lead</a> and integrating Facebook&#8217;s Like button in this blog.</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/U1BohtSLrhs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/props-to-lnbogen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/props-to-lnbogen/</feedburner:origLink></item>
		<item>
		<title>Dealing with Version Branches</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/pWvXJy4PcoU/</link>
		<comments>http://ripper234.com/p/dealing-with-version-branches/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 07:00:18 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[TeamCity]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1295</guid>
		<description><![CDATA[At Delver, like many other places, we use version branches to maintain releases. We have one trunk where everything gets integrated, and when we want to stabalize a release version, we create a version branch and do a &#8216;code freeze&#8217; on this branch. On the version branch, only bug fixes are committed, and no new features are [...]


Related posts:<ol><li><a href='http://ripper234.com/p/some-more-on-teamcity/' rel='bookmark' title='Permanent Link: Some More on TeamCity'>Some More on TeamCity</a></li>
<li><a href='http://ripper234.com/p/knuth-and-the-city-teamcity/' rel='bookmark' title='Permanent Link: Knuth and The City (TeamCity!)'>Knuth and The City (TeamCity!)</a></li>
<li><a href='http://ripper234.com/p/this-comes-before-your-business-logic/' rel='bookmark' title='Permanent Link: This comes BEFORE your business logic!'>This comes BEFORE your business logic!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://delver.com/">Delver</a>, like many other places, we use version branches to maintain releases. We have one trunk where everything gets integrated, and when we want to stabalize a release version, we create a version branch and do a &#8216;code freeze&#8217; on this branch. On the version branch, only bug fixes are committed, and no new features are developed.</p>
<p>This process helps us stabilize versions within a matter of days and proceed quickly from trunk to QA to Production.</p>
<p>A problem we experienced with this process was it was hard to make sure all bugfixes were properly merged to trunk. The commonplace practice is to merge all changes from the version branch to trunk at the end of the release cycle (when the version is &#8220;frozen&#8221;).</p>
<p>There are at least two problems with this approach:</p>
<ul>
<li>First, it is usually one person who is left the ugly task of doing the merge of all these bugfixes that weren&#8217;t previously merged, usually in files he didn&#8217;t touch and knows nothing about.</li>
<li>Second, if there are bugfixes on the version branch after the version is frozen, what is to guarantee they will reach trunk? The sad answer  is &#8220;nothing&#8221; &#8211; we had several regression bugs because people forgot to merge their bugfixes).</li>
</ul>
<p>Here is our NewAndImprovedProcess™ (as implemented by our very own Sergey Goncharov):</p>
<p>We setup a <a href="http://www.jetbrains.com/teamcity/">TeamCity</a> build that monitors all version branches. It runs nightly, and examines the <a href="http://chestofbooks.com/computers/revision-control/subversion-svn/svn-Mergeinfo-Ref-svn-C-Mergeinfo.html">mergeinfo SVN property</a> on all modified files. If it detects files that were committed to the version branch but weren&#8217;t merged to trunk, it fails and send an email to the responsible developer. A little convenience feature we sprinkled in was that if you have a change set that you really don&#8217;t want to merge to trunk, you can write in the commit note &#8220;[NO MERGE]&#8221; and the build will ignore this commit (you can also do a &#8216;recorded merge&#8217;, which is the proper SVN way of doing it, although  adding the commit note is faster in a quick-and-dirty way).</p>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/some-more-on-teamcity/' rel='bookmark' title='Permanent Link: Some More on TeamCity'>Some More on TeamCity</a></li>
<li><a href='http://ripper234.com/p/knuth-and-the-city-teamcity/' rel='bookmark' title='Permanent Link: Knuth and The City (TeamCity!)'>Knuth and The City (TeamCity!)</a></li>
<li><a href='http://ripper234.com/p/this-comes-before-your-business-logic/' rel='bookmark' title='Permanent Link: This comes BEFORE your business logic!'>This comes BEFORE your business logic!</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/pWvXJy4PcoU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/dealing-with-version-branches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/dealing-with-version-branches/</feedburner:origLink></item>
		<item>
		<title>Launching Kuzando – a simple task management website</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/09ceiy0mFq4/</link>
		<comments>http://ripper234.com/p/launching-kuzando-a-simple-task-management-website/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 23:08:56 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[kuzando]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1292</guid>
		<description><![CDATA[After a few alpha versions, I finish coding the basic features of Kuzando, a simple task management website based on post-its. It is a combination of a calender and a todo list, which doesn&#8217;t currently exist in other similar websites. The code is hosted at Github, and the issue list at Google Code. Also, note [...]


Related posts:<ol><li><a href='http://ripper234.com/p/a-survey-of-open-apis/' rel='bookmark' title='Permanent Link: A survey of open APIs'>A survey of open APIs</a></li>
<li><a href='http://ripper234.com/p/disable-resharper-c-3-syntax/' rel='bookmark' title='Permanent Link: Disable Resharper C# 3 syntax'>Disable Resharper C# 3 syntax</a></li>
<li><a href='http://ripper234.com/p/cancelor-a-java-task-cancelation-servic/' rel='bookmark' title='Permanent Link: Cancelor &#8211; a java task cancelation service'>Cancelor &#8211; a java task cancelation service</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>After a few alpha versions, I finish coding the basic features of <a href="http://kuzando.com/">Kuzando</a>, a simple task management website based on post-its. It is a combination of a calender and a todo list, which doesn&#8217;t currently exist in other similar websites.</p>
<p>The code is hosted <a href="github.com/ripper234/Kuzando">at Github</a>, and the issue list at <a href="http://code.google.com/p/kuzando/issues/list">Google Code</a>. Also, note that there is a <a href="http://kuzando.com/Authentication/LoginAsGuest">guest account</a> if you want to play with the system (Thanks Anna for the idea).</p>
<p>We currently have 100% user satisfaction, which is to say that Aya (my fiancé, and the one user whom Kuzando was tailored for) is actively using it to plan her schedule at the lab. You&#8217;re invited to do the same &#8211; if there are some missing features that would make your usage of Kuzando more pleasant, let me know.</p>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/a-survey-of-open-apis/' rel='bookmark' title='Permanent Link: A survey of open APIs'>A survey of open APIs</a></li>
<li><a href='http://ripper234.com/p/disable-resharper-c-3-syntax/' rel='bookmark' title='Permanent Link: Disable Resharper C# 3 syntax'>Disable Resharper C# 3 syntax</a></li>
<li><a href='http://ripper234.com/p/cancelor-a-java-task-cancelation-servic/' rel='bookmark' title='Permanent Link: Cancelor &#8211; a java task cancelation service'>Cancelor &#8211; a java task cancelation service</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/09ceiy0mFq4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/launching-kuzando-a-simple-task-management-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/launching-kuzando-a-simple-task-management-website/</feedburner:origLink></item>
		<item>
		<title>Rise of Eldrazi draft walkthrough</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/c1UFUArsdi0/</link>
		<comments>http://ripper234.com/p/rise-of-eldrazi-draft-walkthrough/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 17:34:33 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Draft]]></category>
		<category><![CDATA[Magic]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1288</guid>
		<description><![CDATA[It&#8217;s been a while since I posted a draft walkthrough. Related posts:Rise of Eldrazi draft walkthrough Magic draft walkthrough creator Another draft walkthrough, 4-color Alara


Related posts:<ol><li><a href='http://ripper234.com/magic/rise-of-eldrazi-draft-walkthrough/' rel='bookmark' title='Permanent Link: Rise of Eldrazi draft walkthrough'>Rise of Eldrazi draft walkthrough</a></li>
<li><a href='http://ripper234.com/p/magic-draft-walkthrough-creator/' rel='bookmark' title='Permanent Link: Magic draft walkthrough creator'>Magic draft walkthrough creator</a></li>
<li><a href='http://ripper234.com/p/another-draft-walkthrough-4-color-alara/' rel='bookmark' title='Permanent Link: Another draft walkthrough, 4-color Alara'>Another draft walkthrough, 4-color Alara</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I posted a <a href="http://ripper234.com/rise-of-eldrazi-draft-walkthrough/">draft walkthrough</a>.</p>


<p>Related posts:<ol><li><a href='http://ripper234.com/magic/rise-of-eldrazi-draft-walkthrough/' rel='bookmark' title='Permanent Link: Rise of Eldrazi draft walkthrough'>Rise of Eldrazi draft walkthrough</a></li>
<li><a href='http://ripper234.com/p/magic-draft-walkthrough-creator/' rel='bookmark' title='Permanent Link: Magic draft walkthrough creator'>Magic draft walkthrough creator</a></li>
<li><a href='http://ripper234.com/p/another-draft-walkthrough-4-color-alara/' rel='bookmark' title='Permanent Link: Another draft walkthrough, 4-color Alara'>Another draft walkthrough, 4-color Alara</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/c1UFUArsdi0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/rise-of-eldrazi-draft-walkthrough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/rise-of-eldrazi-draft-walkthrough/</feedburner:origLink></item>
		<item>
		<title>On the importance of communication in the workplace</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/zFxehKC67xc/</link>
		<comments>http://ripper234.com/p/on-the-importance-of-communication-in-the-workplace/#comments</comments>
		<pubDate>Sat, 22 May 2010 11:53:08 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1279</guid>
		<description><![CDATA[When I just started learning how to program, I thought programming as a profession was about code, design and algorithms &#8211; after all, these are the courses that are taught in university, so this must be the most important skills for a programmer, right? Wrong. Over the years, I have discovered that effective communication is [...]


Related posts:<ol><li><a href='http://ripper234.com/p/welcome/' rel='bookmark' title='Permanent Link: Welcome'>Welcome</a></li>
<li><a href='http://ripper234.com/p/reminder-email-subscritpion/' rel='bookmark' title='Permanent Link: Reminder &#8211; Email Subscritpion'>Reminder &#8211; Email Subscritpion</a></li>
<li><a href='http://ripper234.com/p/i-dont-like-google-today/' rel='bookmark' title='Permanent Link: I Don&#8217;t Like Google Today'>I Don&#8217;t Like Google Today</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>When I just started learning how to program, I thought programming as a profession was about code, design and algorithms &#8211; after all, these are the courses that are taught in university, so this must be the most important skills for a programmer, right?</p>
<p>Wrong.</p>
<p>Over the years, I have discovered that effective communication is at least as important, if not more, than the more technical aspects of a programmer&#8217;s work (this might be true for other fields, but I can&#8217;t really comment about that).</p>
<p><strong>Interpersonal</strong> &#8211; Top on this list is &#8220;being a good and friendly person&#8221;. We spend most of our waking hours at work, and progressively fewer of this time is spent on the computer coding. Therefore, you want the people you work with to be &#8230; the sort of people you&#8217;d like to spend time with (a little self-defining here, but still). Working with someone who&#8217;s rude, inconsiderate, or just plain not nice can make the best workplace in the world into the worst.</p>
<p><strong>Responsibility </strong>- people you work with, whether team mates, managers or other colleagues, are all a key instrument to your success at your own tasks. Today&#8217;s high tech company is a highly chaotic and fast paced environment, in which you are rarely working on some research project all alone in your basement. More often, you are cooperating with other people to create something larger, starting from product managers, tech leads, QA, managers and support. You depend on them for the successful delivery of your work. There&#8217;s nothing more annoying than not being able to finish a feature just because some crucial link in this chain neglected his responsibilities.</p>
<p><strong>Email/Face to Face</strong> &#8211; At most modern organizations, you send and receive dozens of emails every day. Email is very convenient &#8211; you can send it without ever leaving your desktop, it&#8217;s saved and archived and you use it to reach several people at once. It is also a trap. Some things are better not handled through email or Skype! I cannot stress this issue enough. Countless time have I seen an important process stuck because it was handled via email, and the sender wrongfully assumed that this was enough to make the recipient take the required actions.</p>
<p>When you have something urgent or important, it&#8217;s most effective to accompany or replace the email with a face to face conversation. Sometimes all you need to say is &#8220;I&#8217;ve sent you an email about yada yada, please see the details there because I need it for this and that&#8221;. This helps focus the recipient and ensures he&#8217;ll take the necessary actions. Another point worth saying about email, is that you should adjust the form of communication to your recipient. Some people can be counted on to reply to most emails within an hour, and to never skip an important email, while others must be &#8216;nagged&#8217; to repeatedly. If you use Outlook, you should use its reminder system to make sure the emails that are important to you (both outgoing and incoming) get handled.</p>
<p>Avoid long email threads and large recipient lists at any cost! These can serve as announcements, but as soon as such emails turn to discussions, people just tune out and the thread becomes an exercise in uselessness. Identify these wasted keystrokes and instead solve the issues by talking to the key people. If the other party tries to continue a useless email thread, just reply &#8220;I&#8217;d rather discuss this face to face, it&#8217;ll be shorter&#8221; for all of us.</p>
<p>When I was young, nobody told me programming was a &#8220;people profession&#8221;, but the truth is that it really is. What is your opinion?</p>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/welcome/' rel='bookmark' title='Permanent Link: Welcome'>Welcome</a></li>
<li><a href='http://ripper234.com/p/reminder-email-subscritpion/' rel='bookmark' title='Permanent Link: Reminder &#8211; Email Subscritpion'>Reminder &#8211; Email Subscritpion</a></li>
<li><a href='http://ripper234.com/p/i-dont-like-google-today/' rel='bookmark' title='Permanent Link: I Don&#8217;t Like Google Today'>I Don&#8217;t Like Google Today</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/zFxehKC67xc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/on-the-importance-of-communication-in-the-workplace/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/on-the-importance-of-communication-in-the-workplace/</feedburner:origLink></item>
		<item>
		<title>A four cheese salad</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/CuS4HUZTmSo/</link>
		<comments>http://ripper234.com/p/a-four-cheese-salad/#comments</comments>
		<pubDate>Sat, 15 May 2010 07:33:55 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Food]]></category>
		<category><![CDATA[salad]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1274</guid>
		<description><![CDATA[A friend asked for the recipe for this salad. It&#8217;s embarrassingly simple: Cut some cucumbers, pepper and tomatoes (either normal or Sherry). Pick some of your favorite cheeses. We used Merlot, Massdam, Mozzarella and Tsfatit, but you can use any. Cut down to small cubes. Add some pumpkin &#38; caraway seeds to make it more [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>A friend asked for the recipe for this salad. It&#8217;s embarrassingly simple:</p>
<ol>
<li>Cut some cucumbers, pepper and tomatoes (either normal or Sherry).</li>
<li>Pick some of your favorite cheeses. We used <a href="http://www.globes.co.il/news/article.aspx?did=1000051735">Merlot</a>, <a href="http://en.wikipedia.org/wiki/Maasdam_cheese">Massdam</a>, <a href="http://www.edibleportland.com/images/cheese_mozzballs.jpg">Mozzarella</a> and <a href="http://he.wikipedia.org/wiki/%D7%92%D7%91%D7%99%D7%A0%D7%94_%D7%A6%D7%A4%D7%AA%D7%99%D7%AA">Tsfatit</a>, but you can use any. Cut down to small cubes.</li>
<li>Add some pumpkin &amp; <a href="http://www.maimonspices.com/tavlin1.php?id=1&amp;id_cat=40">caraway seeds</a> to make it more interesting.</li>
<li>Add olive oil and lemon juice in generous portions.</li>
<li>Spice it up &#8211; salt, <a href="http://us.123rf.com/400wm/400/400/funlovingvolvo/funlovingvolvo0809/funlovingvolvo080900151/3621457.jpg">four seasons pepper</a>, <a href="http://he.wikipedia.org/wiki/%D7%90%D7%96%D7%95%D7%91_%D7%AA%D7%A8%D7%91%D7%95%D7%AA%D7%99">Marjoram</a> and <a href="http://he.wikipedia.org/wiki/%D7%96%D7%A2%D7%AA%D7%A8">Za&#8217;tar</a>.</li>
</ol>
<p>And voilà:</p>
<p><a href="http://www.facebook.com/photo.php?pid=3341800&#038;l=231ec0bee1&#038;id=690184158"><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs504.ash1/29795_364925279158_690184158_3341800_4067845_n.jpg"/></a></p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/CuS4HUZTmSo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/a-four-cheese-salad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/a-four-cheese-salad/</feedburner:origLink></item>
		<item>
		<title>WarClassLoader – load your classes straight from a war</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/EG39ImcTMjY/</link>
		<comments>http://ripper234.com/p/warclassloader-load-your-classes-straight-from-a-war/#comments</comments>
		<pubDate>Wed, 12 May 2010 18:22:10 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1270</guid>
		<description><![CDATA[I was of need of a Java Class Loader that can load classes from within a war file. It took me a bit to find this &#8211; in fact, I found it when I looked for ZipClassLoader (a war file is a zip with a specific folder structure). I found this post, and modified it [...]


Related posts:<ol><li><a href='http://ripper234.com/p/dont-switch-your-lock-object-mid-lock/' rel='bookmark' title='Permanent Link: Don&#8217;t switch your lock object mid-lock'>Don&#8217;t switch your lock object mid-lock</a></li>
<li><a href='http://ripper234.com/p/unhandled-exceptions-crash-net-threads/' rel='bookmark' title='Permanent Link: Unhandled Exceptions Crash .NET Threads'>Unhandled Exceptions Crash .NET Threads</a></li>
<li><a href='http://ripper234.com/p/cancelor-a-java-task-cancelation-servic/' rel='bookmark' title='Permanent Link: Cancelor &#8211; a java task cancelation service'>Cancelor &#8211; a java task cancelation service</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I was of need of a Java Class Loader that can load classes from within a war file.<br />
It took me a bit to find this &#8211; in fact, I found it when I looked for ZipClassLoader (a war file is a zip with a specific folder structure). I found <a href="http://www2.java.net/blog/2008/07/25/how-load-classes-jar-or-zip">this post</a>, and modified it to take the war folder structure into account:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.ByteArrayOutputStream</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.InputStream</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.zip.ZipEntry</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.zip.ZipFile</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * Loads classes from war files. See http://www2.java.net/blog/2008/07/25/how-load-classes-jar-or-zip
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> WarClassLoader <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">ClassLoader</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">ZipFile</span> file<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> WarClassLoader<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> filename<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">IOException</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">file</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ZipFile</span><span style="color: #009900;">&#40;</span>filename<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">protected</span> Class<span style="color: #339933;">&lt;?&gt;</span> findClass<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">ClassNotFoundException</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">ZipEntry</span> entry <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">file</span>.<span style="color: #006633;">getEntry</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;WEB-INF/classes/&quot;</span> <span style="color: #339933;">+</span> name.<span style="color: #006633;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.'</span>, <span style="color: #0000ff;">'/'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;.class&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>entry <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ClassNotFoundException</span><span style="color: #009900;">&#40;</span>name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> array <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">InputStream</span> in <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">file</span>.<span style="color: #006633;">getInputStream</span><span style="color: #009900;">&#40;</span>entry<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">ByteArrayOutputStream</span> out <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayOutputStream</span><span style="color: #009900;">&#40;</span>array.<span style="color: #006633;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> length <span style="color: #339933;">=</span> in.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span>array<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>length <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span>array, <span style="color: #cc66cc;">0</span>, length<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                length <span style="color: #339933;">=</span> in.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span>array<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000000; font-weight: bold;">return</span> defineClass<span style="color: #009900;">&#40;</span>name, out.<span style="color: #006633;">toByteArray</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span>, out.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> exception<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ClassNotFoundException</span><span style="color: #009900;">&#40;</span>name, exception<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Two notes:</p>
<ol>
<li>This code isn&#8217;t really production grade, as the streams aren&#8217;t closed and whatnot</li>
<li>It is missing one critical addition &#8211; if the classes in the war depend on the jars that are included within it, this class loader will not be able to load these classes. I managed to work around the problem because I already had all those jars in my classpath anyway, but in principle the code above needs a bit of extension to be able to work with the embedded jars.</li>
</ol>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/dont-switch-your-lock-object-mid-lock/' rel='bookmark' title='Permanent Link: Don&#8217;t switch your lock object mid-lock'>Don&#8217;t switch your lock object mid-lock</a></li>
<li><a href='http://ripper234.com/p/unhandled-exceptions-crash-net-threads/' rel='bookmark' title='Permanent Link: Unhandled Exceptions Crash .NET Threads'>Unhandled Exceptions Crash .NET Threads</a></li>
<li><a href='http://ripper234.com/p/cancelor-a-java-task-cancelation-servic/' rel='bookmark' title='Permanent Link: Cancelor &#8211; a java task cancelation service'>Cancelor &#8211; a java task cancelation service</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/EG39ImcTMjY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/warclassloader-load-your-classes-straight-from-a-war/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/warclassloader-load-your-classes-straight-from-a-war/</feedburner:origLink></item>
		<item>
		<title>Delver beta is alive!</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/6fhB2_8aEhU/</link>
		<comments>http://ripper234.com/p/delver-beta-is-alive/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 11:30:40 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Delver]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1266</guid>
		<description><![CDATA[After more than a year of work, we have finally released Delver beta &#8211; a &#8220;social shopping platform&#8221;. You&#8217;re more than welcome to check it out at http://delver.com/ We are still in &#8220;closed beta&#8221;, which means you need an invite to get in (but can then forward invites to your friends). If you want one, [...]


Related posts:<ol><li><a href='http://ripper234.com/p/delver-beta-invites/' rel='bookmark' title='Permanent Link: Delver Beta Invites'>Delver Beta Invites</a></li>
<li><a href='http://ripper234.com/p/delving-blogs/' rel='bookmark' title='Permanent Link: Delving Blogs'>Delving Blogs</a></li>
<li><a href='http://ripper234.com/p/delver-is-online/' rel='bookmark' title='Permanent Link: Delver is Online'>Delver is Online</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>After more than a year of work, we have finally released Delver beta &#8211; a &#8220;social shopping platform&#8221;.<br />
You&#8217;re <strong>more than welcome</strong> to check it out at <a href="http://delver.com/">http://delver.com/</a></p>
<p>We are still in &#8220;closed beta&#8221;, which means you need an invite to get in (but can then forward invites to your friends).<br />
If you want one, drop me a line with your email.</p>
<p>Big big thanks to everyone in our team for making it happen!</p>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/delver-beta-invites/' rel='bookmark' title='Permanent Link: Delver Beta Invites'>Delver Beta Invites</a></li>
<li><a href='http://ripper234.com/p/delving-blogs/' rel='bookmark' title='Permanent Link: Delving Blogs'>Delving Blogs</a></li>
<li><a href='http://ripper234.com/p/delver-is-online/' rel='bookmark' title='Permanent Link: Delver is Online'>Delver is Online</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/6fhB2_8aEhU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/delver-beta-is-alive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/delver-beta-is-alive/</feedburner:origLink></item>
		<item>
		<title>Who wants a Stack Overflow T-shirt?</title>
		<link>http://feedproxy.google.com/~r/AQuantumImmortal/~3/AbUDvdGhrkY/</link>
		<comments>http://ripper234.com/p/who-wants-a-stack-overflow-t-shirt/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 21:34:15 +0000</pubDate>
		<dc:creator>ripper234</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Stackoverflow]]></category>

		<guid isPermaLink="false">http://ripper234.com/?p=1263</guid>
		<description><![CDATA[Still in beta (not announced on the SO blog yet). A shirt is $12, shipping to Israel is $11 fixed price + $4 per shirt. Let me know if you want one and we can do a shipment together. Related posts:My favorite Stacks StackOverflow Overflow We Finally Found An Apartment!


Related posts:<ol><li><a href='http://ripper234.com/p/my-favorite-stacks/' rel='bookmark' title='Permanent Link: My favorite Stacks'>My favorite Stacks</a></li>
<li><a href='http://ripper234.com/p/stackoverflow-overflow/' rel='bookmark' title='Permanent Link: StackOverflow Overflow'>StackOverflow Overflow</a></li>
<li><a href='http://ripper234.com/p/we-finally-found-an-apartment/' rel='bookmark' title='Permanent Link: We Finally Found An Apartment!'>We Finally Found An Apartment!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://meta.stackoverflow.com/questions/45782/t-shirt-time-beta">Still in beta</a> (not announced on the SO blog yet). A shirt is $12, shipping to Israel is $11 fixed price + $4 per shirt. Let me know if you want one and we can do a shipment together.</p>
<p><img src="http://img689.imageshack.us/img689/8947/stackoverflowtshirtsspy.jpg" alt="Stack Overflow shirts" /></p>


<p>Related posts:<ol><li><a href='http://ripper234.com/p/my-favorite-stacks/' rel='bookmark' title='Permanent Link: My favorite Stacks'>My favorite Stacks</a></li>
<li><a href='http://ripper234.com/p/stackoverflow-overflow/' rel='bookmark' title='Permanent Link: StackOverflow Overflow'>StackOverflow Overflow</a></li>
<li><a href='http://ripper234.com/p/we-finally-found-an-apartment/' rel='bookmark' title='Permanent Link: We Finally Found An Apartment!'>We Finally Found An Apartment!</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/AQuantumImmortal/~4/AbUDvdGhrkY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ripper234.com/p/who-wants-a-stack-overflow-t-shirt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ripper234.com/p/who-wants-a-stack-overflow-t-shirt/</feedburner:origLink></item>
	</channel>
</rss>
