<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>muesli's Blog - Development</title>
    <link>http://blog.chris.de/</link>
    <description></description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.6-alpha2 - http://www.s9y.org/</generator>
    <pubDate>Thu, 05 Feb 2009 03:53:35 GMT</pubDate>

    <image>
        <url>http://blog.chris.de/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: muesli's Blog - Development - </title>
        <link>http://blog.chris.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Updating Web 2.0 Profiles Really Really Sucks!</title>
    <link>http://blog.chris.de/archives/297-Updating-Web-2.0-Profiles-Really-Really-Sucks!.html</link>
            <category>Development</category>
    
    <comments>http://blog.chris.de/archives/297-Updating-Web-2.0-Profiles-Really-Really-Sucks!.html#comments</comments>
    <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=2.0&amp;type=comments&amp;cid=297</wfw:commentRss>
    

    <author>nospam@example.com (muesli)</author>
    <content:encoded>
    Don&#039;t you hate it? You&#039;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&#039;t stand your favorite movie anymore? There you go again. I don&#039;t even know how many websites I&#039;ve signed up for now offer a twitter-like status update that I can&#039;t be bothered to use.&lt;br /&gt;
&lt;br /&gt;
I&#039;m kinda fed up with it.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t want anyone to interfere with your core business, right?&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
(I&#039;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&#039;t really help anyone, though.)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update:&lt;/strong&gt; It seems OpenID itself already supports avatar syndication. Read more about it &lt;a href=&quot;http://blog.chris.de/exit.php?url_id=963&amp;amp;entry_id=297&quot;  onmouseover=&quot;window.status=&#039;http://factoryjoe.com/blog/2007/04/21/raising-the-standard-for-avatars/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Raising the standard for avatars&quot;&gt;here&lt;/a&gt;. (Thanks to &lt;a href=&quot;http://blog.chris.de/exit.php?url_id=964&amp;amp;entry_id=297&quot;  onmouseover=&quot;window.status=&#039;http://julianstahnke.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Julian Stahnke&quot;&gt;Julian Stahnke&lt;/a&gt; for the link) 
    </content:encoded>

    <pubDate>Wed, 04 Feb 2009 08:11:41 -0500</pubDate>
    <guid isPermaLink="false">http://blog.chris.de/archives/297-guid.html</guid>
    <category>api</category>
<category>data</category>
<category>import</category>
<category>metadata</category>
<category>profile</category>
<category>web 2.0</category>
<category>xml</category>

</item>
<item>
    <title>libketama - a consistent hashing algo for memcache clients</title>
    <link>http://blog.chris.de/archives/288-libketama-a-consistent-hashing-algo-for-memcache-clients.html</link>
            <category>Development</category>
    
    <comments>http://blog.chris.de/archives/288-libketama-a-consistent-hashing-algo-for-memcache-clients.html#comments</comments>
    <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=2.0&amp;type=comments&amp;cid=288</wfw:commentRss>
    

    <author>nospam@example.com (muesli)</author>
    <content:encoded>
    We wrote ketama to replace how our memcached clients mapped keys to servers. Previously, clients mapped keys-&gt;servers like this:&lt;br /&gt;
 &lt;br /&gt;
 server = serverlist[hash(key)%serverlist.length];&lt;br /&gt;
 &lt;br /&gt;
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 &lt;img src=&quot;http://blog.chris.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
 &lt;br /&gt;
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.&lt;br /&gt;
 &lt;br /&gt;
Here&#039;s how it works:&lt;br /&gt;
 &lt;br /&gt;
 - Take your list of servers (eg: 1.2.3.4:11211, 5.6.7.8:11211, 9.8.7.6:11211)&lt;br /&gt;
 - Hash each server string to several (100-200) unsigned ints&lt;br /&gt;
 - Conceptually, these numbers are placed on a circle called the continuum. (imagine a clock face that goes from 0 to 2^32)&lt;br /&gt;
 - 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.&lt;br /&gt;
 - To map a key-&gt;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.&lt;br /&gt;
 - 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.&lt;br /&gt;
 &lt;br /&gt;
If you then add or remove a server from the list, only a small proportion of keys end up mapping to different servers.&lt;br /&gt;
 &lt;br /&gt;
The majority of the code is a C library (libketama) and a PHP4 extension that wraps it. I&#039;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)&lt;br /&gt;
 &lt;br /&gt;
&lt;a href=&quot;http://blog.chris.de/exit.php?url_id=957&amp;amp;entry_id=288&quot;  onmouseover=&quot;window.status=&#039;http://static.last.fm/ketama/ketama-0.1.1.tar.bz2&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://static.last.fm/ketama/ketama-0.1.1.tar.bz2&quot;&gt;http://static.last.fm/ketama/ketama-0.1.1.tar.bz2&lt;/a&gt;&lt;br /&gt;
 &lt;br /&gt;
We&#039;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.&lt;br /&gt;
&lt;br /&gt;
For further information, please refer to the README inside the tarball or these threads on the memcached mailing list:&lt;br /&gt;
&lt;a href=&quot;http://blog.chris.de/exit.php?url_id=958&amp;amp;entry_id=288&quot;  onmouseover=&quot;window.status=&#039;http://lists.danga.com/pipermail/memcached/2007-April/003853.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://lists.danga.com/pipermail/memcached/2007-April/003853.html&quot;&gt;http://lists.danga.com/pipermail/memcached/2007-April/003853.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.chris.de/exit.php?url_id=959&amp;amp;entry_id=288&quot;  onmouseover=&quot;window.status=&#039;http://lists.danga.com/pipermail/memcached/2007-April/003834.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;http://lists.danga.com/pipermail/memcached/2007-April/003834.html&quot;&gt;http://lists.danga.com/pipermail/memcached/2007-April/003834.html&lt;/a&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 11 Apr 2007 05:39:59 -0400</pubDate>
    <guid isPermaLink="false">http://blog.chris.de/archives/288-guid.html</guid>
    <category>consistent hashing</category>
<category>java</category>
<category>ketama</category>
<category>memcache</category>
<category>php</category>

</item>
<item>
    <title>Know C++, Maybe Even Love Qt4?</title>
    <link>http://blog.chris.de/archives/278-Know-C++,-Maybe-Even-Love-Qt4.html</link>
            <category>Development</category>
    
    <comments>http://blog.chris.de/archives/278-Know-C++,-Maybe-Even-Love-Qt4.html#comments</comments>
    <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=2.0&amp;type=comments&amp;cid=278</wfw:commentRss>
    

    <author>nospam@example.com (muesli)</author>
    <content:encoded>
    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? &lt;img src=&quot;http://blog.chris.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blog.chris.de/exit.php?url_id=922&amp;amp;entry_id=278&quot;  onmouseover=&quot;window.status=&#039;http://www.last.fm/about/jobs/#job3&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;Work at Last.fm&quot;&gt;There you go, start working at Last.fm as a C++ Developer.&lt;/a&gt; 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&#039;s worth it. Oh, and it&#039;s fun.&lt;br /&gt;
&lt;br /&gt;
Now I wanna see you guys applying &lt;img src=&quot;http://blog.chris.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
cheers,&lt;br /&gt;
muesli 
    </content:encoded>

    <pubDate>Tue, 14 Nov 2006 17:38:12 -0500</pubDate>
    <guid isPermaLink="false">http://blog.chris.de/archives/278-guid.html</guid>
    
</item>

</channel>
</rss>