<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    
    <link href="http://blog.chris.de/feeds/atom10.xml" rel="self" title="muesli's Blog" type="application/atom+xml" />
    <link href="http://blog.chris.de/"                        rel="alternate"    title="muesli's Blog" type="text/html" />
    <link href="http://blog.chris.de/rss.php?version=2.0"     rel="alternate"    title="muesli's Blog" type="application/rss+xml" />
    <title type="html">muesli's Blog</title>
    <subtitle type="html"></subtitle>
    <icon>http://blog.chris.de/templates/default/img/s9y_banner_small.png</icon>
    <id>http://blog.chris.de/</id>
    <updated>2011-11-26T00:52:11Z</updated>
    <generator uri="http://www.s9y.org/" version="1.6-alpha3">Serendipity 1.6-alpha3 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>

    <entry>
        <link href="http://blog.chris.de/archives/301-What-Im-up-to....html" rel="alternate" title="What I'm up to..." />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2011-11-24T04:50:00Z</published>
        <updated>2011-11-26T00:52:11Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=301</wfw:comment>
    
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=301</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/5-KDE" label="KDE" term="KDE" />
    
        <id>http://blog.chris.de/archives/301-guid.html</id>
        <title type="html">What I'm up to...</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <img src="http://download.tomahawk-player.org/images/logo.png" alt="" align="right"/>If you're still visiting this blog and wondering why it's been oh so quiet as of lately... well, things have changed, haven't they? Twitter, Facebook, Google Plus came around the corner and blogs were suddenly too much hassle to maintain and keep uptodate. To put it technically: Blogs are pull-mode, social networks are push-mode.<br />
<br />
Twitter trained me like a little monkey, so I'll keep it brief: <a href="http://blog.chris.de/exit.php?url_id=965&amp;entry_id=301" title="http://gettomahawk.com/"  onmouseover="window.status='http://gettomahawk.com/';return true;" onmouseout="window.status='';return true;">The awesome Tomahawk Player</a> is what I'm up to. It's a new kind of music player, allowing you to socially interact with your friends and (existing) social graphs, as well as turning the "Web 2.0" in media players up a notch. It leverages the wonderful services of YouTube, Spotify, Google, Grooveshark, Last.fm, Echonest, OwnCloud, Ampache, SoundCloud, Official.fm, Ex.fm, Rdio, Jabber, Twitter (to name just a few) to create a new listening experience which breaks existing boundaries. Open Spotify playlists and play it from your friend's music library, YouTube or one of many other services. Why not import the top tracks for a Last.fm tag and have the songs play from Spotify? It's up to you. Share your favourite tracks and playlists directly with your friends and listen to theirs. Coming to a system near you, whether that is running <a href="http://blog.chris.de/exit.php?url_id=968&amp;entry_id=301" title="http://gettomahawk.com/download/"  onmouseover="window.status='http://gettomahawk.com/download/';return true;" onmouseout="window.status='';return true;">Linux, Windows or OS X</a>.<br />
<br />
"Tomahawk gives us a look into the future of music players, and this future looks bright!" -  hypebot.com<br />
"... groundbreaking open source media player" - Evolver.fm<br />
"The social media player of tomorrow" - ZDnet<br />
<br />
<a href="http://blog.chris.de/exit.php?url_id=966&amp;entry_id=301" title="http://twitter.com/tomahawk"  onmouseover="window.status='http://twitter.com/tomahawk';return true;" onmouseout="window.status='';return true;">Follow Tomahawk on Twitter</a><br />
<a href="http://blog.chris.de/exit.php?url_id=967&amp;entry_id=301" title="http://twitter.com/mueslix"  onmouseover="window.status='http://twitter.com/mueslix';return true;" onmouseout="window.status='';return true;">Follow me on Twitter</a><br />
<br/> 
            </div>
        </content>
        <dc:subject>c++</dc:subject>
<dc:subject>echonest</dc:subject>
<dc:subject>facebook</dc:subject>
<dc:subject>google</dc:subject>
<dc:subject>grooveshark</dc:subject>
<dc:subject>jabber</dc:subject>
<dc:subject>kde</dc:subject>
<dc:subject>last.fm</dc:subject>
<dc:subject>music</dc:subject>
<dc:subject>player</dc:subject>
<dc:subject>qt4</dc:subject>
<dc:subject>rdio</dc:subject>
<dc:subject>soundcloud</dc:subject>
<dc:subject>spotify</dc:subject>
<dc:subject>tomahawk</dc:subject>
<dc:subject>twitter</dc:subject>
<dc:subject>youtube</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/300-Its-like-someone-rewrote-Plasma-from-scratch.html" rel="alternate" title="It's like someone rewrote Plasma from scratch" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2011-01-29T20:12:49Z</published>
        <updated>2011-02-05T18:06:50Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=300</wfw:comment>
    
        <slash:comments>10</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=300</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/5-KDE" label="KDE" term="KDE" />
    
        <id>http://blog.chris.de/archives/300-guid.html</id>
        <title type="html">It's like someone rewrote Plasma from scratch</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Ever since I switched to KDE4 I kept having the weirdest issues with Plasma. The problems ranged from small design glitches to freakishly strange behavior which rendered Plasma unusable every now and then. Today I've solved (almost) all of those issues, which, as it turned out, could all be fixed within a minute. But let's not jump to the cause &amp; workaround just yet.<br />
<br />
Let me give you a few examples of "weirdness" that I got way too used to over the last few months (or even years):<br />
<br />
- Having filetransfer jobs shown in the notification area of the taskbar made this area constantly resize itself. It kept flickering and jumping all over the screen.<br />
- Items in the systray would overlap each other. Some items would simply miss their caption entirely.<br />
- KRunner would start up at fairly random (but constant) position in the top-half of my desktop.<br />
- The Activities widget on the other hand would leave a huge gap below it and the desktop border.<br />
- ... I could go on, really ...<br />
<br />
Today I simply couldn't stand starring at all those glitches anymore. I had enough of it. No, I didn't install Gnome, I haven't made the switch to Windows 7:<br />
<br />
I did something way more desperate and pathetic: I've switched around the way my monitors are connected to the DVI outputs. Now my primary desktop (from KDE's point of view) is also connected to the primary DVI output. That already solved some really weird issues I kept experiencing on a daily basis. The other thing I did had an even more dramatic impact though. One small change in xorg.conf and suddenly Plasma behaved just fine - "as if someone rewrote it from scratch".<br />
<br />
Old:<br />
Option "metamodes" "DFP-0: nvidia-auto-select +0+0, DFP-1: nvidia-auto-select +1680+150"<br />
<br />
New:<br />
Option "metamodes" "DFP-0: nvidia-auto-select +0+0, DFP-1: nvidia-auto-select +1680+0"<br />
<br />
The old option caused my monitors to line up at the bottom of the desktop. The new option lines them up at the top border (y-coordinate: 0).<br />
I can already imagine all kinds of havoc that this could cause if you don't keep account of that gap in your calculations. I bet you can, too.<br />
<br />
Finally: I can't tell you how great and polished KDE 4.6 suddenly feels. It's been a while I've been that proud of it. And all because of two extra digits in a little text config file. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/299-The-X.org,-NVidia-KWin-Situation.html" rel="alternate" title="The X.org, NVidia &amp; KWin Situation" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2010-07-12T14:08:45Z</published>
        <updated>2010-07-19T00:39:01Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=299</wfw:comment>
    
        <slash:comments>47</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=299</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/5-KDE" label="KDE" term="KDE" />
    
        <id>http://blog.chris.de/archives/299-guid.html</id>
        <title type="html">The X.org, NVidia &amp; KWin Situation</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                For months and months now, my Linux Desktop is suffering from one particular issue, which makes it a pain to use on a daily basis: After having it running for a few hours, suddenly X.org and KWin go bonkers and start eating up all my cpu horse-power.<br />
<br />
It's not uncommon to see X.org spiking up to a whopping 60% CPU usage, followed by KWin using roughly another 25%.<br />
<br />
Since I'm suffering from this issue now ever since I switched to KDE 4, I thought it's time to turn to you fellow KDE developers for some good advice, since all my undertakings to resolve the issue have failed:<br />
<br />
I have tried to switch to a different / newer graphics card, experimented with various versions of the NVidia driver and tweaked X.org settings, have turned off various desktop effect plugins, switched between XRender and OpenGL, even re-installed Kubuntu on a new machine.<br />
<br />
No dice, though... after it's been running for a few hours my desktop is completely unusable. Every mouse or keyboard action becomes sluggish, scrolling through lists takes ages and logging out from my KDE session up to two minutes (which is the only known way to resolve the situation, giving me another six hours or so, before I'll have to repeat that routine).<br />
<br />
From talking on IRC, forums and a bit of googling I know that I'm not the only one who's having this problem. So I'm curious if anyone has experienced the issue and gained some insight as to what's actually going on. I'd be happy to know.<br />
<br />
<strong>Update on July, 13th:</strong><br />
Still investigating and collecting data to figure out what's going on. Since I wrote this blog entry originally, my system suffered from terrible slowdowns twice more. In both cases X.org and KWin instantly stopped utilizing my CPU when I closed all GTK-based apps. (e.g. Firefox, Chromium, Pan, Gimp, ...)<br />
<br />
At least this is some progress, even though I still don't know what might possibly be causing this. Running a pure Gnome installation, I've never experienced those issues.<br />
<br />
Thanks,<br />
Chris 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/297-Updating-Web-2.0-Profiles-Really-Really-Sucks!.html" rel="alternate" title="Updating Web 2.0 Profiles Really Really Sucks!" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2009-02-04T13:11:41Z</published>
        <updated>2009-02-05T03:53:35Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=297</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=297</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/10-Development" label="Development" term="Development" />
    
        <id>http://blog.chris.de/archives/297-guid.html</id>
        <title type="html">Updating Web 2.0 Profiles Really Really Sucks!</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Don't you hate it? You've decided to take a new snapshot of yourself and update your avatar on... oh... Last.fm, Digg.com, Facebook, Twitter, MeinVZ.net, Lokalisten.de, everywhere. You have to go to every single website and change it manually. Changed your relationship status, phone number or discovered you can't stand your favorite movie anymore? There you go again. I don't even know how many websites I've signed up for now offer a twitter-like status update that I can't be bothered to use.<br />
<br />
I'm kinda fed up with it.<br />
<br />
I wish I could publish a standardized XML file on my webspace which contains all the data (like my Avatar, Current Status etc.), so all those Web 2.0 services could parse it and update my profiles automatically. There could even be a ping-back like mechanism where I tell the services when to check my XML for updates to avoid unnecessary traffic.<br />
<br />
Now it would be easy to spec out such an XML and offer APIs to parse it in various languages. But I guess it would be daft to do so, since existing services don't even start to pick up on OpenID. After all, collecting this precious data is all those Web 2.0 services do and you don't want anyone to interfere with your core business, right?<br />
<br />
Yet at the same time I feel like all those services would be able to gather even more data about me if they were able to import and sync my data with their profile.<br />
<br />
(I'm aware that one would probably be able to write a Facebook application which could import the XML and update your profile. As long as Facebook is the only service to support this import mechanism, it wouldn't really help anyone, though.)<br />
<br />
<strong>Update:</strong> It seems OpenID itself already supports avatar syndication. Read more about it <a href="http://blog.chris.de/exit.php?url_id=963&amp;entry_id=297"  onmouseover="window.status='http://factoryjoe.com/blog/2007/04/21/raising-the-standard-for-avatars/';return true;" onmouseout="window.status='';return true;" title="Raising the standard for avatars">here</a>. (Thanks to <a href="http://blog.chris.de/exit.php?url_id=964&amp;entry_id=297"  onmouseover="window.status='http://julianstahnke.com/';return true;" onmouseout="window.status='';return true;" title="Julian Stahnke">Julian Stahnke</a> for the link) 
            </div>
        </content>
        <dc:subject>api</dc:subject>
<dc:subject>data</dc:subject>
<dc:subject>import</dc:subject>
<dc:subject>metadata</dc:subject>
<dc:subject>profile</dc:subject>
<dc:subject>web 2.0</dc:subject>
<dc:subject>xml</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/296-Ich-habe-kapiert....html" rel="alternate" title="Ich habe kapiert..." />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2008-06-27T18:25:46Z</published>
        <updated>2008-07-02T15:34:13Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=296</wfw:comment>
    
        <slash:comments>9</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=296</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/2-The-third-place" label="The third place" term="The third place" />
    
        <id>http://blog.chris.de/archives/296-guid.html</id>
        <title type="html">Ich habe kapiert...</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Endlich hab ich es verstanden. Warum tragen Frauen Stoeckelschuhe? Diese hochhakigen eklig aussehenden Dinger, die die unbequemste und unpraktischste Erfindung der Menschheit sein muessen?<br />
<br />
Nein, entgegen aller Vermutungen liegt es nicht daran dass sie den Arsch anheben und die Rundungen betonen. Es liegt am Ton. Diesem ewigen Klack-Klack das kein normaler Mensch aushalten kann. Und dennoch: jedes mal wenn ich es hoere drehe ich mich um, um zu sehen wer diese abartigen Toene schon wieder produziert:<br />
<br />
Sie werden beachtet. Sie erregen Aufmerksamkeit (egal ob negativ oder positiv) und dafuer geben Frauen alles, bzw. nehmen Frauen alles... in Kauf. Sogar geschwollene, kaputte Fuesse.<br />
<br />
Danke. Und wenn ich jetzt noch einmal dieses Klack-Klack diesen Nachmittag im Buero hoere greif ich zur Flinte. Ich hab euch inzwischen bemerkt, und ihr geht mir auf den Sack. Zieht die Schuhe im Buero aus oder kauft euch welche die eines intelligenten Wesens wuerdig sind. Autos haben auch keine viereckigen Reifen. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/295-The-worlds-greatest-comedian-died.html" rel="alternate" title="The world's greatest comedian died" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2008-06-24T03:37:57Z</published>
        <updated>2008-06-24T03:37:57Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=295</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=295</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/2-The-third-place" label="The third place" term="The third place" />
    
        <id>http://blog.chris.de/archives/295-guid.html</id>
        <title type="html">The world's greatest comedian died</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                George Carlin is dead. I can't tell you how incredibly sad I am right now... and I don't mean this pretentious "oh he was such a nice man" kind of sad. So I won't even try. George, rest in peace <img src="http://blog.chris.de/templates/default/img/emoticons/sad.png" alt=":-(" style="display: inline; vertical-align: bottom;" class="emoticon" /> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/292-Things-that-make-me-go-wrah-you-moron.html" rel="alternate" title="Things that make me go &quot;wrah-you-moron&quot;" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2008-05-03T14:37:08Z</published>
        <updated>2008-05-03T14:49:26Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=292</wfw:comment>
    
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=292</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/2-The-third-place" label="The third place" term="The third place" />
    
        <id>http://blog.chris.de/archives/292-guid.html</id>
        <title type="html">Things that make me go &quot;wrah-you-moron&quot;</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                ...people who scrobble podcats &amp; radio streams. A podcast != music. Last.fm is the social <u>music</u> revolution, not the social data-garbage revolution. Podcasts belong in a separate database. Lost podcast #121 is not similar to Britney Spears. It's not similar to any artist. Period.<br />
<br />
...searching for an artist on google.com and the first twenty results being the same Last.fm page... just in twenty different languages.<br />
<br />
...Orange sending me a text-message, welcoming me when I'm abroad. Every fucking 30 minutes. I get it. I'm in Germany currently. Yes, thanks, shut up Orange.<br />
<br />
...missing a flight because of bad weather and a now-one-lane motorway.<br />
<br />
...having GTA IV waiting for you back home, but not being able to play it because of... well... missing a flight because of now-one-lane motorways?!<br />
 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/290-Fight-spam-while-digitizing-books.html" rel="alternate" title="Fight spam while digitizing books" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2007-05-25T06:19:47Z</published>
        <updated>2007-05-25T06:19:47Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=290</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=290</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/1-Tech-Net" label="Tech &amp; Net" term="Tech &amp; Net" />
    
        <id>http://blog.chris.de/archives/290-guid.html</id>
        <title type="html">Fight spam while digitizing books</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                You know CAPTCHAs? Those annoying, weird, funky, little letters that you have to enter everywhere nowadays to leave a comment or sign up for an account. They're just there to prevent spamming and bots signing up, by verifying that you're a real human being.<br />
<br />
Now, wouldn't it be nice if this annoyance would at least provide some benefit? That's exactly what <a href="http://blog.chris.de/exit.php?url_id=960&amp;entry_id=290"  onmouseover="window.status='http://bmaurer.blogspot.com/2007/05/recaptcha-new-way-to-fight-spam.html';return true;" onmouseout="window.status='';return true;" title="http://bmaurer.blogspot.com/2007/05/recaptcha-new-way-to-fight-spam.html">reCAPTCHA</a> is about. The difference to a normal CAPTCHA: it presents you two words instead of just one weird five-letter combination. The one word it already knows about and again, it is there to verify you as a real user. The other one, though, is a scanned picture from an old book which is currently being digitized, and the CAPTCHA system doesn't know what the word actually reads. But it's really easy for you to identify, so you help out by also entering the second word, which gets stored and helps recovering and digitizing old books. Awesome. 
            </div>
        </content>
        <dc:subject>book</dc:subject>
<dc:subject>captcha</dc:subject>
<dc:subject>digitizing</dc:subject>
<dc:subject>spam</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/288-libketama-a-consistent-hashing-algo-for-memcache-clients.html" rel="alternate" title="libketama - a consistent hashing algo for memcache clients" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2007-04-11T09:39:59Z</published>
        <updated>2007-04-12T17:05:16Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=288</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=288</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/10-Development" label="Development" term="Development" />
    
        <id>http://blog.chris.de/archives/288-guid.html</id>
        <title type="html">libketama - a consistent hashing algo for memcache clients</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                We wrote ketama to replace how our memcached clients mapped keys to servers. Previously, clients mapped keys->servers like this:<br />
 <br />
 server = serverlist[hash(key)%serverlist.length];<br />
 <br />
This meant that whenever we added or removed servers from the pool, everything hashed to different servers, which effectively wiped the entire cache. We add (and sometimes remove) servers from the memcached pool often enough to warrant writing this - if your memcached pool never changes, you can probably stop reading now <img src="http://blog.chris.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
 <br />
Ketama is an implementation of a consistent hashing algorithm, meaning you can add or remove servers from the memcached pool without causing a complete remap of all keys.<br />
 <br />
Here's how it works:<br />
 <br />
 - Take your list of servers (eg: 1.2.3.4:11211, 5.6.7.8:11211, 9.8.7.6:11211)<br />
 - Hash each server string to several (100-200) unsigned ints<br />
 - Conceptually, these numbers are placed on a circle called the continuum. (imagine a clock face that goes from 0 to 2^32)<br />
 - Each number links to the server it was hashed from, so servers appear at several points on the continuum, by each of the numbers they hashed to.<br />
 - To map a key->server, hash your key to a single unsigned int, and find the next biggest number on the continuum. The server linked to that number is the correct server for that key.<br />
 - If you hash your key to a value near 2^32 and there are no points on the continuum greater than your hash, return the first server in the continuum.<br />
 <br />
If you then add or remove a server from the list, only a small proportion of keys end up mapping to different servers.<br />
 <br />
The majority of the code is a C library (libketama) and a PHP4 extension that wraps it. I've also included a class from our Java client. (Java Collections makes it rather easy). We use a single-server memcache client wrapped with a native php class to make it multi-server capable, so we just replaced the hashing method with a ketama_find_server call. (should be easy enough to plug this into libmemcache if need be)<br />
 <br />
<a href="http://blog.chris.de/exit.php?url_id=957&amp;entry_id=288"  onmouseover="window.status='http://static.last.fm/ketama/ketama-0.1.1.tar.bz2';return true;" onmouseout="window.status='';return true;"  title="http://static.last.fm/ketama/ketama-0.1.1.tar.bz2">http://static.last.fm/ketama/ketama-0.1.1.tar.bz2</a><br />
 <br />
We've been using this in production for all our PHP installs and Java services at Last.fm for around 10 days now. We deployed it just in time to smooth over moving loads of webservers between datacenters.<br />
<br />
For further information, please refer to the README inside the tarball or these threads on the memcached mailing list:<br />
<a href="http://blog.chris.de/exit.php?url_id=958&amp;entry_id=288"  onmouseover="window.status='http://lists.danga.com/pipermail/memcached/2007-April/003853.html';return true;" onmouseout="window.status='';return true;"  title="http://lists.danga.com/pipermail/memcached/2007-April/003853.html">http://lists.danga.com/pipermail/memcached/2007-April/003853.html</a><br />
<a href="http://blog.chris.de/exit.php?url_id=959&amp;entry_id=288"  onmouseover="window.status='http://lists.danga.com/pipermail/memcached/2007-April/003834.html';return true;" onmouseout="window.status='';return true;"  title="http://lists.danga.com/pipermail/memcached/2007-April/003834.html">http://lists.danga.com/pipermail/memcached/2007-April/003834.html</a><br />
 
            </div>
        </content>
        <dc:subject>consistent hashing</dc:subject>
<dc:subject>java</dc:subject>
<dc:subject>ketama</dc:subject>
<dc:subject>memcache</dc:subject>
<dc:subject>php</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/287-VLC-0.9.0.html" rel="alternate" title="VLC 0.9.0" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2007-03-07T13:02:24Z</published>
        <updated>2007-03-12T16:55:15Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=287</wfw:comment>
    
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=287</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/1-Tech-Net" label="Tech &amp; Net" term="Tech &amp; Net" />
    
        <id>http://blog.chris.de/archives/287-guid.html</id>
        <title type="html">VLC 0.9.0</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                "Good news everyone", looks like <a href="http://blog.chris.de/exit.php?url_id=956&amp;entry_id=287"  onmouseover="window.status='http://www.jbkempf.com/blog/post/2007/02/10/Qt4-Interface';return true;" onmouseout="window.status='';return true;"  title="VLC is going to ship with a Qt4 GUI in the future.">VLC is going to ship with a Qt4-based GUI in the future.</a> That means I can finally fix some issues with the clumsy VLC GUI, that annoyed me for so long on OS X.<br />
<br />
I would imagine VLC could become the Qt4-project with the largest userbase shortly. A larger userbase results in a better product (usually), helping Trolltech ironing out bugs and finding out what developers really need. I really hope more projects are going to pick up Qt4 in the long-term for exactly those reasons.<br />
<br />
...muesli 
            </div>
        </content>
        <dc:subject>gui</dc:subject>
<dc:subject>qt4</dc:subject>
<dc:subject>trolltech</dc:subject>
<dc:subject>vlc</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/283-Why-DOS-uses-backslashes-instead-of-slashes..html" rel="alternate" title="Why DOS uses backslashes instead of slashes." />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2007-02-12T09:42:00Z</published>
        <updated>2007-02-12T20:48:46Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=283</wfw:comment>
    
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=283</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/1-Tech-Net" label="Tech &amp; Net" term="Tech &amp; Net" />
    
        <id>http://blog.chris.de/archives/283-guid.html</id>
        <title type="html">Why DOS uses backslashes instead of slashes.</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <a href="http://blog.chris.de/exit.php?url_id=928&amp;entry_id=283"  onmouseover="window.status='http://blogs.msdn.com/larryosterman/archive/2005/06/24/432386.aspx';return true;" onmouseout="window.status='';return true;"  title="Larry Osterman">Larry Osterman</a> tells the entire story: simply because slashes were already used for parameters before DOS even knew what a path or a directory is. Nice read and a trip down memory lane. 
            </div>
        </content>
        <dc:subject>blackslash</dc:subject>
<dc:subject>dos</dc:subject>
<dc:subject>slash</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/282-Reminder-To-Self.html" rel="alternate" title="Reminder To Self" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2007-02-12T06:25:50Z</published>
        <updated>2007-02-12T06:25:50Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=282</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=282</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/1-Tech-Net" label="Tech &amp; Net" term="Tech &amp; Net" />
    
        <id>http://blog.chris.de/archives/282-guid.html</id>
        <title type="html">Reminder To Self</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                If someone should ever tell you about <strong>MySpace code</strong> again, he actually means <strong>HTML</strong>. Also try to teach him not to double-click on links.<br />
<br />
Just waiting for MyWeb 2.0 ... 
            </div>
        </content>
        <dc:subject>html</dc:subject>
<dc:subject>myspace</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/281-Let-there-be-snow!.html" rel="alternate" title="Let there be snow!" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2007-02-08T13:52:32Z</published>
        <updated>2012-05-09T22:06:41Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=281</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=281</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/2-The-third-place" label="The third place" term="The third place" />
    
        <id>http://blog.chris.de/archives/281-guid.html</id>
        <title type="html">Let there be snow!</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                It's snowing! First time I get to see that in London. And guess what? If you get to see snow only once in two years, then you're actually just as excited as you were as a little kid <img src="http://blog.chris.de/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> Maybe that's because I still am a little kid, though. Dunno.<br />
 
            </div>
        </content>
        <dc:subject>london</dc:subject>
<dc:subject>snow</dc:subject>

    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/280-Happy-New-Year.html" rel="alternate" title="Happy New Year" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2006-12-31T19:17:52Z</published>
        <updated>2006-12-31T19:17:52Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=280</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=280</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/5-KDE" label="KDE" term="KDE" />
    
        <id>http://blog.chris.de/archives/280-guid.html</id>
        <title type="html">Happy New Year</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Just wanted to wish everyone a Happy New Year. Keep on hacking and thank you all for your contributions to KDE this year. 2007 ought to be great <img src="http://blog.chris.de/templates/default/img/emoticons/laugh.png" alt=":-D" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Now go and party till dawn! 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://blog.chris.de/archives/278-Know-C++,-Maybe-Even-Love-Qt4.html" rel="alternate" title="Know C++, Maybe Even Love Qt4?" />
        <author>
            <name>muesli</name>
                    </author>
    
        <published>2006-11-14T22:38:12Z</published>
        <updated>2006-11-14T22:50:52Z</updated>
        <wfw:comment>http://blog.chris.de/wfwcomment.php?cid=278</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://blog.chris.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=278</wfw:commentRss>
    
            <category scheme="http://blog.chris.de/categories/10-Development" label="Development" term="Development" />
    
        <id>http://blog.chris.de/archives/278-guid.html</id>
        <title type="html">Know C++, Maybe Even Love Qt4?</title>
        <content type="xhtml" xml:base="http://blog.chris.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Someone out there looking for a new job opportunity? Enjoy accessing a huge music-library? Even more important: always wanted a red user-icon on Last.fm? <img src="http://blog.chris.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
<a href="http://blog.chris.de/exit.php?url_id=922&amp;entry_id=278"  onmouseover="window.status='http://www.last.fm/about/jobs/#job3';return true;" onmouseout="window.status='';return true;"  title="Work at Last.fm">There you go, start working at Last.fm as a C++ Developer.</a> You will be working on the Last.fm Client, a Qt4-driven piece of software for Windows, Linux and OS X. Want more info? Click the link. It's worth it. Oh, and it's fun.<br />
<br />
Now I wanna see you guys applying <img src="http://blog.chris.de/templates/default/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
cheers,<br />
muesli 
            </div>
        </content>
        
    </entry>

</feed>
