<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sorted Bits</title>
	<atom:link href="http://www.sortedbits.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sortedbits.com</link>
	<description>objectiveC, C# and more interesting stuff</description>
	<lastBuildDate>Wed, 04 Jan 2012 10:11:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Post package disappearing (and showing up again)</title>
		<link>http://www.sortedbits.com/post-package-disappearing-and-showing-up-again/</link>
		<comments>http://www.sortedbits.com/post-package-disappearing-and-showing-up-again/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 08:17:05 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Personal stuff]]></category>

		<guid isPermaLink="false">http://www.sortedbits.com/?p=1650</guid>
		<description><![CDATA[My daughters birthday is coming up, she is turning 7 on January 7th. A great day for her and a time for us to start finding and buying gifts for her. For my wife this is a time of stress and worry. Everything needs to be arranged, [...]]]></description>
			<content:encoded><![CDATA[<p>My daughters birthday is coming up, she is turning 7 on January 7th. A great day for her and a time for us to start finding and buying gifts for her. For my wife this is a time of stress and worry. Everything needs to be arranged, from presents to a cake with candles.</p>
<p>Well, finding the presents did not cost us a lot of time. A new bag for school, some stuff for her new room and the touchscreen of her Nintendo DS was broken, so replacing that would also be an awesome present. After looking around on the internet, I (suffering from <a href="http://www.sortedbits.com/loving-the-specs-always/">this</a> again) decided it would be better to just order a new Nintendo 3DS. Her being a girl and all we looked where we could find the pink version, which were hard to find this close to the holidays. After a search we found one at a webshop, that actually had one in stock, YAY!</p>
<p>Ordered it, paid <a href="http://en.wikipedia.org/wiki/IDEAL">iDEAL</a> (instant payment from your bank account) and received a confirmation of my order within a couple of minutes. Success! The next day I received a confirmation that my order was packed and prepared for sending using the company <strong>GLS</strong>. I received a tracking code and everything seemed fine.</p>
<p>A day later, I was working till around 16:00 (4:00 PM) which meant I was home all day, but after that we had to go to one of nieces&#8217; birthday party, but the package was not delivered yet. I checked the tracking code online and it showed me the package was ready to be delivered, but that the chauffeur hadn&#8217;t reached my house yet. No worries there, because most of the transport companies just deliver the package to one of my neighbors when nobody answers the door.</p>
<p>An hour later, at the party, I check the tracking code again, eager to see if the package has been delivered.</p>
<p><a href="http://www.sortedbits.com/wp-content/uploads/2012/01/GLS-1.png" rel="wp-prettyPhoto[1650]"><img src="http://www.sortedbits.com/wp-content/uploads/2012/01/GLS-1.png" alt="" title="GLS-1" width="909" height="139" class="alignnone size-full wp-image-1663" /></a></p>
<p>Yay! The package has been delivered! It says &#8220;Aflevering&#8221; at &#8220;Laatste afhandeling&#8221;, which means that it has been delivered. In the column &#8220;Naam ontvanger&#8221; it says &#8220;RENE&#8221;, which means that the person accepting the package is called Rene. That worried me a bit, because I know all of my neighbors by name and none of them is called Rene, but I thought it could be the weird text-recognition thing they use when signing for the package. I am glad that we can actually see the signature of the person accepting the package.</p>
<p><a href="http://www.sortedbits.com/wp-content/uploads/2012/01/GLS-3.png" rel="wp-prettyPhoto[1650]"><img src="http://www.sortedbits.com/wp-content/uploads/2012/01/GLS-3.png" alt="" title="GLS-3" width="806" height="728" class="alignnone size-full wp-image-1665" /></a></p>
<p>Ok, it still says that it was accepted by someone called Rene and the signature, well, it&#8217;s a signature. So after we got home from the party, it was about 19:30 (7:30 PM) we thought we would find a note which would say at which house it was delivered instead of ours, but there was no note (crap). So I decided to go to our nearest neighbors first, to ask if they have received a package. After ringing a couple of doorbells and asking my neighbors if maybe they received anything I got a bit more worried. Asking anyone in the street would be a lot of doors to ring, so I decided to do a couple more and ask if they knew anyone in our street called Rene. Nope, no package to be found and no Rene lives in our street.</p>
<p>So that evening my wife decides to send an email to transport company, asking where our package is. The next morning I decided a shorter route would be to just give them a call. A very friendly woman on the phone told me she already read our email and she would call the chauffeur to ask where our package went. While I was on hold, she called the chauffeur and asked where he did leave the package, his answer was: &#8220;I don&#8217;t know anymore, maybe I&#8217;ll remember when I get back to their house&#8221;. Of course this person delivers a lot of packages each day, so not remembering everything is OK, but it seems weird to not register it in your system when you deliver a package to a different house when the recipient is not at home. He told the woman on the phone he would drive by my house to clear everything up.</p>
<p>About an hour later, my doorbell rings. The chauffeur was at the door, with a package in his hands! He told me that it was delivered at my neighbors house, where he just picked it up and took it to my house. Sure I am glad that the package was found, but that story is just weird. I talked to that neighbor the evening before and they didn&#8217;t receive any packages, I know all my neighbors pretty well and consider them trustworthy. Was the package indeed delivered to them or did the chauffeur make stuff up?</p>
<p>After I received the package, I received an email from the office of GLS, asking me if everything was cleared up. Of course, I got my package, but it all seems very strange. I am not really sure what is going on, but with all the stories of packages disappearing people tend to draw their own conclusions.</p>
<p>Would my package ever show up again if we didn&#8217;t call/email the company immediately?<br />
Where was the package, when they said it was delivered, but it wasn&#8217;t?<br />
Should a tracking system no keep track of a package until it was actually delivered to the recipient?</p>
<p>I don&#8217;t know the answers to these questions, but you really don&#8217;t want to know the answers I think of.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/post-package-disappearing-and-showing-up-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some useful Mac OSX tools</title>
		<link>http://www.sortedbits.com/some-useful-mac-osx-tools/</link>
		<comments>http://www.sortedbits.com/some-useful-mac-osx-tools/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 07:00:28 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1339</guid>
		<description><![CDATA[Cocoa JSON Editor A very nice tool for developers, which allows you to import/paste Json and easily edit it and export an object model which can be used in Xcode. $2.99 Link Dockview DockView adds an Aero Peek (Windows 7) functionality to your OSX dock. When you [...]]]></description>
			<content:encoded><![CDATA[<table class="software-table">
<tbody>
<tr>
<td valign="top" width="200"><strong>Cocoa JSON Editor</strong></td>
<td valign="top">A very nice tool for developers, which allows you to import/paste Json and easily edit it and export an object model which can be used in Xcode.</td>
<td style="text-align: center;" valign="top" width="50">$2.99</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://itunes.apple.com/nl/app/cocoa-json-editor/id442160773?mt=12">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>Dockview</strong></td>
<td valign="top">DockView adds an Aero Peek (Windows 7) functionality to your OSX dock. When you hover your mouse over your dock, you will see how many windows an application has open and you can select exactly which window you want to open, by clicking on the preview window.</td>
<td style="text-align: center;" valign="top" width="50">$7.99</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://kapeli.com/dockview/">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>NameChanger</strong></td>
<td valign="top">A very nice tool for renaming batches of files.</td>
<td style="text-align: center;" valign="top" width="50">free</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://www.mrrsoftware.com/MRRSoftware/NameChanger.html">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>Reeder for Mac OSX</strong></td>
<td valign="top">The best and most beautiful RSS reader for Mac OSX.</td>
<td style="text-align: center;" valign="top" width="50">$9.99</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://reederapp.com/mac/index">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>Sparrow</strong></td>
<td valign="top">Superb simple mail app</td>
<td style="text-align: center;" valign="top" width="50">$9.99</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://sparrowmailapp.com/">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>TotalFinder</strong></td>
<td valign="top">TotalFinder extends the normal Finder. It adds tabs and other very handy options to your Finder.</td>
<td style="text-align: center;" valign="top" width="50">$15</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://totalfinder.binaryage.com/">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>Transmit</strong></td>
<td valign="top">Best OSX FTP client ever!</td>
<td style="text-align: center;" valign="top" width="50">$34</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://panic.com/transmit">Link</a></td>
</tr>
<tr>
<td valign="top" width="200"><strong>Versions</strong></td>
<td valign="top">Superb tool for when you work with GitHub or any other Git versioning system.</td>
<td style="text-align: center;" valign="top" width="50">$39</td>
<td style="text-align: center;" valign="top" width="50"><a href="http://versionsapp.com">Link</a></td>
</tr>
</tbody>
</table>
<p>I will extend this list when I get more tools and experiences with them. If you have any tools I NEED to have, just post a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/some-useful-mac-osx-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Async downloading of data</title>
		<link>http://www.sortedbits.com/async-downloading-of-data/</link>
		<comments>http://www.sortedbits.com/async-downloading-of-data/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 08:07:49 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.sortedbits.com/?p=1573</guid>
		<description><![CDATA[This code shows you HOW to achieve something and it is not intended as a copy-paste solution. My post about using a NSURLConnection in a different thread has been read a lot. I made this post almost 3 years ago and I would like to show you [...]]]></description>
			<content:encoded><![CDATA[<div class="warning">
<div class="msg-box-icon pngfix">This code shows you HOW to achieve something and it is not intended as a copy-paste solution.</div>
</div>
<p>My post about using a <a href="http://www.sortedbits.com/nsurlconnection-in-its-own-thread">NSURLConnection in a different thread</a> has been read a lot. I made this post almost 3 years ago and I would like to show you how I would solve it nowadays. In the last 3 years I have learned a lot and the cocoa-touch framework evolved too.</p>
<p>Between that post and now I have been trying out frameworks that support async operations and after using <a href="http://allseeing-i.com/ASIHTTPRequest/">ASIHTTPRequest</a> for a long time, it was time to move on (the project was discontinued). After trying out several more, I came across <a href="https://github.com/lukeredpath/LRResty">LRResty</a>, which is a nice framework designed with <a href="http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html">code-blocks</a> in mind.</p>
<p>Here is a small example of a piece of code, which is taken directly form the <a href="http://projects.lukeredpath.co.uk/resty/documentation.html">LRResty documentation page</a>:</p>
<pre class="syntax c">
[[LRResty client] get:@&quot;http://www.example.com&quot;
            withBlock:^(LRRestyResponse *response) {

    if(response.status == 200) {
      NSLog(@&quot;Successful response %@&quot;, [response asString]);
    }
}];
</pre>
<p>This piece of code fetches the content of an URL (www.example.com) and when the response comes back, it checks if the response is OK (status code 200). When it is, it does a simple NSLog.</p>
<p>Here you can see the power of code-blocks already. You define the way it handles a responses directly when you do the request, in my opinion this keeps code clean and simple.</p>
<p>Now we can take this a step further and see what happens if we launch this in a new thread. For this example I am taking a piece of code of an actual library I was writing some time ago, it involves getting some data through the GitHub API, waiting for the response and then executing a certain piece of code, while this can be a bit overwhelming at first, it sure beats writing dozens of extra methods for each response.</p>
<p>Because we are going the be launching the request from another thread, we have to take <a href="http://en.wikipedia.org/wiki/Race_condition">race conditions</a> into account, this was a bug that hit me when I was first using code-blocks and multi-threading.</p>
<p>I created a method which can be called with a single NSDictionary as parameter, containing code-blocks and other stuff which it needs to perform the request. Because the GitHub API needs authentication also, I will also show how that works. The dictionary contains 3 objects with the keys &#8216;success&#8217;, &#8216;failed&#8217; and &#8216;url&#8217;.</p>
<p>The objects linked to the &#8216;success&#8217; and &#8216;failed&#8217; keys are code-blocks, I will show the contents later. </p>
<pre class="syntax c">
// This method performs the actual request and can be called in a different thread.
- (void) startRequest:(NSDictionary*) parameters
{
// Take the URL out of the dictionary and store it in a NSString object.
	NSString* url = [parameters objectForKey:@&quot;url&quot;];

// Get both the 'success' and 'failed' code-blocks from the dictionary
	void(^success)(LRRestyResponse*) = [parameters objectForKey:@&quot;success&quot;];
	void(^failed)(LRRestyResponse*) = [parameters objectForKey:@&quot;failed&quot;];

// Check if there already is a client active in this class and if not, check if authentication is set.
// If not, just raise an exception for now.
	if (client == nil &amp;&amp; self.username == nil &amp;&amp; self.password == nil)
	{
		[NSException raise:@&quot;Authentication missing&quot; format:@&quot;Username and/or password not set.&quot;];
	}

// No client is predefined and should be instantiated with the right credentials.
	if (client == nil)
		self.client = [LRResty authenticatedClientWithUsername:username password:password];

	NSLog(@&quot;Requesting data from: %@&quot;, url);

	[client get:url withBlock:^(LRRestyResponse* response) {
// Grab the headers of the response
		NSDictionary* dict = response.headers;

// Check if the request was finished without errors, if there were no errors, execute our 'success' block.
// Otherwise execute our 'failed' block.
// The response is a parameter for our success and failed block.
		if ([[dict objectForKey:@&quot;Status&quot;] isEqualToString:@&quot;200 OK&quot;])
		{
			success(response);
		}
		else
		{
			failed(response);
		}
	}];
}
</pre>
<p>With this method I can perform any request <strong>I</strong> want using a different thread. I am not a 100% sure this covers it in your cases (it probably doesn&#8217;t).</p>
<p>Now, lets see the code which we use to actually call the <strong>startRequest</strong> method:</p>
<pre class="syntax c">
// This gets a page of gists using the GitHub API. When it is succesfully done it executes a supplied code-block which
// extracts the gists from the response and returns an array. When it fails it will execute a code-block
// which will show an error in the application.
- (void) getGistsForPage:(int) page success:(void(^)(NSArray*)) succesBlock failed:(void(^)(void)) failedBlock
{
// Prepare the URL for the request.
	NSString* gistsUrl = [NSString stringWithFormat:@&quot;%@%@&quot;, self.githubUrl, @&quot;/gists&quot;];

// Here I define the code to be executed when the request is completed successfully. As you can see
// it grabs an array from the response and executes the supplied 'successBlock' with that array
// as a parameter.
	void (^success)(LRRestyResponse*) = ^(LRRestyResponse* response) {
		NSArray* array = [response.responseData arrayValue];
		succesBlock(array);
	};

// This is the code that will be executed when the request fails. It simply executes the
// supplied failedBlock code.
	void (^failed)(LRRestyResponse*) = ^(LRRestyResponse* response) {
		failedBlock();
	};

// Call the startRequest method, with a dictionary which contains our succesBlock, our failedBlock and the URL
// we created earlier in this method.
	[NSThread detachNewThreadSelector:@selector(startRequest:)
							 toTarget:self
						   withObject:[NSDictionary dictionaryWithObjectsAndKeys:
									   success, @&quot;success&quot;,
									   failed, @&quot;failed&quot;,
									   gistsUrl, @&quot;url&quot;,
									   nil]];
}
</pre>
<p>It&#8217;s pretty straightforward. Now just to be complete, I will post the code I use to call the <strong>getGistsForPage</strong> method too, so you get a complete picture:</p>
<pre class="syntax c">
// Instantiate our API class, containing the methods I described above
GitHubAPI* api = [[GitHubAPI alloc] initWithURL:@&quot;https://api.github.com&quot;];

// Make sure the username, password and delegate are set
api.password = @&quot;your_password&quot;;
api.username = @&quot;your_username&quot;;
api.delegate = self;

// Call the method, which uses the multi-threaded part.
[api getGistsForPage:0 success:^(NSArray* array) {
	NSLog(@&quot;Array count: %lu&quot;, [array count]);
} failed:^(void) {
}];
</pre>
<p>That&#8217;s it, there is nothing more to it. <strong>For me</strong> this works like a charm!</p>
<p>PS. You can still use a delegate with LRResty, instead of the code-blocks. You need to implement this method when using it this way:</p>
<pre class="syntax c">
- (void)restClient:(LRRestyClient *)client receivedResponse:(LRRestyResponse *)res;
{
  // do something with the response
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/async-downloading-of-data/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Illume</title>
		<link>http://www.sortedbits.com/illume/</link>
		<comments>http://www.sortedbits.com/illume/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 14:03:16 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[iOS Apps]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1487</guid>
		<description><![CDATA[Illume is not just a beautiful flashlight application for your iPhone 4 and iPhone 4S, but it offers a little more. You can also use Illume to send morse code messages. Just switch to the &#8216;morse mode&#8217; and type in your message and hit the play button. [...]]]></description>
			<content:encoded><![CDATA[<p>Illume is not just a beautiful flashlight application for your iPhone 4 and iPhone 4S, but it offers a little more.</p>
<p>You can also use Illume to send morse code messages. Just switch to the &#8216;morse mode&#8217; and type in your message and hit the play button.</p>

<a rel='wp-prettyPhoto[gallery]' href='http://www.sortedbits.com/illume/attachment/1/' title='1'><img width="150" height="150" src="http://www.sortedbits.com/wp-content/uploads/2011/12/1-150x150.png" class="attachment-thumbnail" alt="1" title="1" /></a>
<a rel='wp-prettyPhoto[gallery]' href='http://www.sortedbits.com/illume/attachment/2/' title='2'><img width="150" height="150" src="http://www.sortedbits.com/wp-content/uploads/2011/12/2-150x150.png" class="attachment-thumbnail" alt="2" title="2" /></a>
<a rel='wp-prettyPhoto[gallery]' href='http://www.sortedbits.com/illume/attachment/3/' title='3'><img width="150" height="150" src="http://www.sortedbits.com/wp-content/uploads/2011/12/3-150x150.png" class="attachment-thumbnail" alt="3" title="3" /></a>
<a rel='wp-prettyPhoto[gallery]' href='http://www.sortedbits.com/illume/attachment/4/' title='4'><img width="150" height="150" src="http://www.sortedbits.com/wp-content/uploads/2011/12/4-150x150.png" class="attachment-thumbnail" alt="4" title="4" /></a>

<p>Illume is available in the AppStore, click on the button below to download it!</p>
<p><a href="http://itunes.com/apps/Illume"><img src="http://www.sortedbits.com/AppStore.png" alt="" title="AppStore" class="alignnone size-full wp-image-1565" /></a></p>
<p><strong>What will be in v1.1:</strong></p>
<p>Receiving morse messages using the camera of the iPhone</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/illume/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A circle progressbar</title>
		<link>http://www.sortedbits.com/a-circle-progressbar/</link>
		<comments>http://www.sortedbits.com/a-circle-progressbar/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 07:35:55 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1458</guid>
		<description><![CDATA[For a small application I wanted to write, I wanted to make a progressbar that is a circle instead of a normal horizontal bar. I wanted to press a button, which is just a normal image and then have a circle go around it, showing the progress. [...]]]></description>
			<content:encoded><![CDATA[<p>For a small application I wanted to write, I wanted to make a progressbar that is a circle instead of a normal horizontal bar. I wanted to press a button, which is just a normal image and then have a circle go around it, showing the progress.</p>
<p><a href="http://www.wim.me/wp-content/uploads/2011/11/SBCircleProgressBar.png" rel="wp-prettyPhoto[1458]"><img src="http://www.wim.me/wp-content/uploads/2011/11/SBCircleProgressBar.png" alt="" title="SBCircleProgressBar" width="218" height="184" class="alignnone size-full wp-image-1459" /></a><br />
Like you can see above in the image, it just looks awesome!</p>
<p>To achieve this, I followed a couple of simple steps:</p>
<ul>
<li>Create a cool button image, where you want the circle progressbar to appear in</li>
<li>Find out the center and radius of the circle progressbar, you can do this either by using an image editor or just guess some values and tweak them when they are not completely perfect.</li>
<li>Create a class subclassing a UIView, which has 2 properties : MaxValue (the value that is the maximum you want to use) and Progress (what is the current progress of the progressbar)</li>
<li>Put it all on another View and change the Progress property when the progress of your process changes</li>
</ul>
<div id="gist-1378588" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="c1">//</span></div><div class='line' id='LC2'><span class="c1">//  SBCircleProgressBar.h</span></div><div class='line' id='LC3'><span class="c1">//</span></div><div class='line' id='LC4'><span class="c1">//  Created by Wim Haanstra on 17-11-11.</span></div><div class='line' id='LC5'><span class="c1">//  Copyright (c) 2011 Sorted Bits. All rights reserved.</span></div><div class='line' id='LC6'><span class="c1">//</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'><span class="k">@interface</span> <span class="nc">SBCircleProgressBar</span> : <span class="nc">UIView</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'><span class="c1">// The maximum value of the progressbar</span></div><div class='line' id='LC11'><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="kt">float</span> <span class="n">MaxValue</span><span class="p">;</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'><span class="c1">// The current value of the progressbar</span></div><div class='line' id='LC14'><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="kt">float</span> <span class="n">Progress</span><span class="p">;</span></div><div class='line' id='LC15'><br/></div><div class='line' id='LC16'><span class="k">@end</span></div><div class='line' id='LC17'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1378588/02f81ee6ecdb257e2d68313ff611cfe1a21132d9/SBCircleProgressBar.h" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1378588#file_sb_circle_progress_bar.h" style="float:right;margin-right:10px;color:#666">SBCircleProgressBar.h</a>
            <a href="https://gist.github.com/1378588">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="cp">//</span></div><div class='line' id='LC2'><span class="cp">//  SBCircleProgressBar.m</span></div><div class='line' id='LC3'><span class="cp">//</span></div><div class='line' id='LC4'><span class="cp">//  Created by Wim Haanstra on 17-11-11.</span></div><div class='line' id='LC5'><span class="cp">//  Copyright (c) 2011 Sorted Bits. All rights reserved.</span></div><div class='line' id='LC6'><span class="cp">//</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'><span class="cp">#import &quot;SBCircleProgressBar.h&quot;</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'><span class="k">@implementation</span> <span class="nc">SBCircleProgressBar</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'><span class="k">@synthesize</span> <span class="n">MaxValue</span><span class="p">,</span> <span class="n">Progress</span><span class="p">;</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'><span class="cp">// SOME VALUES YOU CAN CHANGE TO CHANGE THE BEHAVIOUR OF THE PROGRESSBAR</span></div><div class='line' id='LC15'><span class="cp">#define MAX_DEGREES	360</span></div><div class='line' id='LC16'><span class="cp">#define START_DEGREES	270</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'><span class="cp">// Define the radius that the circle needs</span></div><div class='line' id='LC19'><span class="cp">#define CIRCLE_RADIUS	27</span></div><div class='line' id='LC20'><br/></div><div class='line' id='LC21'><span class="k">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">initWithFrame:</span><span class="p">(</span><span class="n">CGRect</span><span class="p">)</span><span class="nv">frame</span></div><div class='line' id='LC22'><span class="p">{</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">self</span> <span class="o">=</span> <span class="p">[</span><span class="n">super</span> <span class="nl">initWithFrame:</span><span class="n">frame</span><span class="p">];</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">self</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC25'><br/></div><div class='line' id='LC26'>		<span class="n">self</span><span class="p">.</span><span class="n">backgroundColor</span> <span class="o">=</span> <span class="p">[</span><span class="n">UIColor</span> <span class="n">clearColor</span><span class="p">];</span></div><div class='line' id='LC27'>		<span class="n">self</span><span class="p">.</span><span class="n">userInteractionEnabled</span> <span class="o">=</span> <span class="n">NO</span><span class="p">;</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'>		<span class="c1">// Default values for the progress bar</span></div><div class='line' id='LC30'>		<span class="n">self</span><span class="p">.</span><span class="n">MaxValue</span> <span class="o">=</span> <span class="mf">100.0f</span><span class="p">;</span></div><div class='line' id='LC31'>		<span class="n">self</span><span class="p">.</span><span class="n">Progress</span> <span class="o">=</span> <span class="mf">0.0f</span><span class="p">;</span></div><div class='line' id='LC32'><br/></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">self</span><span class="p">;</span></div><div class='line' id='LC35'><span class="p">}</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">setMaxValue:</span><span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">_MaxValue</span></div><div class='line' id='LC38'><span class="p">{</span></div><div class='line' id='LC39'>	<span class="n">MaxValue</span> <span class="o">=</span> <span class="n">_MaxValue</span><span class="p">;</span></div><div class='line' id='LC40'>	<span class="p">[</span><span class="n">self</span> <span class="n">setNeedsDisplay</span><span class="p">];</span></div><div class='line' id='LC41'><span class="p">}</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'><span class="o">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nl">setProgress:</span><span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">_Progress</span></div><div class='line' id='LC44'><span class="p">{</span></div><div class='line' id='LC45'>	<span class="n">Progress</span> <span class="o">=</span> <span class="n">_Progress</span><span class="p">;</span></div><div class='line' id='LC46'>	<span class="p">[</span><span class="n">self</span> <span class="n">setNeedsDisplay</span><span class="p">];</span></div><div class='line' id='LC47'><span class="p">}</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'><span class="o">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nl">drawRect:</span><span class="p">(</span><span class="n">CGRect</span><span class="p">)</span><span class="n">rect</span></div><div class='line' id='LC50'><span class="p">{</span></div><div class='line' id='LC51'>	<span class="n">CGContextRef</span> <span class="n">context</span> <span class="o">=</span> <span class="n">UIGraphicsGetCurrentContext</span><span class="p">();</span> </div><div class='line' id='LC52'><br/></div><div class='line' id='LC53'>	<span class="c1">// Set the color of the circle to appear for the progressbar</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CGContextSetRGBStrokeColor</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="mf">0.341</span><span class="p">,</span> <span class="mf">0.635</span><span class="p">,</span> <span class="mf">0.961</span><span class="p">,</span> <span class="mf">0.6</span><span class="p">);</span> </div><div class='line' id='LC55'><br/></div><div class='line' id='LC56'>	<span class="c1">// Set the line width of the circle to appear</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CGContextSetLineWidth</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="mf">10.0</span><span class="p">);</span> </div><div class='line' id='LC58'><br/></div><div class='line' id='LC59'>	<span class="c1">// Calculate the middle of the circle</span></div><div class='line' id='LC60'>	<span class="n">CGPoint</span> <span class="n">circleCenter</span> <span class="o">=</span> <span class="n">CGPointMake</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">frame</span><span class="p">.</span><span class="n">size</span><span class="p">.</span><span class="n">width</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">frame</span><span class="p">.</span><span class="n">size</span><span class="p">.</span><span class="n">height</span> <span class="o">/</span> <span class="mi">2</span><span class="p">);</span></div><div class='line' id='LC61'><br/></div><div class='line' id='LC62'>	<span class="c1">// Calculate the amount of degrees the circle needs to have filled</span></div><div class='line' id='LC63'>	<span class="kt">float</span> <span class="n">currentDegrees</span> <span class="o">=</span> <span class="p">(</span><span class="n">MAX_DEGREES</span> <span class="o">/</span> <span class="n">self</span><span class="p">.</span><span class="n">MaxValue</span><span class="p">)</span> <span class="o">*</span> <span class="n">self</span><span class="p">.</span><span class="n">Progress</span><span class="p">;</span></div><div class='line' id='LC64'><br/></div><div class='line' id='LC65'>	<span class="c1">// Draw the ARC (part of the circle</span></div><div class='line' id='LC66'>	<span class="n">CGContextAddArc</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">circleCenter</span><span class="p">.</span><span class="n">x</span> <span class="p">,</span> <span class="n">circleCenter</span><span class="p">.</span><span class="n">y</span><span class="p">,</span> <span class="n">CIRCLE_RADIUS</span><span class="p">,</span> <span class="n">radians</span><span class="p">(</span><span class="n">START_DEGREES</span><span class="p">),</span> <span class="n">radians</span><span class="p">(</span><span class="n">START_DEGREES</span> <span class="o">+</span> <span class="n">currentDegrees</span><span class="p">),</span> <span class="mi">0</span><span class="p">);</span> </div><div class='line' id='LC67'>	<span class="n">CGContextStrokePath</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC68'><span class="p">}</span></div><div class='line' id='LC69'><br/></div><div class='line' id='LC70'><br/></div><div class='line' id='LC71'><span class="k">@end</span></div><div class='line' id='LC72'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1378588/d61583a8c37ed11fac3905e5eb6adee8050c1e11/SBCircleProgressBar.m" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1378588#file_sb_circle_progress_bar.m" style="float:right;margin-right:10px;color:#666">SBCircleProgressBar.m</a>
            <a href="https://gist.github.com/1378588">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>You need to put this view OVER the image of your button. Because we do this, we also set userInteractionEnabled otherwise you wouldn&#8217;t be able to push your button anymore, because the progressbar would catch all the touches.</p>
<p>The method &#8220;radians&#8221; you see in there, is a small inline method used to calculate degrees to radians:
</p>
<pre class="syntax c">
static inline float radians(double degrees) { return degrees * M_PI / 180; }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/a-circle-progressbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoedBewaard.nl</title>
		<link>http://www.sortedbits.com/goedbewaard-nl/</link>
		<comments>http://www.sortedbits.com/goedbewaard-nl/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 17:17:54 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1518</guid>
		<description><![CDATA[GoedBewaard.nl is a web application allowing you to store receipts, photos and other crucial information about your purchases. This way you make sure that when you need to claim warranty or need to talk to your insurance you got all the information you need. This site already [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.goedbewaard.nl" title="GoedBewaard.nl">GoedBewaard.nl</a> is a web application allowing you to store receipts, photos and other crucial information about your purchases. This way you make sure that when you need to claim warranty or need to talk to your insurance you got all the information you need.</p>
<p><center><a href="http://www.wim.me/wp-content/uploads/2011/10/GoedBewaard.nl_.png" rel="wp-prettyPhoto[1518]"><img src="http://www.wim.me/wp-content/uploads/2011/10/GoedBewaard.nl_.png" alt="" title="GoedBewaard.nl" width="500" class="alignnone size-full wp-image-1526" /></a></center></p>
<p>This site already won an innovation award given to us by SIDN. The site was also mentioned in several other media.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/goedbewaard-nl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are you a developer?</title>
		<link>http://www.sortedbits.com/are-you-a-developer/</link>
		<comments>http://www.sortedbits.com/are-you-a-developer/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 20:25:47 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1410</guid>
		<description><![CDATA[If you are a developer and you got a blog, let me know! I am always looking for blogs to exchange links. I will put it up on my blogroll and maybe link to interesting articles. You can post them here or just email them to me [...]]]></description>
			<content:encoded><![CDATA[<p>If you are a developer and you got a blog, let me know!</p>
<p>I am always looking for blogs to exchange links. I will put it up on my blogroll and maybe link to interesting articles.</p>
<p>You can post them here or just email them to me @ <a href="mailto:wim@wim.me">wim@wim.me</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/are-you-a-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loving the specs, always!</title>
		<link>http://www.sortedbits.com/loving-the-specs-always/</link>
		<comments>http://www.sortedbits.com/loving-the-specs-always/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 06:46:43 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Personal stuff]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1402</guid>
		<description><![CDATA[I&#8217;ll admit it, right here, right now: I love looking at specifications of products. I love comparing them, figuring out what is best to buy. This has it&#8217;s advantages, because you always know what you buy, but it makes the decision process a lot longer too. For [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll admit it, right here, right now: I love looking at specifications of products. I love comparing them, figuring out what is best to buy. This has it&#8217;s advantages, because you always know what you buy, but it makes the decision process a lot longer too.</p>
<p>For example my TV. When I bought it I knew exactly what it looked like. The front, sides AND the back. I had skipped through the device manual to see if certain stuff was possible and it had everything I was looking for. </p>
<p>The whole process of comparing and buying it took me over 4 days. Buying it was a breeze though, because all I had to do was to find the web-shop with a good prize/delivery-time.</p>
<p>Only sometimes this process really haunts me. </p>
<p>Last week my oldest daughter (of 6 years old) had to have one of her back tooth pulled and because this is a very painful process we promised her a gift once it was all over. My wife and I already talked it over, because she wanted a radio/cd player on her room for a long time now, so this was the perfect moment to get it for her.</p>
<p>Well this weekend we have been hunting the internet for a radio that she liked. First of all, it had to be pink (according to her), have a FM radio and a CD player. Finding something like that, for an affordable price (let&#8217;s say for around 50 euros) was easy.</p>
<p>Then it struck me again, I was not going to burn all her MP3&#8242;s to CD anymore. She already has a MP3 player (an old iPhone 3G, 16GB) with all of her favorite songs and it would make more sense to search for a radio that supported external sound sources. I also didn&#8217;t want her to have plastic speakers with it, because they sound like ****. Before I knew it I started looking for well-known brands that offer simple radio&#8217;s and HIFI sets for that kind of money and I was wiping that &#8220;it has to be pink&#8221; feature of the table.</p>
<p>Long story short. Why do I give so much about this stuff? Why does the radio of my daughter have to fit in my ideas of good equipment? Sure, a better product lasts longer, but we are not talking about a radio of hundreds of euros here. By the time she turns 10, she wants a new one anyway, because of how out-dated it is.</p>
<p>I just hope my wife takes care of this, before we have to install a 7.1 DTS certified receiver in her room, which has an iPhone integration unit and a touch-screen remote control.</p>
<p>PS. I do love it though, spec-comparing is really the best there is. After the purchase that all fades away and it&#8217;s just a normal TV/radio/phone/etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/loving-the-specs-always/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>string extension methods for C#</title>
		<link>http://www.sortedbits.com/string-extension-methods-for-c/</link>
		<comments>http://www.sortedbits.com/string-extension-methods-for-c/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 15:07:46 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1386</guid>
		<description><![CDATA[I admit, I have a big passion for writing useful extension methods in C#. I love how easy they make my job and keep me from writing code over and over again. There are some methods I use regularly and most of them apply to the string [...]]]></description>
			<content:encoded><![CDATA[<p>I admit, I have a big passion for writing useful extension methods in C#. I love how easy they make my job and keep me from writing code over and over again.</p>
<p>There are some methods I use regularly and most of them apply to the string class. So without further ado, here are some of my favorites.</p>
<p><strong>Validating</strong></p>
<div id="gist-1302057" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">public</span> <span class="k">static</span> <span class="kt">bool</span> <span class="nf">IsInt</span><span class="p">(</span><span class="k">this</span> <span class="kt">string</span> <span class="n">text</span><span class="p">)</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="n">integer</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">Int32</span><span class="p">.</span><span class="n">TryParse</span><span class="p">(</span><span class="n">text</span><span class="p">, autoload = </span> <span class="k">out</span> <span class="n">integer</span><span class="p">);</span></div><div class='line' id='LC5'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1302057/adcdf50c97766dec972e2f43b3176acc82e8cf40/gistfile1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1302057#file_gistfile1.cs" style="float:right;margin-right:10px;color:#666">gistfile1.cs</a>
            <a href="https://gist.github.com/1302057">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Of course you can create methods like this for all kind of types to support. This one just shows an example for the Int32 type. This way I can easily check if variables are correct. It is too bad that you can&#8217;t just parse the variable into the void so an extra variable is needed.</p>
<p>One other is an extension to make a valid filename from a string, like this:</p>
<div id="gist-1302069" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">static</span> <span class="k">public</span> <span class="kt">string</span> <span class="nf">ToValidFileName</span><span class="p">(</span><span class="k">this</span> <span class="kt">string</span> <span class="n">name</span><span class="p">)</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">string</span> <span class="n">invalidChars</span> <span class="p">=</span> <span class="n">Regex</span><span class="p">.</span><span class="n">Escape</span><span class="p">(</span><span class="k">new</span> <span class="kt">string</span><span class="p">(</span><span class="n">Path</span><span class="p">.</span><span class="n">GetInvalidFileNameChars</span><span class="p">()));</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">string</span> <span class="n">invalidReStr</span> <span class="p">=</span> <span class="kt">string</span><span class="p">.</span><span class="n">Format</span><span class="p">(</span><span class="s">@&quot;[{0}]+&quot;</span><span class="p">,</span> <span class="n">invalidChars</span><span class="p">);</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">Regex</span><span class="p">.</span><span class="n">Replace</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">invalidReStr</span><span class="p">,</span> <span class="s">&quot;_&quot;</span><span class="p">);</span></div><div class='line' id='LC6'><span class="p">}</span> </div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1302069/1b5ac77226be4d7acc7fcb8ff633592280a88e68/gistfile1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1302069#file_gistfile1.cs" style="float:right;margin-right:10px;color:#666">gistfile1.cs</a>
            <a href="https://gist.github.com/1302069">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p><strong>Hashing</strong><br />
There are several reasons to hash a string, I personally use it to store passwords. Nowadays I use SHA1 hashing because MD5 is not that secure.</p>
<div id="gist-1302074" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">public</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">ToSHA1</span><span class="p">(</span><span class="k">this</span> <span class="kt">string</span> <span class="n">text</span><span class="p">,</span> <span class="n">Encoding</span> <span class="n">enc</span><span class="p">)</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">byte</span><span class="p">[]</span> <span class="n">buffer</span> <span class="p">=</span> <span class="n">enc</span><span class="p">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">text</span><span class="p">);</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SHA1CryptoServiceProvider</span> <span class="n">cryptoTransformSHA1</span> <span class="p">=</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">new</span> <span class="nf">SHA1CryptoServiceProvider</span><span class="p">();</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">string</span> <span class="n">hash</span> <span class="p">=</span> <span class="n">BitConverter</span><span class="p">.</span><span class="n">ToString</span><span class="p">(</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">cryptoTransformSHA1</span><span class="p">.</span><span class="n">ComputeHash</span><span class="p">(</span><span class="n">buffer</span><span class="p">)).</span><span class="n">Replace</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">);</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">hash</span><span class="p">;</span></div><div class='line' id='LC9'><span class="p">}</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'><span class="k">public</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">ToMD5</span><span class="p">(</span><span class="k">this</span> <span class="kt">string</span> <span class="n">input</span><span class="p">)</span></div><div class='line' id='LC12'><span class="p">{</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">MD5</span> <span class="n">md5</span> <span class="p">=</span> <span class="n">System</span><span class="p">.</span><span class="n">Security</span><span class="p">.</span><span class="n">Cryptography</span><span class="p">.</span><span class="n">MD5</span><span class="p">.</span><span class="n">Create</span><span class="p">();</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">byte</span><span class="p">[]</span> <span class="n">inputBytes</span> <span class="p">=</span> <span class="n">System</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">Encoding</span><span class="p">.</span><span class="n">ASCII</span><span class="p">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">input</span><span class="p">);</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">byte</span><span class="p">[]</span> <span class="n">hash</span> <span class="p">=</span> <span class="n">md5</span><span class="p">.</span><span class="n">ComputeHash</span><span class="p">(</span><span class="n">inputBytes</span><span class="p">);</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">StringBuilder</span> <span class="n">sb</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">();</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="p">&amp;</span><span class="n">lt</span><span class="p">;</span> <span class="n">hash</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span> <span class="n">i</span><span class="p">++)</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sb</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="n">hash</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">ToString</span><span class="p">(&amp;</span><span class="n">quot</span><span class="p">;</span><span class="n">X2</span><span class="p">&amp;</span><span class="n">quot</span><span class="p">;));</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">sb</span><span class="p">.</span><span class="n">ToString</span><span class="p">();</span></div><div class='line' id='LC23'><span class="p">}</span> </div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1302074/c584d2cf6e41c8193469fa44be887893f862afd0/gistfile1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1302074#file_gistfile1.cs" style="float:right;margin-right:10px;color:#666">gistfile1.cs</a>
            <a href="https://gist.github.com/1302074">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p><strong>Encrypting/Decrypting</strong><br />
Encrypting and decrypting data is very important in one of my latest projects. For that reason I created these 2 extension methods. They encrypt and decrypt a string with a supplied passphrase. If there was no passphrase supplied, it will try to fetch one from the .config file.</p>
<div id="gist-1302080" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">public</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">Encrypt</span><span class="p">(</span><span class="k">this</span> <span class="kt">string</span> <span class="n">Message</span><span class="p">,</span> <span class="kt">string</span> <span class="n">passphrase</span> <span class="p">=</span> <span class="s">&quot;&quot;</span><span class="p">)</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>	<span class="k">if</span> <span class="p">(</span><span class="n">passphrase</span> <span class="p">==</span> <span class="s">&quot;&quot;</span><span class="p">)</span></div><div class='line' id='LC4'>		<span class="n">passphrase</span> <span class="p">=</span> <span class="n">ConfigurationManager</span><span class="p">.</span><span class="n">AppSettings</span><span class="p">[</span><span class="s">&quot;encrpytionPassphrase&quot;</span><span class="p">];</span></div><div class='line' id='LC5'><br/></div><div class='line' id='LC6'>	<span class="kt">byte</span><span class="p">[]</span> <span class="n">Results</span><span class="p">;</span></div><div class='line' id='LC7'>	<span class="n">System</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">UTF8Encoding</span> <span class="n">UTF8</span> <span class="p">=</span> <span class="k">new</span> <span class="n">System</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">UTF8Encoding</span><span class="p">();</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>	<span class="n">MD5CryptoServiceProvider</span> <span class="n">HashProvider</span> <span class="p">=</span> <span class="k">new</span> <span class="n">MD5CryptoServiceProvider</span><span class="p">();</span></div><div class='line' id='LC10'>	<span class="kt">byte</span><span class="p">[]</span> <span class="n">TDESKey</span> <span class="p">=</span> <span class="n">HashProvider</span><span class="p">.</span><span class="n">ComputeHash</span><span class="p">(</span><span class="n">UTF8</span><span class="p">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">passphrase</span><span class="p">));</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>	<span class="n">TripleDESCryptoServiceProvider</span> <span class="n">TDESAlgorithm</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TripleDESCryptoServiceProvider</span><span class="p">();</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>	<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Key</span> <span class="p">=</span> <span class="n">TDESKey</span><span class="p">;</span></div><div class='line' id='LC15'>	<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Mode</span> <span class="p">=</span> <span class="n">CipherMode</span><span class="p">.</span><span class="n">ECB</span><span class="p">;</span></div><div class='line' id='LC16'>	<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Padding</span> <span class="p">=</span> <span class="n">PaddingMode</span><span class="p">.</span><span class="n">PKCS7</span><span class="p">;</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'>	<span class="kt">byte</span><span class="p">[]</span> <span class="n">DataToEncrypt</span> <span class="p">=</span> <span class="n">UTF8</span><span class="p">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">Message</span><span class="p">);</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>	<span class="k">try</span></div><div class='line' id='LC21'>	<span class="p">{</span></div><div class='line' id='LC22'>		<span class="n">ICryptoTransform</span> <span class="n">Encryptor</span> <span class="p">=</span> <span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">CreateEncryptor</span><span class="p">();</span></div><div class='line' id='LC23'>		<span class="n">Results</span> <span class="p">=</span> <span class="n">Encryptor</span><span class="p">.</span><span class="n">TransformFinalBlock</span><span class="p">(</span><span class="n">DataToEncrypt</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">DataToEncrypt</span><span class="p">.</span><span class="n">Length</span><span class="p">);</span></div><div class='line' id='LC24'>	<span class="p">}</span></div><div class='line' id='LC25'>	<span class="k">finally</span></div><div class='line' id='LC26'>	<span class="p">{</span></div><div class='line' id='LC27'>		<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Clear</span><span class="p">();</span></div><div class='line' id='LC28'>		<span class="n">HashProvider</span><span class="p">.</span><span class="n">Clear</span><span class="p">();</span></div><div class='line' id='LC29'>	<span class="p">}</span></div><div class='line' id='LC30'><br/></div><div class='line' id='LC31'>	<span class="k">return</span> <span class="n">Convert</span><span class="p">.</span><span class="n">ToBase64String</span><span class="p">(</span><span class="n">Results</span><span class="p">);</span></div><div class='line' id='LC32'><span class="p">}</span></div><div class='line' id='LC33'><br/></div><div class='line' id='LC34'><span class="k">public</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">Decrypt</span><span class="p">(</span><span class="k">this</span> <span class="kt">string</span> <span class="n">Message</span><span class="p">,</span> <span class="kt">string</span> <span class="n">passphrase</span> <span class="p">=</span> <span class="s">&quot;&quot;</span><span class="p">)</span></div><div class='line' id='LC35'><span class="p">{</span></div><div class='line' id='LC36'>	<span class="k">if</span> <span class="p">(</span><span class="n">passphrase</span> <span class="p">==</span> <span class="s">&quot;&quot;</span><span class="p">)</span></div><div class='line' id='LC37'>		<span class="n">passphrase</span> <span class="p">=</span> <span class="n">ConfigurationManager</span><span class="p">.</span><span class="n">AppSettings</span><span class="p">[</span><span class="s">&quot;encrpytionPassphrase&quot;</span><span class="p">];</span></div><div class='line' id='LC38'>	<span class="k">if</span> <span class="p">(</span><span class="n">Message</span> <span class="p">==</span> <span class="kt">string</span><span class="p">.</span><span class="n">Empty</span><span class="p">)</span></div><div class='line' id='LC39'>		<span class="k">return</span> <span class="kt">string</span><span class="p">.</span><span class="n">Empty</span><span class="p">;</span></div><div class='line' id='LC40'><br/></div><div class='line' id='LC41'>	<span class="kt">byte</span><span class="p">[]</span> <span class="n">Results</span><span class="p">;</span></div><div class='line' id='LC42'>	<span class="n">System</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">UTF8Encoding</span> <span class="n">UTF8</span> <span class="p">=</span> <span class="k">new</span> <span class="n">System</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">UTF8Encoding</span><span class="p">();</span></div><div class='line' id='LC43'><br/></div><div class='line' id='LC44'>	<span class="n">MD5CryptoServiceProvider</span> <span class="n">HashProvider</span> <span class="p">=</span> <span class="k">new</span> <span class="n">MD5CryptoServiceProvider</span><span class="p">();</span></div><div class='line' id='LC45'>	<span class="kt">byte</span><span class="p">[]</span> <span class="n">TDESKey</span> <span class="p">=</span> <span class="n">HashProvider</span><span class="p">.</span><span class="n">ComputeHash</span><span class="p">(</span><span class="n">UTF8</span><span class="p">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">passphrase</span><span class="p">));</span></div><div class='line' id='LC46'><br/></div><div class='line' id='LC47'>	<span class="n">TripleDESCryptoServiceProvider</span> <span class="n">TDESAlgorithm</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TripleDESCryptoServiceProvider</span><span class="p">();</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'>	<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Key</span> <span class="p">=</span> <span class="n">TDESKey</span><span class="p">;</span></div><div class='line' id='LC50'>	<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Mode</span> <span class="p">=</span> <span class="n">CipherMode</span><span class="p">.</span><span class="n">ECB</span><span class="p">;</span></div><div class='line' id='LC51'>	<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Padding</span> <span class="p">=</span> <span class="n">PaddingMode</span><span class="p">.</span><span class="n">PKCS7</span><span class="p">;</span></div><div class='line' id='LC52'><br/></div><div class='line' id='LC53'>	<span class="kt">byte</span><span class="p">[]</span> <span class="n">DataToDecrypt</span> <span class="p">=</span> <span class="n">Convert</span><span class="p">.</span><span class="n">FromBase64String</span><span class="p">(</span><span class="n">Message</span><span class="p">);</span></div><div class='line' id='LC54'><br/></div><div class='line' id='LC55'>	<span class="k">try</span></div><div class='line' id='LC56'>	<span class="p">{</span></div><div class='line' id='LC57'>		<span class="n">ICryptoTransform</span> <span class="n">Decryptor</span> <span class="p">=</span> <span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">CreateDecryptor</span><span class="p">();</span></div><div class='line' id='LC58'>		<span class="n">Results</span> <span class="p">=</span> <span class="n">Decryptor</span><span class="p">.</span><span class="n">TransformFinalBlock</span><span class="p">(</span><span class="n">DataToDecrypt</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">DataToDecrypt</span><span class="p">.</span><span class="n">Length</span><span class="p">);</span></div><div class='line' id='LC59'>	<span class="p">}</span></div><div class='line' id='LC60'>	<span class="k">catch</span></div><div class='line' id='LC61'>	<span class="p">{</span></div><div class='line' id='LC62'>		<span class="n">Results</span> <span class="p">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="p">[</span><span class="m">0</span><span class="p">];</span></div><div class='line' id='LC63'>	<span class="p">}</span></div><div class='line' id='LC64'>	<span class="k">finally</span></div><div class='line' id='LC65'>	<span class="p">{</span></div><div class='line' id='LC66'>		<span class="n">TDESAlgorithm</span><span class="p">.</span><span class="n">Clear</span><span class="p">();</span></div><div class='line' id='LC67'>		<span class="n">HashProvider</span><span class="p">.</span><span class="n">Clear</span><span class="p">();</span></div><div class='line' id='LC68'>	<span class="p">}</span></div><div class='line' id='LC69'><br/></div><div class='line' id='LC70'>	<span class="k">return</span> <span class="n">UTF8</span><span class="p">.</span><span class="n">GetString</span><span class="p">(</span><span class="n">Results</span><span class="p">);</span></div><div class='line' id='LC71'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1302080/d9b4a9b28870fac5d7b116b901b307eee68a1f68/gistfile1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1302080#file_gistfile1.cs" style="float:right;margin-right:10px;color:#666">gistfile1.cs</a>
            <a href="https://gist.github.com/1302080">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/string-extension-methods-for-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slide Navigator</title>
		<link>http://www.sortedbits.com/slide-navigator/</link>
		<comments>http://www.sortedbits.com/slide-navigator/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 20:46:00 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[iOS Components]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.wim.me/?p=1540</guid>
		<description><![CDATA[The last weeks I have been working on a new iOS control. I call it the SlideNavigator control and it&#8217;s purpose is to replicate the functionality of the Twitter for iPad navigation. I am aware that there are other companies doing the same, but my experience with [...]]]></description>
			<content:encoded><![CDATA[<p>The last weeks I have been working on a new iOS control. I call it the SlideNavigator control and it&#8217;s purpose is to replicate the functionality of the Twitter for iPad navigation.</p>
<p>I am aware that there are other companies doing the same, but my experience with them hasn&#8217;t been that good. Most of them lack features, act nervously when trying to scroll or other defects.</p>
<p>So we thought it was time to create something ourselves and make it available. What can our control do, I hear you ask (well not really, it&#8217;s the internet, we don&#8217;t really hear you), well here are the features:</p>
<ul>
<li>Add ViewControllers to the control without much changes to them. All you need are about 3 lines of code for the base functionality to work.</li>
<li>Lots of configurable options, don&#8217;t like shadows? Turn the off. Want to make them animate faster/slower? Just change the duration, etc etc.</li>
<li>Notifications: whatever happens, a notification can be send for it. If a view is moved, you can receive a notification for that. A view barely visible? Notification. Etc etc.</li>
<li>Disable the sliding gesture on a viewcontroller: When you view expects a sliding gesture, but our control is stealing it, you can turn it off for that view controller</li>
</ul>
<p>Here is a short movie showing the default functionality of the control:</p>
<p><center><iframe width="560" height="345" src="http://www.youtube.com/embed/7k3Rv-ofTGA" frameborder="0" allowfullscreen></iframe><br />
(performance seems less smooth then in real life, recording software or something, not sure)</center></p>
<p>So what makes our controls better then the other ones?</p>
<ul>
<li>When you buy something from us, we take support seriously. Depending on the type of license you buy, you get either forum support, email support or within 24 hour email support. This because we know that you can&#8217;t wait 2 weeks to get an answer (or in some of our experiences more than 2 months) to your questions.</li>
<li>The cheapest option is to just buy the compiled control, but you can also buy the source code, which makes it easier for you to customize anything you want. </li>
<li><a href="https://github.com/depl0y/Slide-Navigator-Demo">Try before you buy</a>, you can just download a free version of the component to see if it works like you want to.</li>
<li>We take coding seriously, so we document our code.</li>
<li>Full support for upcoming iOS releases, we test our controls on the latest iOS releases available too.</li>
</ul>
<p>Currently the control is already available for purchase through the links below, but is also going through some test phases. When purchases are made, we will notify you when a new version is available for download and upgrades for the 1.x releases are free for all users.</p>
<div class="one_fourth"> <div class="custom" style="background:-moz-linear-gradient(center top , #FFFFFF, #EEEEEE) repeat scroll 0 0 transparent;
					       background: -webkit-gradient(linear, center top, center bottom, from(#FFFFFF), to(#EEEEEE));
					       margin-left:0 !important;
					       margin-right:0 !important;
					       border:1px solid #BBBBBB;
					       background-color: #EEEEEE;
					       width:100%;
					       color:#333333;"><div class="inner-padding">
<div style="text-align: center;">
<h4 style="margin-bottom: 5px;">TRIAL</h4>
<h5 style="margin-bottom: 15px;"><span style="font-size: 34px;">free</span></h5>
</p></div>
<p>    A version for you to try, contains a nice popup on each run. This contains the following:<br />

<ul class="list-1">
<li>Compiled control</li>
<li>Annoying popup
<li>
<li><a href="http://idea.informer.com/users/SortedBits/">Access to forums</a></li>
</ul>
<p>    Download it below..<br />

<div style="text-align: center;"><a class="small-dark-button" href="https://github.com/depl0y/Slide-Navigator-Demo" title="GitHub" title="GitHub"><span>GitHub</span></a></div>
</div></div>
</div> <div class="one_fourth"><div class="custom" style="background:-moz-linear-gradient(center top , #FFFFFF, #EEEEEE) repeat scroll 0 0 transparent;
					       background: -webkit-gradient(linear, center top, center bottom, from(#FFFFFF), to(#EEEEEE));
					       margin-left:0 !important;
					       margin-right:0 !important;
					       border:1px solid #BBBBBB;
					       background-color: #EEEEEE;
					       width:100%;
					       color:#333333;"><div class="inner-padding">
<div style="text-align: center;">
<h4 style="margin-bottom: 5px;">COMPILED</h4>
<h5 style="margin-bottom: 15px;"><span style="font-size: 34px;">$29</span></h5>
</p></div>
<p>    For the enthusiast, which contains the following options:<br />

<ul class="list-1">
<li>Compiled control</li>
<li><a href="http://idea.informer.com/users/SortedBits/">Access to forums</a></li>
</ul>
<p>    Use the button below to buy it.
<div style="text-align: center;"><a class="small-dark-button" href="https://sites.fastspring.com/sortedbits/instant/slidenavigator" title="Buy Now"><span>Buy Now</span></a></div>
</div></div>
</div> <div class="one_fourth"><div class="custom" style="background:-moz-linear-gradient(center top , #FFFFFF, #EEEEEE) repeat scroll 0 0 transparent;
					       background: -webkit-gradient(linear, center top, center bottom, from(#FFFFFF), to(#EEEEEE));
					       margin-left:0 !important;
					       margin-right:0 !important;
					       border:1px solid #BBBBBB;
					       background-color: #EEEEEE;
					       width:100%;
					       color:#333333;"><div class="inner-padding">
<div style="text-align: center;">
<h4 style="margin-bottom: 5px;">SOURCE CODE</h4>
<h5 style="margin-bottom: 15px;"><span style="font-size: 34px;">$89</span></h5>
</p></div>
<p>    When you like tweaking code and want to make your own versions<br />

<ul class="list-1">
<li>Compiled control</li>
<li>Source code</li>
<li><a href="http://idea.informer.com/users/SortedBits/">Access to forums</a></li>
</ul>
<p>    Use the button below to buy it.
<div style="text-align: center;"><a class="small-dark-button" href="https://sites.fastspring.com/sortedbits/instant/slidenavigator-sources" title="Buy Now"><span>Buy Now</span></a></div>
</div></div></div> <div class="one_fourth last_column"><div class="custom" style="background:-moz-linear-gradient(center top , #FFFFFF, #EEEEEE) repeat scroll 0 0 transparent;
					       background: -webkit-gradient(linear, center top, center bottom, from(#FFFFFF), to(#EEEEEE));
					       margin-left:0 !important;
					       margin-right:0 !important;
					       border:1px solid #BBBBBB;
					       background-color: #EEEEEE;
					       width:100%;
					       color:#333333;"><div class="inner-padding">
<div style="text-align: center;">
<h4 style="margin-bottom: 5px;">SUPPORTED</h4>
<h5 style="margin-bottom: 15px;"><span style="font-size: 34px;">$199</span></h5>
</p></div>
<p>    For corporations
<ul class="list-1">
<li>Compiled control</li>
<li>Source code</li>
<li>24hr email support</li>
<li><a href="http://idea.informer.com/users/SortedBits/">Access to forums</a></li>
</ul>
<p>    Use the button below to buy it.
<div style="text-align: center;"><a class="small-dark-button" href="https://sites.fastspring.com/sortedbits/instant/slidenavigator-24hours" title="Buy Now"><span>Buy Now</span></a></div>
</div></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/slide-navigator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

