<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>sysdot</title>
	<atom:link href="http://sysdot.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sysdot.wordpress.com</link>
	<description></description>
	<lastBuildDate>Thu, 19 Jan 2012 18:53:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sysdot.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>sysdot</title>
		<link>http://sysdot.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sysdot.wordpress.com/osd.xml" title="sysdot" />
	<atom:link rel='hub' href='http://sysdot.wordpress.com/?pushpress=hub'/>
		<item>
		<title>JavaScript calendar</title>
		<link>http://sysdot.wordpress.com/2011/06/01/javascript-calendar/</link>
		<comments>http://sysdot.wordpress.com/2011/06/01/javascript-calendar/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 19:41:00 +0000</pubDate>
		<dc:creator>Richard Pearson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sysdot.wordpress.com/?p=91</guid>
		<description><![CDATA[I have added my JavaScript calendar control to this blog. Please feel free to use/edit/rewrite it. This is what my JavaScript calendar control looks like. Please download it and give it a go. Super fast date entry Point and click simplicity Operated with TAB and UP and DOWN keys No learning curve Full customizable No use of any JavaScript library (so its [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sysdot.wordpress.com&amp;blog=20148806&amp;post=91&amp;subd=sysdot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3 id="sites-page-title-header" align="left">I have added my JavaScript calendar control to this blog. Please feel free to use/edit/rewrite it.</h3>
<div id="sites-canvas-main">
<div id="sites-canvas-main-content">
<table cellspacing="0">
<tbody>
<tr>
<td>
<div dir="ltr">
<div>This is what my JavaScript calendar control looks like. Please <a href="https://sites.google.com/site/richardpearsondev/calendar-control">download</a> it and give it a go.</div>
<div>
<ul>
<li>Super fast date entry</li>
<li>Point and click simplicity</li>
<li>Operated with TAB and UP and DOWN keys</li>
<li>No learning curve</li>
<li>Full customizable</li>
<li>No use of any JavaScript library (so its lightning fast)</li>
</ul>
<p><a href="http://sysdot.files.wordpress.com/2011/06/calendarexample.jpg"><img class="alignnone size-full wp-image-118" title="calendarExample" src="http://sysdot.files.wordpress.com/2011/06/calendarexample.jpg?w=645" alt=""   /></a></p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sysdot.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sysdot.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sysdot.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sysdot.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sysdot.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sysdot.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sysdot.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sysdot.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sysdot.wordpress.com&amp;blog=20148806&amp;post=91&amp;subd=sysdot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sysdot.wordpress.com/2011/06/01/javascript-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6124740140d891364bae7175164f022c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">rpearsondev</media:title>
		</media:content>

		<media:content url="http://sysdot.files.wordpress.com/2011/06/calendarexample.jpg" medium="image">
			<media:title type="html">calendarExample</media:title>
		</media:content>
	</item>
		<item>
		<title>Making a simple audio synthesizer in C#</title>
		<link>http://sysdot.wordpress.com/2011/03/24/making-a-simple-audio-synthesizer-in-c/</link>
		<comments>http://sysdot.wordpress.com/2011/03/24/making-a-simple-audio-synthesizer-in-c/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 10:22:41 +0000</pubDate>
		<dc:creator>Richard Pearson</dc:creator>
				<category><![CDATA[prototypes]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[oscillator]]></category>
		<category><![CDATA[software synth]]></category>
		<category><![CDATA[synthesizer]]></category>

		<guid isPermaLink="false">http://sysdot.wordpress.com/?p=70</guid>
		<description><![CDATA[I have been into producing dance music for a while now and have always wondered how difficult it would be to make my own simple synthesizer. Turns out it not that difficult at all. I have created a very simple synthesizer in just one afternoon. How does a software synth work? Very similar to a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sysdot.wordpress.com&amp;blog=20148806&amp;post=70&amp;subd=sysdot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have been into producing dance music for a while now and have always wondered how difficult it would be to make my own simple synthesizer. Turns out it not that difficult at all. I have created a very simple synthesizer in just one afternoon.</p>
<h3>How does a software synth work?</h3>
<p>Very similar to a hardware synth, it works by creating and mixing waveforms before effecting them to get a desired sound.</p>
<h3>How do I create a waveform?</h3>
<p>Well you need to write some code that will produce a wave. The most common wave to produce is a sine wave. This sounds like a constant tone with no harmonics.</p>
<div class="wp-caption alignnone" style="width: 278px"><img title="Sine wave" src="http://static.electro-tech-online.com/imgcache/291-sine.gif" alt="This is what a sine wave looks like" width="268" height="167" /><p class="wp-caption-text">Sine wave</p></div>
<h3>Ok, so how do I make a sine wave in C#?</h3>
<p>Its actually pretty easy to make a sine wave in C#. It a matter of using the mathematical function Math.Sin() then sending in the angle (in radians). Here is an example of my Sine occilator in my program:</p>
<div id="noIframeDiv495d9a03-bc81-474c-a1d2-d25862cc2cb3" style="display:block;overflow:auto;margin:0;">
<div>
<pre>public class SineOccilator : SignWaveTest.IOccilator {

	private double _radiansPerCircle = Math.PI * 2;
	private double _currentFrequency = 2000;
	private double _sampleRate = 44100;

	public SineOccilator(double sampleRate) {
		_sampleRate = sampleRate;
	}

	public void SetFrequency(double value){
		_currentFrequency = value;
	}

	public double GetNext(int sampleNumberInSecond) {
		double samplesPerOccilation = (_sampleRate / _currentFrequency);
		double depthIntoOccilations = (sampleNumberInSecond % samplesPerOccilation) / samplesPerOccilation;
		return Math.Sin( depthIntoOccilations * _radiansPerCircle);
	}
}</pre>
</div>
<div><span style="color:#0000ff;"><br />
</span></div>
</div>
<p>All of the hard work is done in the GetNext method. The calling code tells the GetNext what sample (of the current second) that it wants and GetNext will return a number between 1 and -1.</p>
<p>This works by working out the &#8216;samplesPerOccilation&#8217; value, which is the basically &#8220;how many samples does one oscillation take at the defined frequency&#8221;</p>
<p>After working that out we can work out how far we would be through an oscillation by taking the remainder of the sampleNumberInSecond / samplesPerOccilation. Then making that a number between 0 &#8211; 1 by dividing that answer by samplesPerOccilation.</p>
<p>Now we just need to work out that the numeric value for the waveform at that point, this is as simple as using calling Math.Sin and passing in the (depthIntoOccilations * _radiansPerCircle).</p>
<p>So here is how you would call it:</p>
<div id="noIframeDiv93b0d088-6c84-4b6a-8508-df2dc2dcd951" style="display:block;overflow:auto;margin:0;">
<div>
<pre>List&lt;double&gt; data = new List&lt;double&gt;();

SquareOccilator o = new SquareOccilator(sampleRate);
SineOccilator j = new SineOccilator(sampleRate);
SawToothOccilator s = new SawToothOccilator(sampleRate);
RoyalSawToothOccilator rs = new RoyalSawToothOccilator(sampleRate);
SawToothOccilatorSteadyDetunable detunableOccilator = new SawToothOccilatorSteadyDetunable(sampleRate);
detunableOccilator.SetDetune(0.05);

s.SetFrequency(GetNoteFrequnecy.C);
for (int i = 0; i &lt; sampleRate * 2; i++) {
	data.Add(s.GetNext(i));
}
rs.SetFrequency(GetNoteFrequnecy.C);
for (int i = 0; i &lt; sampleRate * 2; i++) {
	data.Add(rs.GetNext(i));
}</pre>
</div>
</div>
<p>Create a list of doubles to store the resulting wave sample values, Set the frequency to a &#8220;C&#8221; then add 2 Seconds worth ( 2 X 441000 samples) to the list.</p>
<h3>How can I actually hear what it sounds like?</h3>
<p>The easiest way to hear it is to export the wave you have produced to a .wav file. It is reasonbly simple to create a .wav file just follow the <a title="WAVE PCM soundfile format" href="https://ccrma.stanford.edu/courses/422/projects/WaveFormat/">specification</a> here.</p>
<p>I found an implementation in the <a title="sixport" href="http://sixport.codeplex.com/license">Sixport Synth</a> project that I changed slightly for my needs. It simply writes a &#8220;test.wav&#8221; file to the bin directory of the application.</p>
<div id="noIframeDiv5adf85ba-c2c5-4b58-8afc-d340e45ea3d5" style="display:block;overflow:auto;margin:0;">
<div>
<pre>public static void SaveIntoStream(double[] sampleData, long sampleCount, int samplesPerSecond) {
	// Export
	FileStream stream = File.Create("test.wav");
	System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
	int RIFF = 0x46464952;
	int WAVE = 0x45564157;
	int formatChunkSize = 16;
	int headerSize = 8;
	int format = 0x20746D66;
	short formatType = 1;
	short tracks = 2;
	short bitsPerSample = 16;
	short frameSize = (short)(tracks * ((bitsPerSample + 7) / 8));
	int bytesPerSecond = samplesPerSecond * frameSize;
	int waveSize = 4;
	int data = 0x61746164;
	int samples = (int)sampleCount;
	int dataChunkSize = samples * frameSize;
	int fileSize = waveSize + headerSize + formatChunkSize + headerSize + dataChunkSize;
	writer.Write(RIFF);
	writer.Write(fileSize);
	writer.Write(WAVE);
	writer.Write(format);
	writer.Write(formatChunkSize);
	writer.Write(formatType);
	writer.Write(tracks);
	writer.Write(samplesPerSecond);
	writer.Write(bytesPerSecond);
	writer.Write(frameSize);
	writer.Write(bitsPerSample);
	writer.Write(data);
	writer.Write(dataChunkSize);

	double sample_l;
	short sl;
	for (int i = 0; i &lt; sampleCount; i++) {
		sample_l = sampleData[i] * 30000.0;
		if (sample_l &lt; -32767.0f) { sample_l = -32767.0f; }
		if (sample_l &gt; 32767.0f) { sample_l = 32767.0f; }
		sl = (short)sample_l;
		stream.WriteByte((byte)(sl &amp; 0xff));
		stream.WriteByte((byte)(sl &gt;&gt; 8));
		stream.WriteByte((byte)(sl &amp; 0xff));
		stream.WriteByte((byte)(sl &gt;&gt; 8));
	}
	stream.Close();
}</pre>
</div>
</div>
<h3>That&#8217;s pretty cool but I don&#8217;t think its going to win any awards</h3>
<p>Well, yeah it is a really very simple synth but using that principle and mixing it with other waveforms it is possible to make some awesome sounds.</p>
<p>The source can be <a title="Simple Synth" href="https://sites.google.com/site/richardpearsondev/c">downloaded here</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sysdot.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sysdot.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sysdot.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sysdot.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sysdot.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sysdot.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sysdot.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sysdot.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sysdot.wordpress.com&amp;blog=20148806&amp;post=70&amp;subd=sysdot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sysdot.wordpress.com/2011/03/24/making-a-simple-audio-synthesizer-in-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6124740140d891364bae7175164f022c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">rpearsondev</media:title>
		</media:content>

		<media:content url="http://static.electro-tech-online.com/imgcache/291-sine.gif" medium="image">
			<media:title type="html">Sine wave</media:title>
		</media:content>
	</item>
		<item>
		<title>Memcached Clients &#8211; Which ones best</title>
		<link>http://sysdot.wordpress.com/2011/03/08/memcached-clients-which-ones-best/</link>
		<comments>http://sysdot.wordpress.com/2011/03/08/memcached-clients-which-ones-best/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 13:12:44 +0000</pubDate>
		<dc:creator>Richard Pearson</dc:creator>
				<category><![CDATA[Evaluation]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[BeIT]]></category>
		<category><![CDATA[Enyim]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[Binary protocol]]></category>
		<category><![CDATA[Consistent hashing]]></category>
		<category><![CDATA[MemcachedClient]]></category>
		<category><![CDATA[Store]]></category>
		<category><![CDATA[Shared cache]]></category>
		<category><![CDATA[webfarm cache]]></category>

		<guid isPermaLink="false">http://sysdot.wordpress.com/?p=4</guid>
		<description><![CDATA[Firstly, what is Memcached and why would it be better than say using the inbuilt .net cache If you are running a your .NET website from a single server there is very little point in even considering Memcached. Memcached is &#8220;Free &#38; open source, high-performance, distributed memory object caching system&#8221; (http://memcached.org/). So if you are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sysdot.wordpress.com&amp;blog=20148806&amp;post=4&amp;subd=sysdot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Firstly, what is <a href="http://code.google.com/p/memcached/wiki/NewOverview">Memcached</a> and why would it be better than say using the inbuilt .net cache</p>
<p>If you are running a your .NET website from a single server there is very little point in even considering Memcached. Memcached is &#8220;Free &amp; open source, high-performance, distributed memory object caching system&#8221; (http://memcached.org/). So if you are running your site from many web servers it may be preferable to have a shared cache. If you have performance draining database calls originating from your web servers you may want the first web server to make the database call to cache the result in the shared cache, so the other web servers don&#8217;t need to make the same database call.</p>
<h3>How does it work</h3>
<p>Memcached is a distributed memory object cache, so how does it actually distribute?<br />
Effectively the Memcached server is simply a key value store so it is up to the client to pick the correct server to put the object on. The way it picks is to hash the key for the item you want to store and compute from that which server that item should be placed on. If you had two servers the split of items between the two should be approximately 50-50.</p>
<h2>Choosing a client</h2>
<p>There are two popular free clients to choose from BeIT and Enyim. I have quickly evaluated both and here are my findings:</p>
<h3><span style="text-decoration:underline;"><strong>BeIT</strong></span></h3>
<h4>Setting up the client</h4>
<p>Setting up the client in my app could not be easier. Firstly use that static Setup method on the MemcachedClient to set up the configuration for your Memcached client.</p>
<pre class="csharpcode"><span style="overflow:auto;font-family:Consolas, Monaco, 'Courier New', Courier, monospace;font-size:12px;line-height:18px;white-space:pre;">MemcachedClient.Setup(<span class="str">"MyCache"</span>, <span class="kwrd">new</span> <span class="kwrd">string</span>[] { <span class="str">"127.0.0.1:11211"</span> });</span></pre>
<p>The first parameter is the Identifier for your Memcache client configuration and the string array is the the addresses of the memcached servers. In this example I am using the loopback address because I am running the server on my local box.</p>
<p>Once you have created this you can use the static GetInstance method on the MemcachedClient to retrive an MemcachedClient instance for this configuration.</p>
<pre class="csharpcode" style="overflow:auto;">MemcachedClient cache = MemcachedClient.GetInstance(<span class="str">"MyCache"</span>);</pre>
<p>Alternatively, and probably more useful, you can put the Client settings in a configuration section in the your application configuration file, you can then use then use the MemcachedClient.GetInstance() method to get an MemcachedClient instance for the configuration specified.</p>
<h3>Using the client</h3>
<p>Once you have set up the client you are free to change the settings and use the methods to interact with you Memcached server.</p>
<pre class="csharpcode">cache.Set(<span class="str">"mystring"</span>, <span class="str">"helloMemcached"</span>, 4711);
            cache.SetCounter(<span class="str">"users"</span>, 0);
            cache.Increment(<span class="str">"users"</span>, 1);</pre>
<p><span style="font-size:15px;font-weight:bold;">Supported methods</span></p>
<ul>
<li><strong>Set &#8211; </strong> store this data</li>
<li><strong>Add &#8211; </strong> store this data, but only if the server doesn&#8217;t already<br />
hold data for this key</li>
<li><strong>Cas &#8211; </strong> Check And Store, store this data but<br />
only if no one else has updated since I last fetched it.</li>
<li><strong>replace &#8211; </strong> store this data, but only if the server does<br />
already hold data for this key</li>
<li><strong>append &#8211; </strong> add this data to an existing key after existing data</li>
<li><strong>prepend &#8211; </strong> add this data to an existing key before existing data</li>
<li><strong>Get(s) &#8211; </strong> The the value associated with a particular key. Gets will retrieve many</li>
<li><strong>SetCounter &#8211; </strong>Set a counter that can then be incremented with Increment and Decrement methods</li>
<li><strong>Increment &#8211; </strong> Will increment the value by the specified amount</li>
<li><strong>Decrement &#8211; </strong> Will decrement the the value by the specified amount</li>
<li><strong>Delete &#8211; </strong> Deletes an item</li>
<li><strong>FlushAll &#8211; </strong> Deletes all items on all servers</li>
<li><strong>Exists &#8211; </strong> Check to see if an item exists</li>
<li><strong>Stats &#8211; </strong> Get key/value stats for each server</li>
<li><strong>StatsByHost &#8211; </strong> Get key/value stats for each server</li>
</ul>
<h3><span style="text-decoration:underline;"><strong>Enyim</strong></span></h3>
<h4>Setting up the client</h4>
<p>Setting up the client is pretty easy in Enyim also. You can put the settings in the application configuration file saving you having to set up the configuration in code.</p>
<pre class="csharpcode" style="overflow:auto;">Enyim.Caching.Configuration.MemcachedClientConfiguration config = <span class="kwrd">new</span> Enyim.Caching.Configuration.MemcachedClientConfiguration();
config.Servers.Add(<span class="kwrd">new</span> System.Net.IPEndPoint(IPAddress.Loopback,11211));
config.Protocol = Enyim.Caching.Memcached.MemcachedProtocol.Text; <span class="rem">//you must set a protocol</span>
Enyim.Caching.MemcachedClient client = <span class="kwrd">new</span> Enyim.Caching.MemcachedClient(config);</pre>
<h3>Using the client</h3>
<pre class="csharpcode" style="overflow:auto;">client.Store(Enyim.Caching.Memcached.StoreMode.Add, <span class="str">"myItem"</span>, <span class="str">"myValue"</span>); //The various ways of storing things use a single method and an enum rather than 3 methods
client.Store(Enyim.Caching.Memcached.StoreMode.Replace, <span class="str">"myItem"</span>, <span class="str">"myValue"</span>);
client.Store(Enyim.Caching.Memcached.StoreMode.Set, <span class="str">"myItem"</span>, <span class="str">"myValue"</span>);</pre>
<h3>Supported methods</h3>
<ul>
<li><strong>Store &#8211; </strong>Stores the data specified under the specified key, takes an Enum that dictates if it is an Add/Replace/Set</li>
<li><strong>Cas &#8211; </strong>Check And Store, store this data but<br />
only if no one else has updated since it was last fetched</li>
<li><strong>Append &#8211; </strong>Add this data to an existing key after existing data</li>
<li><strong>Prepend &#8211; </strong>Add this data to an existing key before existing data</li>
<li><strong>Get &#8211; </strong>Gets the value associated with a particular key.</li>
<li><strong>Get&lt;T&gt;</strong> &#8211; Generic version of Get</li>
<li><strong>GetWithCas &#8211; </strong>Get the value associated with a particular key and will also return check and set value</li>
<li><strong>GetWithCas&lt;T&gt; &#8211; </strong>Get the value associated with a particular key and will also return check and set value</li>
<li><strong>TryGet </strong>- Tries to get an object from the cache, if it fails the output object is null</li>
<li><strong><strong>TryGetWithCas </strong></strong>- Tries to get an object from the cache, if it fails the output object is null</li>
<li><strong>PerformMultiGet</strong> &#8211; Gets many thing at once</li>
<li><strong>Increment &#8211; </strong>Will increment the value by the specified amount, you can specify a default if the key doesn&#8217;t already exist</li>
<li><strong>Decrement- </strong>Will decrement the the value by the specified amount, you can specify a default if the key doesn&#8217;t already exist</li>
<li><strong>Remove- </strong>Deletes an item</li>
<li><strong>FlushAll- </strong>Deletes all items on all servers</li>
<li><strong>Exists &#8211; </strong>Check to see if an item exists</li>
<li><strong>Stats &#8211; </strong>Get key/value stats for each server</li>
<li><strong>StatsByHost &#8211; </strong>Get key/value stats for each server</li>
</ul>
<h2>Feature comparison</h2>
<table>
<thead>
<tr>
<td></td>
<td><strong>Enyim</strong></td>
<td><strong>BeIT</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td>Config file configuration</td>
<td>yes</td>
<td>yes</td>
</tr>
<tr>
<td>Persistent connections</td>
<td>yes</td>
<td>yes</td>
</tr>
<tr>
<td>Generic get and set methods</td>
<td>yes</td>
<td>no</td>
</tr>
<tr>
<td>Supports <a href="http://code.google.com/p/memcached/wiki/NewProtocols">Binary protocol</a></td>
<td>yes</td>
<td>no</td>
</tr>
<tr>
<td>Supports <a href="http://code.google.com/p/memcached/wiki/SASLAuthProtocol">SASL</a></td>
<td>yes</td>
<td>no</td>
</tr>
<tr>
<td>Supports all the standard Memcached operations in the <a href="http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt">protocol</a></td>
<td>yes</td>
<td>yes</td>
</tr>
<tr>
<td>Uses <a href="http://msdn.microsoft.com/en-us/library/ty01x675(v=vs.85).aspx">.NET serialization</a></td>
<td>yes</td>
<td>yes</td>
</tr>
<tr>
<td>Consistent hashing</td>
<td>yes</td>
<td>yes</td>
</tr>
<tr>
<td>Compression (built-in)</td>
<td>no</td>
<td>yes</td>
</tr>
<tr>
<td>Logging and tracing</td>
<td>yes</td>
<td>yes</td>
</tr>
</tbody>
</table>
<h4>Conclusion</h4>
<p>Both work well. Enyim doesn&#8217;t have compression, but there is nothing stopping you using the .NET framework compression features. I think overall Enyim does have a richer feature set. Anecdotally I have heard that Enyim is faster, but that is likely to be due in part to it not compressing the objects before it sends them to the server. The support for the Binary protocol doesn&#8217;t mean that much to me, yes it will mean that less bytes need to be pushed down the pipe for the commands but I don&#8217;t think it will make a significant difference because most of the bytes (to be sent) are likely to be the bytes of the serialized object you wish to store. Both use the standard .NET Binary formatter so you can use the ISerializable interface on your types if you are worried about the shape of the type changing while old objects are still in the cache.</p>
<h4>Related Links</h4>
<ul>
<li> <a href="http://code.google.com/p/memcached/wiki/NewStart">All about Memcached</a></li>
<li><a href="http://code.google.com/p/beitmemcached/"> BeIT Client site</a></li>
<li><a href="http://memcached.enyim.com/"> Enyim Client site</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sysdot.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sysdot.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sysdot.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sysdot.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sysdot.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sysdot.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sysdot.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sysdot.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sysdot.wordpress.com&amp;blog=20148806&amp;post=4&amp;subd=sysdot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sysdot.wordpress.com/2011/03/08/memcached-clients-which-ones-best/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6124740140d891364bae7175164f022c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">rpearsondev</media:title>
		</media:content>
	</item>
	</channel>
</rss>
