<?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 &#187; Snippets</title>
	<atom:link href="http://www.sortedbits.com/category/snippets/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>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>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>Placing curved text on an UIImage</title>
		<link>http://www.sortedbits.com/placing-curved-text-on-an-uiimage/</link>
		<comments>http://www.sortedbits.com/placing-curved-text-on-an-uiimage/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 10:26:51 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[circle]]></category>
		<category><![CDATA[cocoa-touch]]></category>
		<category><![CDATA[curve]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[objectivec]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://www.wimhaanstra.com/?p=1210</guid>
		<description><![CDATA[For a project I am doing for a client, I needed to layout text around a circle in objective-C. I spend a couple of hours searching the internet for this, but somehow when people succeed in doing this, they don&#8217;t post their solution online. So, I made [...]]]></description>
			<content:encoded><![CDATA[<p>For a project I am doing for a client, I needed to layout text around a circle in objective-C. I spend a couple of hours searching the internet for this, but somehow when people succeed in doing this, they don&#8217;t post their solution online.</p>
<p>So, I made an array of NSString objects that I wanted to lay out, around that circle.</p>
<div id="gist-1302242" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="n">NSArray</span><span class="o">*</span> <span class="n">sections</span> <span class="o">=</span> <span class="p">[[</span><span class="n">NSArray</span> <span class="n">alloc</span><span class="p">]</span> <span class="nl">initWithObjects:</span><span class="s">@&quot;text1&quot;</span><span class="p">,</span> <span class="s">@&quot;text2&quot;</span><span class="p">,</span> <span class="s">@&quot;text3&quot;</span><span class="p">,</span> <span class="s">@&quot;text4&quot;</span><span class="p">,</span> <span class="nb">nil</span><span class="p">];</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="k">-</span> <span class="p">(</span><span class="n">UIImage</span><span class="o">*</span><span class="p">)</span> <span class="nf">createMenuRingWithFrame:</span><span class="p">(</span><span class="n">CGRect</span><span class="p">)</span><span class="nv">frame</span></div><div class='line' id='LC4'><span class="p">{</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// First fix the frame to make sure it uses the right scaling (iPhone 4 / iPad compatibility).</span></div><div class='line' id='LC6'>	<span class="n">frame</span> <span class="o">=</span> <span class="n">CGRectMake</span><span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">origin</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">frame</span><span class="p">.</span><span class="n">origin</span><span class="p">.</span><span class="n">y</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="n">scale</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="n">scale</span><span class="p">);</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Same for the text radius</span></div><div class='line' id='LC9'>	<span class="kt">float</span> <span class="n">scaledTextRadius</span> <span class="o">=</span> <span class="n">textRadius</span> <span class="o">*</span> <span class="n">scale</span><span class="p">;</span></div><div class='line' id='LC10'>	<span class="kt">float</span> <span class="n">scaledRingWidth</span> <span class="o">=</span> <span class="n">ringWidth</span><span class="p">;</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Define the centerpoint of the circle.</span></div><div class='line' id='LC13'>	<span class="n">CGPoint</span> <span class="n">centerPoint</span> <span class="o">=</span> <span class="n">CGPointMake</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">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='LC14'><br/></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// self.menuItemsFont is of the type UIFont, which I use to get the font for displaying the text on the circle.</span></div><div class='line' id='LC16'>	<span class="kt">char</span><span class="o">*</span> <span class="n">fontName</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)[</span><span class="n">self</span><span class="p">.</span><span class="n">menuItemsFont</span><span class="p">.</span><span class="n">fontName</span> <span class="nl">cStringUsingEncoding:</span><span class="n">NSASCIIStringEncoding</span><span class="p">];</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// 2 UIColor&#39;s, which I need for the color of the circle and for the text</span></div><div class='line' id='LC19'>	<span class="n">ringColor</span> <span class="o">=</span> <span class="p">[</span><span class="n">UIColor</span> <span class="nl">colorWithRed:</span><span class="mi">1</span> <span class="nl">green:</span><span class="mi">1</span> <span class="nl">blue:</span><span class="mi">1</span> <span class="nl">alpha:</span><span class="mf">0.7</span><span class="p">];</span></div><div class='line' id='LC20'>	<span class="n">textColor</span> <span class="o">=</span> <span class="p">[</span><span class="n">UIColor</span> <span class="nl">colorWithRed:</span><span class="mi">0</span> <span class="nl">green:</span><span class="mi">0</span> <span class="nl">blue:</span><span class="mi">0</span> <span class="nl">alpha:</span><span class="mi">1</span><span class="p">];</span></div><div class='line' id='LC21'><br/></div><div class='line' id='LC22'>	<span class="n">CGFloat</span><span class="o">*</span> <span class="n">ringColorComponents</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)</span><span class="n">CGColorGetComponents</span><span class="p">(</span><span class="n">ringColor</span><span class="p">.</span><span class="n">CGColor</span><span class="p">);</span></div><div class='line' id='LC23'>	<span class="n">CGFloat</span><span class="o">*</span> <span class="n">textColorComponents</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float</span><span class="o">*</span><span class="p">)</span><span class="n">CGColorGetComponents</span><span class="p">(</span><span class="n">textColor</span><span class="p">.</span><span class="n">CGColor</span><span class="p">);</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>	<span class="n">CGColorSpaceRef</span> <span class="n">colorSpace</span> <span class="o">=</span> <span class="n">CGColorSpaceCreateDeviceRGB</span><span class="p">();</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CGContextRef</span> <span class="n">context</span> <span class="o">=</span> <span class="n">CGBitmapContextCreate</span><span class="p">(</span><span class="nb">NULL</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="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="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">4</span> <span class="o">*</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="p">,</span> <span class="n">colorSpace</span><span class="p">,</span> <span class="n">kCGImageAlphaPremultipliedFirst</span><span class="p">);</span></div><div class='line' id='LC27'><br/></div><div class='line' id='LC28'>	<span class="n">CGContextSetTextMatrix</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">CGAffineTransformIdentity</span><span class="p">);</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>	<span class="n">CGContextSelectFont</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">fontName</span><span class="p">,</span> <span class="mi">18</span> <span class="o">*</span> <span class="n">scale</span><span class="p">,</span> <span class="n">kCGEncodingMacRoman</span><span class="p">);</span></div><div class='line' id='LC31'>	<span class="n">CGContextSetRGBStrokeColor</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">ringColorComponents</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ringColorComponents</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">ringColorComponents</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">ringAlpha</span><span class="p">);</span></div><div class='line' id='LC32'>	<span class="n">CGContextSetLineWidth</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">scaledRingWidth</span><span class="p">);</span></div><div class='line' id='LC33'><br/></div><div class='line' id='LC34'>	<span class="n">CGContextStrokeEllipseInRect</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">CGRectMake</span><span class="p">(</span><span class="n">scaledRingWidth</span><span class="p">,</span> <span class="n">scaledRingWidth</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="p">(</span><span class="n">scaledRingWidth</span> <span class="o">*</span> <span class="mi">2</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="p">(</span><span class="n">scaledRingWidth</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)));</span></div><div class='line' id='LC35'>	<span class="n">CGContextSetRGBFillColor</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">textColorComponents</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">textColorComponents</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">textColorComponents</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">textAlpha</span><span class="p">);</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'>	<span class="n">CGContextSaveGState</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC38'>	<span class="n">CGContextTranslateCTM</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">centerPoint</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">centerPoint</span><span class="p">.</span><span class="n">y</span><span class="p">);</span></div><div class='line' id='LC39'><br/></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// define the angles of the texts to divide them evenly on the circle.</span></div><div class='line' id='LC41'>	<span class="kt">float</span> <span class="n">angleStep</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">M_PI</span> <span class="o">/</span> <span class="p">[</span><span class="n">sections</span> <span class="n">count</span><span class="p">];</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// I set the starting-angle on 90 degrees, to make sure the first text was ON TOP of the circle.</span></div><div class='line' id='LC44'>	<span class="kt">float</span> <span class="n">angle</span> <span class="o">=</span> <span class="n">degreesToRadians</span><span class="p">(</span><span class="mi">90</span><span class="p">);</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Some custom text-radius fixing (and scaling for iPhone 4 &amp;amp; iPad). To make sure my text centered nicely.</span></div><div class='line' id='LC47'>	<span class="n">scaledTextRadius</span> <span class="o">=</span> <span class="n">scaledTextRadius</span> <span class="o">-</span> <span class="mi">12</span> <span class="o">*</span> <span class="n">scale</span><span class="p">;</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Loop through texts and draw them at the appropriate angle.</span></div><div class='line' id='LC50'>	<span class="k">for</span> <span class="p">(</span><span class="n">NSString</span><span class="o">*</span> <span class="n">text</span> <span class="k">in</span> <span class="n">sections</span><span class="p">)</span></div><div class='line' id='LC51'>	<span class="p">{</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// call a method that actually draws the text at an angle</span></div><div class='line' id='LC53'>		<span class="p">[</span><span class="n">self</span> <span class="nl">drawStringAtContext:</span><span class="n">context</span> <span class="nl">string:</span><span class="n">text</span> <span class="nl">atAngle:</span><span class="n">angle</span> <span class="nl">withRadius:</span><span class="n">scaledTextRadius</span><span class="p">];</span></div><div class='line' id='LC54'>		<span class="n">angle</span> <span class="o">-=</span> <span class="n">angleStep</span><span class="p">;</span></div><div class='line' id='LC55'>	<span class="p">}</span></div><div class='line' id='LC56'><br/></div><div class='line' id='LC57'>	<span class="n">CGContextRestoreGState</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC58'><br/></div><div class='line' id='LC59'>	<span class="n">CGImageRef</span> <span class="n">contextImage</span> <span class="o">=</span> <span class="n">CGBitmapContextCreateImage</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC60'><br/></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Release the stuff to avoid memory leaks.</span></div><div class='line' id='LC62'>	<span class="n">CGContextRelease</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC63'>	<span class="n">CGColorSpaceRelease</span><span class="p">(</span><span class="n">colorSpace</span><span class="p">);</span></div><div class='line' id='LC64'><br/></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="p">[</span><span class="n">UIImage</span> <span class="nl">imageWithCGImage:</span><span class="n">contextImage</span><span class="p">];</span></div><div class='line' id='LC66'><br/></div><div class='line' id='LC67'><span class="p">}</span></div><div class='line' id='LC68'><br/></div><div class='line' id='LC69'><span class="c1">// This method draws the text at an angle, while the location is based on the radius + angle.</span></div><div class='line' id='LC70'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">drawStringAtContext:</span><span class="p">(</span><span class="n">CGContextRef</span><span class="p">)</span> <span class="n">context</span> <span class="nl">string:</span><span class="p">(</span><span class="n">NSString</span><span class="o">*</span><span class="p">)</span> <span class="n">text</span> <span class="nl">atAngle:</span><span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">angle</span> <span class="nl">withRadius:</span><span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">radius</span></div><div class='line' id='LC71'><span class="p">{</span></div><div class='line' id='LC72'>	<span class="c1">// Scale the fontsize to match UIScreen scaling</span></div><div class='line' id='LC73'>	<span class="n">UIFont</span><span class="o">*</span> <span class="n">scaledMenuItemsFont</span> <span class="o">=</span> <span class="p">[</span><span class="n">menuItemsFont</span> <span class="nl">fontWithSize:</span><span class="mi">18</span> <span class="o">*</span> <span class="n">scale</span><span class="p">];</span></div><div class='line' id='LC74'><br/></div><div class='line' id='LC75'>	<span class="c1">// Get the size of the string when it would be drawn with the selected font</span></div><div class='line' id='LC76'>	<span class="n">CGSize</span> <span class="n">textSize</span> <span class="o">=</span> <span class="p">[</span><span class="n">text</span> <span class="nl">sizeWithFont:</span><span class="n">scaledMenuItemsFont</span><span class="p">];</span></div><div class='line' id='LC77'><br/></div><div class='line' id='LC78'>	<span class="kt">float</span> <span class="n">perimeter</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">M_PI</span> <span class="o">*</span> <span class="n">radius</span><span class="p">;</span></div><div class='line' id='LC79'><br/></div><div class='line' id='LC80'>	<span class="c1">// determine the angle of the text.</span></div><div class='line' id='LC81'>	<span class="kt">float</span> <span class="n">textAngle</span> <span class="o">=</span> <span class="p">(</span><span class="n">textSize</span><span class="p">.</span><span class="n">width</span><span class="p">)</span> <span class="o">/</span> <span class="n">perimeter</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">M_PI</span><span class="p">;</span></div><div class='line' id='LC82'>	<span class="n">angle</span> <span class="o">+=</span> <span class="n">textAngle</span> <span class="o">/</span> <span class="mi">2</span><span class="p">;</span></div><div class='line' id='LC83'><br/></div><div class='line' id='LC84'>	<span class="c1">// We loop through each letter in the string, so we can set the angle for each letter right</span></div><div class='line' id='LC85'>	<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">index</span> <span class="o">&amp;</span><span class="n">lt</span><span class="p">;</span> <span class="p">[</span><span class="n">text</span> <span class="n">length</span><span class="p">];</span> <span class="n">index</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC86'>	<span class="p">{</span></div><div class='line' id='LC87'>	    <span class="c1">// Get the correct letter by the index</span></div><div class='line' id='LC88'>		<span class="n">NSRange</span> <span class="n">range</span> <span class="o">=</span> <span class="p">{</span><span class="n">index</span><span class="p">,</span> <span class="mi">1</span><span class="p">};</span></div><div class='line' id='LC89'>		<span class="n">NSString</span><span class="o">*</span> <span class="n">letter</span> <span class="o">=</span> <span class="p">[</span><span class="n">text</span> <span class="nl">substringWithRange:</span><span class="n">range</span><span class="p">];</span></div><div class='line' id='LC90'>		<span class="kt">char</span><span class="o">*</span> <span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)[</span><span class="n">letter</span> <span class="nl">cStringUsingEncoding:</span><span class="n">NSASCIIStringEncoding</span><span class="p">];</span></div><div class='line' id='LC91'>		<span class="n">CGSize</span> <span class="n">charSize</span> <span class="o">=</span> <span class="p">[</span><span class="n">letter</span> <span class="nl">sizeWithFont:</span><span class="n">scaledMenuItemsFont</span><span class="p">];</span></div><div class='line' id='LC92'><br/></div><div class='line' id='LC93'>	    <span class="c1">// Determin the X and Y position of the letter based on the angle and the radius</span></div><div class='line' id='LC94'>		<span class="kt">float</span> <span class="n">x</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">);</span></div><div class='line' id='LC95'>		<span class="kt">float</span> <span class="n">y</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">sin</span><span class="p">(</span><span class="n">angle</span><span class="p">);</span></div><div class='line' id='LC96'><br/></div><div class='line' id='LC97'>		<span class="kt">float</span> <span class="n">letterAngle</span> <span class="o">=</span> <span class="p">(</span><span class="n">charSize</span><span class="p">.</span><span class="n">width</span> <span class="o">/</span> <span class="n">perimeter</span> <span class="o">*</span> <span class="o">-</span><span class="mi">2</span> <span class="o">*</span> <span class="n">M_PI</span><span class="p">);</span></div><div class='line' id='LC98'><br/></div><div class='line' id='LC99'>	    <span class="c1">// Save the state of the context, because rotations are based on the original origin</span></div><div class='line' id='LC100'>		<span class="n">CGContextSaveGState</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC101'>		<span class="n">CGContextTranslateCTM</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">);</span></div><div class='line' id='LC102'>	    <span class="c1">// Rotate the canvas so we can just draw our text horizontally</span></div><div class='line' id='LC103'>		<span class="n">CGContextRotateCTM</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="p">(</span><span class="n">angle</span> <span class="o">-</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">M_PI</span><span class="p">));</span></div><div class='line' id='LC104'>		<span class="n">CGContextShowTextAtPoint</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">c</span><span class="p">));</span></div><div class='line' id='LC105'>	    <span class="c1">// Restore the context again.</span></div><div class='line' id='LC106'>		<span class="n">CGContextRestoreGState</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC107'><br/></div><div class='line' id='LC108'>		<span class="n">angle</span> <span class="o">+=</span> <span class="n">letterAngle</span><span class="p">;</span></div><div class='line' id='LC109'>	<span class="p">}</span></div><div class='line' id='LC110'><span class="p">}</span></div><div class='line' id='LC111'><br/></div></pre></div>
          </div>

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

<p>I came to this solution after I asked a question on StackOverflow, which was helpfully demonstrated by Dribbel on how to do it. Credits for that to him.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/placing-curved-text-on-an-uiimage/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Note to self: how to convert hex codes in a NSString</title>
		<link>http://www.sortedbits.com/note-to-self-how-to-convert-hex-codes-in-a-nsstring/</link>
		<comments>http://www.sortedbits.com/note-to-self-how-to-convert-hex-codes-in-a-nsstring/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 07:23:53 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.wimhaanstra.com/?p=828</guid>
		<description><![CDATA[I have been working with Freebase lately and they sometimes encode their strings, so that &#8220;special&#8221; characters are encoded in HEX. For example, sometimes you receive a string like this: Terminator_2$003A_Judgment_Day. I wanted to convert the weird encoding they use, so I wrote a piece of code [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working with Freebase lately and they sometimes encode their strings, so that &#8220;special&#8221; characters are encoded in HEX.</p>
<p>For example, sometimes you receive a string like this: <strong>Terminator_2$003A_Judgment_Day</strong>. I wanted to convert the weird encoding they use, so I wrote a piece of code for that. It might be that this could be encoded some other way and then I would like to hear from you, but here is my code:<br />
<span id="more-828"></span></p>
<pre>
+ (NSString*) replaceHexInString:(NSString*) value
{
	NSRange range = [value rangeOfString:@"$00"];

	while (range.location != NSNotFound)
	{
		if (range.location + 5 &lt;= [value length])
		{
			NSString* hexValue = [value substringFromIndex:range.location];
			hexValue = [hexValue substringToIndex:5];
			NSString* newHexValue = [hexValue stringByReplacingOccurrencesOfString:@&quot;$&quot; withString:@&quot;0x&quot;];

			unsigned int dec;
			NSScanner *scan = [NSScanner scannerWithString:newHexValue];

			if ([scan scanHexInt:&amp;dec])
			{
				NSString* convertedValue = [NSString stringWithFormat:@&quot;%c&quot;, dec];
				value = [value stringByReplacingOccurrencesOfString:hexValue withString:convertedValue];
			}
		}

		range = [value rangeOfString:@&quot;$00&quot;];
	}
	return value;
}
</pre>
<p>I know this probably does not get the UTF-16 characters, but in my case I (hope to) know they won&#8217;t use them.</p>
<p>Well, that&#8217;s about it. Not sure if anyone can use this, but I do <img src='http://www.sortedbits.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/note-to-self-how-to-convert-hex-codes-in-a-nsstring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using NLog in your web.config</title>
		<link>http://www.sortedbits.com/using-nlog-in-your-web-config/</link>
		<comments>http://www.sortedbits.com/using-nlog-in-your-web-config/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 07:48:52 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Nlog]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://www.wimhaanstra.com/?p=778</guid>
		<description><![CDATA[I have been working on my YourRid.es project a bit lately and one of the things I wanted to put in place, was a good logging system. Most of the time I just use a custom build (read: my own shit) logger, but this time I found [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on my YourRid.es project a bit lately and one of the things I wanted to put in place, was a good logging system. Most of the time I just use a custom build (read: my own shit) logger, but this time I found the time to browse the internet for some good loggers.</p>
<p>After comparing a bit, I came to NLog and tried integrating this in my project. My project being build in Visual Studio 2010 has support for those nice web.config&#8217;s that can be transformed/malformed/adjusted while publishing. This was very necessary because my debug (local) build uses a different SQL instance than my production build.</p>
<p>So I just wanted to show you how I configured NLog in my web.config. It might be obvious for some people, but for others it might not.<br />
<span id="more-778"></span><br />
In my normal web.config I added the following lines. First I added a new <strong>section</strong> row to my <strong>configSections</strong>.</p>
<pre>
<section />
</pre>
<p>After that I went and added the normal NLog configuration to my web.config.</p>
<pre>

 insert into Log (TimeStamp, Level, Logger, Message, UserIdentity, CallSite) values(@time_stamp, @level, @logger, @message, @useridentity, @callsite);
</pre>
<p>This is the information for my debug environment. Because my laptop run SQL express, it connects to that instance.</p>
<p>This is my web.config.release :</p>
<pre>
</pre>
<p>It changes the connectionstring when I publish my release version. I love that feature of Visual Studio 2010!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/using-nlog-in-your-web-config/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Queueing HTTP requests in objC</title>
		<link>http://www.sortedbits.com/queueing-http-requests-in-objc/</link>
		<comments>http://www.sortedbits.com/queueing-http-requests-in-objc/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 18:55:51 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.wimhaanstra.com/?p=742</guid>
		<description><![CDATA[For WallPaper I download numerous thumbnails from my webserver at the same time. This is causing slowing speeds (to many threads at once), and too much memory usage (too much image data cached at once). So I looked in queueing the downloads and tried (ofcourse) writing my [...]]]></description>
			<content:encoded><![CDATA[<p>For WallPaper I download numerous thumbnails from my webserver at the same time. This is causing slowing speeds (to many threads at once), and too much memory usage (too much image data cached at once).</p>
<p>So I looked in queueing the downloads and tried (ofcourse) writing my own QueueHandler class. After I written and spend a couple of hours bughunting/testing my QueueuHandler, I came to the <strong>awesome</strong> idea to see what the iPhone SDK supplies for this kind of jobs <img src='http://www.sortedbits.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  (you DO read my sarcasm, dont you?).<br />
<span id="more-742"></span><br />
I am using <a title="ASIHTTPRequest Website" href="http://allseeing-i.com/ASIHTTPRequest/" target="_blank">ASIHTTPRequest</a> for my web-requests in WallPaper. I will just show you how I queue my downloads and when the download finishes, I put the image in a predefined and created UIImageView.</p>
<p>I first declare a couple of variables in my <strong>.h</strong> file.</p>
<pre>NSMutableArray* downloadQueue;
NSOperationQueue* queue;</pre>
<p>I added some UIImageView&#8217;s to a view and I put them and the download URL in a NSMutableDictionary, like this:</p>
<pre>NSMutableDictionary* threadArguments = [[NSMutableDictionary alloc] init];

[threadArguments setObject:myUrl forKey:@&quot;url&quot;];
[threadArguments setObject:myImageView forKey:@&quot;iv&quot;];

[self addToDownloadQueue:threadArguments];</pre>
<p>The <strong>addToDownloadQueue</strong> method does something like this after that (<strong>threadArguments</strong> is the parameter the method is receiving).</p>
<pre>// Add the object to the NSMutableArray I got stored.
[downloadQueue addObject:threadArguments];
if (!queue)
{
	queue = [[NSOperationQueue alloc] init];
	[queue setMaxConcurrentOperationCount:1];
}

NSString* threadUrl = [threadArguments valueForKey:@&quot;url&quot;];
NSURL* downloadUrl = [NSURL URLWithString:threadUrl];
ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL:downloadUrl];
[request setDelegate:self];
[request setDidFinishSelector:@selector(downloadDone:)];
[request setDidFailSelector:@selector(downloadFailed:)];</pre>
<p>I put the <strong>MaxConcurrentOperationCount</strong> on <strong>1</strong> to make sure the application sends the requests for thumbnails one by one (going easy on your bandwidth and on my server).</p>
<p>Now we need to implement the FinishSelector and the FailSelector methods to catch the downloads that are finished and put the downloaded image in the pre-created UIImageView.</p>
<pre>- (void)downloadFailed:(ASIHTTPRequest *)request
{
	NSLog(@&quot;Downloading failed?&quot;);
}

- (void)downloadDone:(ASIHTTPRequest *)request
{
	NSString* downloadUrl = [request.url absoluteString];

	NSMutableDictionary* foundObj = nil;

	for (NSMutableDictionary* dict in downloadQueue)
	{
		NSString* queueUrl = [dict valueForKey:@&quot;url&quot;];

		if ([downloadUrl isEqualToString:queueUrl])
		{
			UIImageView* iv = (UIImageView*)[dict valueForKey:@&quot;iv&quot;];
			NSData* imageData = request.rawResponseData;

			if (iv != nil)
				iv.image = [UIImage imageWithData:imageData];

			foundObj = dict;
		}
	}

	if (foundObj != nil)
		[downloadQueue removeObject:foundObj];
}</pre>
<p>*Ok, somehow my code syntax highlighting screws up the indenting.*</p>
<p>Well, I hope you can use something of my weird code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/queueing-http-requests-in-objc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using jQuery Dialog with ASP.NET</title>
		<link>http://www.sortedbits.com/using-jquery-dialog-with-asp-net/</link>
		<comments>http://www.sortedbits.com/using-jquery-dialog-with-asp-net/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 20:19:52 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://www.depl0y.com/?p=442</guid>
		<description><![CDATA[I have been playing around with jQuery a bit lately and I wanted to use the nice dialog boxes on my new project. The problem with the dialog boxes is, that they do not create a postback when one of the buttons is clicked. Also the values [...]]]></description>
			<content:encoded><![CDATA[<p>I have been playing around with jQuery a bit lately and I wanted to use the nice dialog boxes on my new project. The problem with the dialog boxes is, that they do not create a postback when one of the buttons is clicked. Also the values of any controls inside the dialog are always empty, when using the dialog box.</p>
<p>I just will be posting my code here, to let you see how I solved the problem. <span id="more-442"></span><br />
First, my JavaScript code to show the dialog I want:</p>
<pre>function showDialog(ID) {
	var dlg = $("#" + ID).dialog({
		bgiframe: true,
		height: 165,
		width: 450,
		modal: true,
		buttons: {
			Ok: function() {
			$(this).dialog('close');
			__doPostBack = newDoPostBack;
			 __doPostBack("aspnetForm", null);
			},
			Cancel: function() {
				$(this).dialog('close');
			}
		}
	});
	dlg.parent().appendTo(jQuery('form:first'));
}

function newDoPostBack(eventTarget, eventArgument) {
	var theForm = document.forms[0];

	if (!theForm) {
		theForm = document.aspnetForm;
	}

	if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
		document.getElementById("__EVENTTARGET").value = eventTarget;
		document.getElementById("__EVENTARGUMENT").value = eventArgument;
		theForm.submit();
	}
}</pre>
<p>Now here is my simple dialog, and the code to initiate it.</p>
<pre>
<div class="btn-140-addserver">
<div>

		Please enter a server name here. It can be anything you like:</div>
</div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/using-jquery-dialog-with-asp-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Multiple web.config files</title>
		<link>http://www.sortedbits.com/multiple-webconfig-files/</link>
		<comments>http://www.sortedbits.com/multiple-webconfig-files/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 10:24:58 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://www.depl0y.com/?p=229</guid>
		<description><![CDATA[We all know this problem, when publishing your web applications to different servers, you always need to take extra care of your config files. Because database connections and physical paths stored in the web.config are machine specific. Well there is no real solution for this kind of [...]]]></description>
			<content:encoded><![CDATA[<p>We all know this problem, when publishing your web applications to different servers, you always need to take extra care of your config files. Because database connections and physical paths stored in the web.config are machine specific.</p>
<p>Well there is no real solution for this kind of problem, at least not one I could find. So I created a ConfigManager class which can replace the ConfigurationManager class.</p>
<p>So what does the ConfigManager class do?</p>
<li>First it loads in your normal configuration file (web.config or app.config).</li>
<li>It looks for an appSetting called &#8216;ConfigLocation&#8217;, this is a virtual path where the machine specific configuration files are stored.</li>
<li>The NETBIOS name of the machine running the application is determined.</li>
<li>It looks for a &#8216;[YOUR NETBIOS NAME].config&#8217; file in the directory specified in step 2. For example, if your computer name is &#8216;MyComputer&#8217; then it looks for a file &#8216;MyComputer.config&#8217;.</li>
<li>When a configuration file is found with that name, it loads that configuration file and it &#8216;overrides&#8217; the values in the normal configuration file.</li>
<p>So, actually it does nothing more than just extend the normal ConfigurationManager.</p>
<p><strong>Usage:</strong></p>
<pre>
string indexDirectory = ConfigManager.AppSettings["IndexDirectory"];
string connection = ConfigManager.ConnectionStrings["DatabaseConnection"];
</pre>
<p>I also created a small method that can output all active settings in an HTML string:</p>
<pre>
string html = ConfigManager.PresentContents();
</pre>
<p><strong>Sample web.config:</strong></p>
<pre>
...

...
</pre>
<p><strong>Sample ~/Configurations/MyComputer.config:</strong></p>
<pre>
</pre>
<p>The MyComputer.config file is only loaded if the application is run on a machine with the name &#8216;MyComputer&#8217;. When it IS run on that machine, the IndexDirectory configuration setting from the web.config is overridden by the IndexDirectory setting from the MyComputer.config.</p>
<p><a href='http://www.depl0y.com/files/configmanager.zip'>ConfigManager v2 1.0</a><br />
<a href='http://www.depl0y.com/files/configmanager.chm'>ConfigManager v2 1.0 Help File</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/multiple-webconfig-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting .NET 3.5 apps to run on 2.0 hosting</title>
		<link>http://www.sortedbits.com/getting-net-35-apps-to-run-on-20-hosting/</link>
		<comments>http://www.sortedbits.com/getting-net-35-apps-to-run-on-20-hosting/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 10:25:17 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://www.depl0y.com/?p=205</guid>
		<description><![CDATA[As I mentioned earlier, I moved my hosting to MyDomain.com, which has a nice Windows based hosting plan. There is only one problem, they are running .NET Framework 2.0 and don&#8217;t have the intention to actually upgrade it for you. I wrote the backend of my iPhone [...]]]></description>
			<content:encoded><![CDATA[<p>As I mentioned earlier, I moved my hosting to MyDomain.com, which has a nice Windows based hosting plan. There is only one problem, they are running .NET Framework 2.0 and don&#8217;t have the intention to actually upgrade it for you.</p>
<p>I wrote the backend of my iPhone app in C# 3.5, using LINQ and Ajax, so this application wouldn&#8217;t run on the MyDomain.com hosting. I knew this before I took the hosting, but still&#8230; I love LINQ and I want to use it!</p>
<p>So, I actually was thinking, how do I get this to run? Well it is easier then I thought. All you need to do is precompile your application locally and upload it to your hosting.</p>
<p>I am precompiling using a small batch file I wrote:<br />
<code><br />
md %2<br />
C:WindowsMicrosoft.NETFrameworkv2.0.50727aspnet_compiler.exe -p %1 -v / %2<br />
</code></p>
<p>The batch accepts 2 parameters. Parameter 1 is the location of your project sources and the 2nd parameter is the directory where you want to store your precompiled app.</p>
<p>After I uploaded the precompiled app, I still received a few errors about DLL&#8217;s not found, so I actually copied some 3.5 based DLL&#8217;s from my Windows GAC.</p>
<p>Here&#8217;s the list of DLL&#8217;s I had to copy, it could be that you need a different set of DLL&#8217;s based on the functionality you used.<br />
<code><br />
System.Core.dll<br />
System.Data.DataSetExtensions.dll<br />
System.Data.Linq.dll<br />
System.Web.dll<br />
System.Web.Extensions.dll<br />
System.Xml.Linq.dll<br />
</code></p>
<p>Those were all the files I needed to get Linq up and running <img src='http://www.sortedbits.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.depl0y.com%2f%3fp%3d205"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.depl0y.com%2f%3fp%3d205" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/getting-net-35-apps-to-run-on-20-hosting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Application.Lock() &amp; Current session count</title>
		<link>http://www.sortedbits.com/current-session-count/</link>
		<comments>http://www.sortedbits.com/current-session-count/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 20:52:09 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://www.depl0y.com/?p=108</guid>
		<description><![CDATA[I have been looking around the net to find the best way to keep track of the total number of concurrent sessions. There is one piece of code, that is posted on a lot of websites. The code that I find mostly is the following (I editted [...]]]></description>
			<content:encoded><![CDATA[<p>I have been looking around the net to find the best way to keep track of the total number of concurrent sessions. There is one piece of code, that is posted on a lot of websites.</p>
<p>The code that I find mostly is the following (I editted a bit, to match my coding style):</p>
<p><em><strong>Global.asax</strong></em><br />
[csharp]
protected void Application_Start(object sender, EventArgs e)<br />
{<br />
	Application["SessionCount"] = 0;<br />
}</p>
<p>protected void Session_Start(object sender, EventArgs e)<br />
{<br />
	Application.Lock();</p>
<p>	int sessionCount = 0;</p>
<p>	if (Int32.TryParse(Application["SessionCount"].ToString(), out sessionCount))<br />
		sessionCount++;</p>
<p>	Application["SessionCount"] = sessionCount;<br />
	Application.UnLock();<br />
}</p>
<p>protected void Session_End(object sender, EventArgs e)<br />
{</p>
<p>	Application.Lock();</p>
<p>	int sessionCount = 0;</p>
<p>	if (Int32.TryParse(Application["SessionCount"].ToString(), out sessionCount))<br />
		sessionCountâ€“;</p>
<p>	Application["SessionCount"] = sessionCount;<br />
	Application.UnLock();<br />
}<br />
[/csharp]
<p>The thing I am wondering about is, what happens when the site gets a lot of load. Does locking the Application object make the site slower? Because I noticed that when you lock the Application object, no pages get served to users.</p>
<p>What happens with multi-threaded web applications? Are all threads blocked during the lock?</p>
<p>I don&#8217;t know the answer yet, but I think this is a nice thing to try to find out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sortedbits.com/current-session-count/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

