<?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>Mac / iPhone App Development</title>
	<atom:link href="http://benreeves.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://benreeves.co.uk</link>
	<description>Home of a Small Time Developer</description>
	<lastBuildDate>Sat, 06 Feb 2010 15:37:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reddit.com Clone In 4 Lines Of C</title>
		<link>http://benreeves.co.uk/reddit-com-clone-in-4-lines-of-c/</link>
		<comments>http://benreeves.co.uk/reddit-com-clone-in-4-lines-of-c/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 22:16:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://benreeves.co.uk/?p=197</guid>
		<description><![CDATA[
#include &#60;stdio.h&#62;
#include &#60;time.h&#62;
#include &#60;netinet/in.h&#62;
typedef struct &#123; int ID; char * title; char * link; char * date; int upVotes; int downVotes; void * next; &#125; Article; Article * root; char * getVal&#40;char * query, char * key&#41; &#123; char * str = malloc&#40;1&#41;; int match = 0; int pMatch = 0; char * cur = [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
<span style="color: #339933;">#include &lt;netinet/in.h&gt;</span>
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">int</span> ID<span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> title<span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> link<span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> date<span style="color: #339933;">;</span> <span style="color: #993333;">int</span> upVotes<span style="color: #339933;">;</span> <span style="color: #993333;">int</span> downVotes<span style="color: #339933;">;</span> <span style="color: #993333;">void</span> <span style="color: #339933;">*</span> next<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> Article<span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> root<span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> getVal<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span> query<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> key<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> str <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #993333;">int</span> match <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #993333;">int</span> pMatch <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> cur <span style="color: #339933;">=</span> query<span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>cur <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pMatch <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>cur <span style="color: #339933;">==</span> <span style="color: #ff0000;">'&amp;'</span> <span style="color: #339933;">||</span> <span style="color: #339933;">*</span>cur <span style="color: #339933;">==</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span> <span style="color: #339933;">||</span> <span style="color: #339933;">*</span>cur <span style="color: #339933;">==</span> <span style="color: #ff0000;">' '</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pMatch <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> str <span style="color: #339933;">=</span> realloc<span style="color: #009900;">&#40;</span>str<span style="color: #339933;">,</span> pMatch<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>str<span style="color: #339933;">+</span>pMatch<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>cur<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>pMatch<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>match <span style="color: #339933;">==</span> strlen<span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> pMatch <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>cur <span style="color: #339933;">==</span> key<span style="color: #009900;">&#91;</span>match<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">++</span>match<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> match <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> cur<span style="color: #339933;">++;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pMatch <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> str<span style="color: #009900;">&#91;</span>pMatch<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> str<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> free<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> NULL<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">char</span> from_hex<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> ch<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">return</span> isdigit<span style="color: #009900;">&#40;</span>ch<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> ch <span style="color: #339933;">-</span> <span style="color: #ff0000;">'0'</span> <span style="color: #339933;">:</span> tolower<span style="color: #009900;">&#40;</span>ch<span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #ff0000;">'a'</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">char</span> to_hex<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> code<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">static</span> <span style="color: #993333;">char</span> hex<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;0123456789abcdef&quot;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> hex<span style="color: #009900;">&#91;</span>code <span style="color: #339933;">&amp;</span> <span style="color: #0000dd;">15</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>url_decode<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>str<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>pstr <span style="color: #339933;">=</span> str<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>buf <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span>strlen<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #339933;">*</span>pbuf <span style="color: #339933;">=</span> buf<span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>pstr<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>pstr <span style="color: #339933;">==</span> <span style="color: #ff0000;">'%'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pstr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&amp;&amp;</span> pstr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">*</span>pbuf<span style="color: #339933;">++</span> <span style="color: #339933;">=</span> from_hex<span style="color: #009900;">&#40;</span>pstr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">4</span> <span style="color: #339933;">|</span> from_hex<span style="color: #009900;">&#40;</span>pstr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> pstr <span style="color: #339933;">+=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>pstr <span style="color: #339933;">==</span> <span style="color: #ff0000;">'+'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">*</span>pbuf<span style="color: #339933;">++</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">' '</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">*</span>pbuf<span style="color: #339933;">++</span> <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>pstr<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> pstr<span style="color: #339933;">++;</span> <span style="color: #009900;">&#125;</span> <span style="color: #339933;">*</span>pbuf <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> buf<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">void</span> send_headers<span style="color: #009900;">&#40;</span>FILE <span style="color: #339933;">*</span>f<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> status<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>title<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>extra<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mime<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> length<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">char</span> timebuf<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%s %d %s<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;HTTP/1.0&quot;</span><span style="color: #339933;">,</span> status<span style="color: #339933;">,</span> title<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Server: %s<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;redditserver/1.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>extra<span style="color: #009900;">&#41;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%s<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> extra<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mime<span style="color: #009900;">&#41;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Content-Type: %s<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> mime<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>length <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Content-Length: %d<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> length<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Connection: close<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">void</span> reddit<span style="color: #009900;">&#40;</span>FILE <span style="color: #339933;">*</span>f<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Reddit Clone&lt;/TITLE&gt;&lt;/HEAD&gt;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt;BODY&gt;&lt;H1&gt;Submit&lt;/H1&gt;&lt;form action=<span style="color: #000099; font-weight: bold;">\&quot;</span>/<span style="color: #000099; font-weight: bold;">\&quot;</span> method=<span style="color: #000099; font-weight: bold;">\&quot;</span>get<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;Title:&lt;input type=<span style="color: #000099; font-weight: bold;">\&quot;</span>text<span style="color: #000099; font-weight: bold;">\&quot;</span> name=<span style="color: #000099; font-weight: bold;">\&quot;</span>title<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt; Link:&lt;input type=<span style="color: #000099; font-weight: bold;">\&quot;</span>text<span style="color: #000099; font-weight: bold;">\&quot;</span> name=<span style="color: #000099; font-weight: bold;">\&quot;</span>link<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;input type=<span style="color: #000099; font-weight: bold;">\&quot;</span>submit<span style="color: #000099; font-weight: bold;">\&quot;</span> value=<span style="color: #000099; font-weight: bold;">\&quot;</span>Submit<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;/form&gt;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>root<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt;h1&gt;Articles&lt;/h1&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> cur <span style="color: #339933;">=</span> root<span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>cur <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt;p&gt;&lt;font size=<span style="color: #000099; font-weight: bold;">\&quot;</span>5<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;%d&lt;b&gt;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>/?up=%d<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&amp;uarr&lt;/b&gt;&lt;/font&gt;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>%s<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;%s&lt;/a&gt;&lt;br /&gt;&lt;font size=<span style="color: #000099; font-weight: bold;">\&quot;</span>5<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>/?down=%d<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&amp;darr&lt;/a&gt;&lt;/b&gt;&lt;/font&gt;%s -- %s&lt;/p&gt;&quot;</span><span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>upVotes <span style="color: #339933;">-</span> cur<span style="color: #339933;">-&gt;</span>downVotes<span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>ID<span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>link<span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>title<span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>ID<span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>link<span style="color: #339933;">,</span> cur<span style="color: #339933;">-&gt;</span>date<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> cur <span style="color: #339933;">=</span> cur<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>fprintf<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&lt;/BODY&gt;&lt;/HTML&gt;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">int</span> fsize<span style="color: #009900;">&#40;</span>FILE <span style="color: #339933;">*</span> f<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> fseek<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> SEEK_END<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #993333;">int</span> size <span style="color: #339933;">=</span> ftell<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fseek<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> SEEK_SET<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> size<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">int</span> sock<span style="color: #339933;">;</span> <span style="color: #993333;">int</span> port <span style="color: #339933;">=</span> <span style="color: #0000dd;">1337</span><span style="color: #339933;">;</span> <span style="color: #993333;">struct</span> sockaddr_in sin<span style="color: #339933;">;</span> sock <span style="color: #339933;">=</span> socket<span style="color: #009900;">&#40;</span>AF_INET<span style="color: #339933;">,</span> SOCK_STREAM<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> sin.<span style="color: #202020;">sin_family</span> <span style="color: #339933;">=</span> AF_INET<span style="color: #339933;">;</span> sin.<span style="color: #202020;">sin_addr</span>.<span style="color: #202020;">s_addr</span> <span style="color: #339933;">=</span> INADDR_ANY<span style="color: #339933;">;</span> sin.<span style="color: #202020;">sin_port</span> <span style="color: #339933;">=</span> htons<span style="color: #009900;">&#40;</span>port<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>bind<span style="color: #009900;">&#40;</span>sock<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> sockaddr <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>sin<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>sin<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Failed bind<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> sleep<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> listen<span style="color: #009900;">&#40;</span>sock<span style="color: #339933;">,</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;HTTP server listening on port %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> port<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> root <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">int</span> s<span style="color: #339933;">;</span> <span style="color: #993333;">int</span> size<span style="color: #339933;">;</span> <span style="color: #993333;">int</span> hsize<span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> buff<span style="color: #339933;">;</span> FILE <span style="color: #339933;">*</span> t<span style="color: #339933;">;</span> FILE <span style="color: #339933;">*</span> ht<span style="color: #339933;">;</span> FILE <span style="color: #339933;">*</span> f<span style="color: #339933;">;</span> s <span style="color: #339933;">=</span> accept<span style="color: #009900;">&#40;</span>sock<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>s <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> header <span style="color: #339933;">=</span> calloc<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> size <span style="color: #339933;">=</span> read<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span> header<span style="color: #339933;">,</span> <span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> titleEnc <span style="color: #339933;">=</span> getVal<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;title&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> linkEnc <span style="color: #339933;">=</span> getVal<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;link&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>titleEnc <span style="color: #339933;">&amp;&amp;</span> linkEnc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> title <span style="color: #339933;">=</span> url_decode<span style="color: #009900;">&#40;</span>titleEnc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> link <span style="color: #339933;">=</span>  url_decode<span style="color: #009900;">&#40;</span>linkEnc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> free<span style="color: #009900;">&#40;</span>linkEnc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> free<span style="color: #009900;">&#40;</span>titleEnc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Title: %s -- Link: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> title<span style="color: #339933;">,</span> link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #993333;">char</span>  <span style="color: #339933;">*</span> s <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> size_t i<span style="color: #339933;">;</span> <span style="color: #993333;">struct</span> tm tim<span style="color: #339933;">;</span> time_t now<span style="color: #339933;">;</span> now <span style="color: #339933;">=</span> time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tim <span style="color: #339933;">=</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>localtime<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>now<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i <span style="color: #339933;">=</span> strftime<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span><span style="color: #0000dd;">30</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;%b %d, %Y; %H:%M:%S<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,&amp;</span>tim<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> new <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>Article<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>title <span style="color: #339933;">=</span> title<span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>link <span style="color: #339933;">=</span> link<span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>date <span style="color: #339933;">=</span> s<span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>upVotes <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>downVotes <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>root<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> root <span style="color: #339933;">=</span> new<span style="color: #339933;">;</span> new<span style="color: #339933;">-&gt;</span>ID <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">int</span> dupe <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> cur <span style="color: #339933;">=</span> root<span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> prev <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>cur <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>cur<span style="color: #339933;">-&gt;</span>title<span style="color: #339933;">,</span> new<span style="color: #339933;">-&gt;</span>title<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">||</span> strcmp<span style="color: #009900;">&#40;</span>cur<span style="color: #339933;">-&gt;</span>link<span style="color: #339933;">,</span> new<span style="color: #339933;">-&gt;</span>link<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> dupe <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> prev <span style="color: #339933;">=</span> cur<span style="color: #339933;">;</span> cur <span style="color: #339933;">=</span> cur<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>dupe <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> new<span style="color: #339933;">-&gt;</span>ID <span style="color: #339933;">=</span> prev<span style="color: #339933;">-&gt;</span>ID <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> prev<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> new<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> free<span style="color: #009900;">&#40;</span>new<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> upID <span style="color: #339933;">=</span> getVal<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;up&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>upID<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">int</span> ID <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>upID<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> cur <span style="color: #339933;">=</span> root<span style="color: #339933;">;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>cur <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>cur<span style="color: #339933;">-&gt;</span>ID <span style="color: #339933;">==</span> ID<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> cur<span style="color: #339933;">-&gt;</span>upVotes<span style="color: #339933;">++;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> cur <span style="color: #339933;">=</span> cur<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> dID <span style="color: #339933;">=</span> getVal<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;down&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>dID<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #993333;">int</span> ID <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>dID<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> Article <span style="color: #339933;">*</span> cur <span style="color: #339933;">=</span> root<span style="color: #339933;">;</span>  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>cur <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>cur<span style="color: #339933;">-&gt;</span>ID <span style="color: #339933;">==</span> ID<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> cur<span style="color: #339933;">-&gt;</span>downVotes<span style="color: #339933;">++;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> cur <span style="color: #339933;">=</span> cur<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> t <span style="color: #339933;">=</span> tmpfile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ht <span style="color: #339933;">=</span> tmpfile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> reddit<span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> size <span style="color: #339933;">=</span> fsize<span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> send_headers<span style="color: #009900;">&#40;</span>ht<span style="color: #339933;">,</span> <span style="color: #0000dd;">200</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Ok&quot;</span><span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;text/html&quot;</span><span style="color: #339933;">,</span> size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> hsize <span style="color: #339933;">=</span> fsize<span style="color: #009900;">&#40;</span>ht<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> buff <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span>hsize<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fread<span style="color: #009900;">&#40;</span>buff<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> hsize<span style="color: #339933;">,</span> ht<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> write<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span>buff<span style="color: #339933;">,</span>hsize<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> free<span style="color: #009900;">&#40;</span>buff<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> buff <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span>size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fread<span style="color: #009900;">&#40;</span>buff<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> size<span style="color: #339933;">,</span> t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> write<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span>buff<span style="color: #339933;">,</span>size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> free<span style="color: #009900;">&#40;</span>buff<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> fclose<span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: center;"><a href="http://benreeves.co.uk/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-21.53.28.png" class="broken_link" ><img class="aligncenter size-full wp-image-201" title="Reddit_Screenshot" src="http://benreeves.co.uk/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-21.53.28.png" alt="" width="618" height="412" /></a></p>
<p><em> $ gcc reddit.c -o reddit<br />
$ ./reddit<br />
HTTP server listening on port 1337 &#8212; </em><a href="http://localhost:1337/" class="broken_link"  target="_blank"><em>http://localhost:1337/</em></a></p>
<p><a href="http://benreeves.co.uk/wp-content/uploads/2010/02/reddit.c" class="broken_link" >reddit.c</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Freddit-com-clone-in-4-lines-of-c%2F&amp;linkname=Reddit.com%20Clone%20In%204%20Lines%20Of%20C"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/reddit-com-clone-in-4-lines-of-c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Multithreading with core Data</title>
		<link>http://benreeves.co.uk/multithreading-with-core-data/</link>
		<comments>http://benreeves.co.uk/multithreading-with-core-data/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 17:23:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[core data]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[sqllite]]></category>

		<guid isPermaLink="false">http://benreeves.co.uk/?p=188</guid>
		<description><![CDATA[Working with core data in a multi threaded environment you have to extremely careful
For example if were creating a news application, we want to be able to import news in the background and display updates to the user with no interruption of the GUI. The task can be divided into several stages:

Download the xml feed [...]]]></description>
			<content:encoded><![CDATA[<p>Working with core data in a multi threaded environment you have to extremely careful</p>
<p>For example if were creating a news application, we want to be able to import news in the background and display updates to the user with no interruption of the GUI. The task can be divided into several stages:</p>
<ol>
<li>Download the xml feed with the latest news</li>
<li>Parse the feed</li>
<li>Insert the articles into core data</li>
<li>Notify the UI and refresh the display.</li>
</ol>
<p>We already have our core data API defined. A simple method to retrieve all the articles and a method to add a new article.<br />
DataSource.h</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> DataSource <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span> <span style="color: #002200;">&#123;</span> <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSArray</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>getNewsFor<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>addArticle<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Article<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>article forRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region;
<span style="color: #a61390;">@end</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Now suppose we want to the web service to import the latest articles. We might define our implementation something like this:<br />
WebService.h</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> WebService <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span> <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">id</span> delegate;
	LocalDataSource <span style="color: #002200;">*</span> source;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> <span style="color: #a61390;">id</span> delegate;
<span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> LocalDataSource <span style="color: #002200;">*</span> source;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>importNewsForRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Our implementation of importNewsForRegion would look something like this:</p>
<p>WebService.m</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>importNewsForRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">//Perform in background if called from main</span>
	 <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSThread</span> currentThread<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSThread</span> mainThread<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>self performSelectorInBackground<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>importNewsForRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> withObject<span style="color: #002200;">:</span>region<span style="color: #002200;">&#93;</span>;
		 <span style="color: #a61390;">return</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">//Setup pool</span>
	 <span style="color: #400080;">NSAutoreleasePool</span> <span style="color: #002200;">*</span> pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSAutoreleasePool</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
	 <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span> articles <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>XML parseArticleFeed<span style="color: #002200;">:</span>region.feedURL<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//Not safe 1.</span>
	 <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span>Article <span style="color: #002200;">*</span> article <span style="color: #a61390;">in</span> articles<span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>source addArticle<span style="color: #002200;">:</span>article forRegion<span style="color: #002200;">:</span>region<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//Not safe 2.</span>
	<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #002200;">&#91;</span>delegate finishedImport<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//Not safe 3.</span>
	<span style="color: #002200;">&#91;</span>pool drain<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>However this because importNewsForRegion is running in a separate thread this is unsafe and will likely cause core data to crash or corrupt our database.</p>
<ol>
<li>The region passed to to importNews has likely come from a core data context which was constructed on the main thread. Even though were not even altering the region directly with core data it&#8217;s not safe to even read the feedURL, because every operation can trigger faulting.</li>
<li>When we instruct the source to add an article it will use the main threads context, this is fine when we are in the main thread, but in a background thread we need to specify our own context.</li>
<li>Not related to core data, but when we notify the delegate it will likely perform UI updates which are not safe to perform in a background thread. we need to ensure the delegate only received notifications on the main thread.</li>
</ol>
<p>To make our program thread safe we first need to make some small alterations to our API.</p>
<p>DataSource.h</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> DataSource <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span> <span style="color: #002200;">&#123;</span> <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSArray</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>getNewsFor<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSArray</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>getNewsFor<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region context<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSManagedObjectContext</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>context;
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>addArticle<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Article<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>article forRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>addArticle<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Article<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>article forRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region context<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSManagedObjectContext</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>context;
<span style="color: #a61390;">@end</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>In our data source we specify two more methods which allow us to provide a context for the method to use. All our queries should be updated to only use the provided context. The original methods that don&#8217;t specify a context should call the newly implemented method with the default context, e.g.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>addArticle<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Article<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>article forRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>region
<span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span>self addArticle<span style="color: #002200;">:</span>article forRegion<span style="color: #002200;">:</span>region context<span style="color: #002200;">:</span>mainThreadContext<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Only when we are using core data in a background thread do we need to use the newly added methods. So we can now update our WebService.m:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>importNewsForRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>unsafeRegion
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">//Perform in background if called from main</span>
	 <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSThread</span> currentThread<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSThread</span> mainThread<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>self performSelectorInBackground<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>importNewsForRegion<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> withObject<span style="color: #002200;">:</span> unsafeRegion<span style="color: #002200;">&#93;</span>;
		 <span style="color: #a61390;">return</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">//Setup pool</span>
	 <span style="color: #400080;">NSAutoreleasePool</span> <span style="color: #002200;">*</span> pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSAutoreleasePool</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">//Create a new context just for this thread</span>
	<span style="color: #400080;">NSManagedObjectContext</span> <span style="color: #002200;">*</span> managedObjectContext <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSManagedObjectContext</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>managedObjectContext setPersistentStoreCoordinator<span style="color: #002200;">:</span>  <span style="color: #002200;">&#91;</span>source persistentStoreCoordinator<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
        <span style="color: #11740a; font-style: italic;">//Create a new region which is safe to use in this thread</span>
	Region <span style="color: #002200;">*</span> region <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>Region<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span>managedObjectContext existingObjectWithID<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>unsafeRegion objectID<span style="color: #002200;">&#93;</span> error<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
	 <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span> articles <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>XML parseArticleFeed<span style="color: #002200;">:</span>region.feedURL<span style="color: #002200;">&#93;</span>;
	 <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span>Article <span style="color: #002200;">*</span> article <span style="color: #a61390;">in</span> articles<span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
               <span style="color: #11740a; font-style: italic;">//Ensure we provide the context for the source to use</span>
		<span style="color: #002200;">&#91;</span>source addArticle<span style="color: #002200;">:</span>article forRegion<span style="color: #002200;">:</span>region context<span style="color: #002200;">:</span>managedObjectContext<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">//Save changes and close the new context</span>
	<span style="color: #002200;">&#91;</span>managedObjectContext save<span style="color: #002200;">:&amp;</span>amp;error<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>managedObjectContext release<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>delegate performSelectorOnMainThread<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>finishedImport<span style="color: #002200;">&#41;</span> withObject<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span> waitUntilDone<span style="color: #002200;">:</span><span style="color: #a61390;">NO</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>pool drain<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>As you can see we crate a new context using out shared persistentStoreCoordinator, we ensure that anytime we touch core data from this thread we are using this context. The also means that we have to create a new region which belongs to this context, and we do this with the existingObjectWithID method and using the [unsafeRegion objectID]. Finally we ensure that the delegate receives the notification on the main thread.</p>
<p>for more information about threading in core data see:</p>
<p>http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdMultiThreading.html</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fmultithreading-with-core-data%2F&amp;linkname=Multithreading%20with%20core%20Data"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/multithreading-with-core-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cocos2d iphone tutorial</title>
		<link>http://benreeves.co.uk/cocos2d-iphone-tutorial/</link>
		<comments>http://benreeves.co.uk/cocos2d-iphone-tutorial/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:26:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.benreeves.co.uk/?p=172</guid>
		<description><![CDATA[Cocos2d is a popular 2d framework for developing iphone games, including physics and particle support.  Here&#8217;s a quick introduction to getting cocos2d for the iphone up and running for your next project.
Download the latest source from:
http://code.google.com/p/cocos2d-iphone/downloads/list
I recommend you stick with the stable releases, unless there is a specific feature your require from a new version.
Unzip [...]]]></description>
			<content:encoded><![CDATA[<p>Cocos2d is a popular 2d framework for developing iphone games, including physics and particle support.  Here&#8217;s a quick introduction to getting cocos2d for the iphone up and running for your next project.</p>
<p>Download the latest source from:</p>
<p><a href="http://code.google.com/p/cocos2d-iphone/downloads/list">http://code.google.com/p/cocos2d-iphone/downloads/list</a></p>
<p>I recommend you stick with the stable releases, unless there is a specific feature your require from a new version.</p>
<p>Unzip the folder and the template installation script:</p>
<pre>$ ./install_template.sh</pre>
<p>This will make a series of cocos-2d templates available from XCode.  Launch/restart xcode and choose File-&gt;New Project-&gt;cocos2d Application build and run the new application in the simulator and it should look something like this:</p>
<p style="text-align: center;"><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/Screen-shot-2010-01-27-at-00.04.39.png" class="broken_link" ><img class="size-full wp-image-173  aligncenter" title="Hello World cocos2d" src="http://www.benreeves.co.uk/wp-content/uploads/2010/01/Screen-shot-2010-01-27-at-00.04.39.png" alt="" width="539" height="290" /></a></p>
<p style="text-align: left;">Were going to build on this template to add a main menu</p>
<p style="text-align: left;">First download the test image and add it to the new xcode project (Make sure it is copied into the application directory)</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/MainMenuBackground.png" class="broken_link" ><img class="size-thumbnail wp-image-177  aligncenter" title="MainMenuBackground" src="http://www.benreeves.co.uk/wp-content/uploads/2010/01/MainMenuBackground-150x150.png" alt="" width="150" height="150" /></a></p>
<p style="text-align: left;">Create a new class name MenuScene and add the following code to the header file:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import</span>
<span style="color: #6e371a;">#import &quot;cocos2d.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> MenuScene <span style="color: #002200;">:</span> Scene
<span style="color: #002200;">&#123;</span>
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@interface</span> MenuLayer <span style="color: #002200;">:</span> Layer
<span style="color: #002200;">&#123;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>startGame<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>sender;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>help<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>sender;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>The add the following to the .m file:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;MenuScene&quot;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> MenuScene
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> init
<span style="color: #002200;">&#123;</span>
    self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        Sprite <span style="color: #002200;">*</span> bg <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>Sprite spriteWithFile<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;MainMenuBackground.png&quot;</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>bg setPosition<span style="color: #002200;">:</span>ccp<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">160</span>, <span style="color: #2400d9;">240</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>self addChild<span style="color: #002200;">:</span>bg z<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>self addChild<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>MenuLayer node<span style="color: #002200;">&#93;</span> z<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> MenuLayer
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span> init
<span style="color: #002200;">&#123;</span>
    self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span>MenuItemFont setFontSize<span style="color: #002200;">:</span><span style="color: #2400d9;">24</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>MenuItemFont setFontName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Helvetica&quot;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
        MenuItem <span style="color: #002200;">*</span>start <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>MenuItemFont itemFromString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Start Game&quot;</span>
												target<span style="color: #002200;">:</span>self
											  selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>startGame<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
        MenuItem <span style="color: #002200;">*</span>help <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>MenuItemFont itemFromString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Help&quot;</span>
											   target<span style="color: #002200;">:</span>self
											 selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>help<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
        Menu <span style="color: #002200;">*</span>menu <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>Menu menuWithItems<span style="color: #002200;">:</span>start, help, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
		menu.color <span style="color: #002200;">=</span> ccc3<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;
&nbsp;
        <span style="color: #002200;">&#91;</span>menu alignItemsVertically<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>self addChild<span style="color: #002200;">:</span>menu<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>startGame<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>sender
<span style="color: #002200;">&#123;</span>
    NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;start game&quot;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>help<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>sender <span style="color: #002200;">&#123;</span>
    NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;help&quot;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Finally modify the app delegate (CocosTestAppDelegate.m) to include MenuScene.h</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;MainMenuScene.h&quot;</span></pre></div></div>

<p>and replace the line:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Director sharedDirector<span style="color: #002200;">&#93;</span> runWithScene<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>HelloWorld scene<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>with:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Director sharedDirector<span style="color: #002200;">&#93;</span> runWithScene<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>MenuScene node<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>also remove the line:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Director sharedDirector<span style="color: #002200;">&#93;</span> setDeviceOrientation<span style="color: #002200;">:</span>CCDeviceOrientationLandscapeLeft<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Compile and run the project and you should end up with a menu and two clickable buttons:</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/Screen-shot-2010-01-27-at-00.24.19.png" class="broken_link" ><img class="size-medium wp-image-178  aligncenter" title="Result" src="http://www.benreeves.co.uk/wp-content/uploads/2010/01/Screen-shot-2010-01-27-at-00.24.19-161x300.png" alt="" width="161" height="300" /></a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fcocos2d-iphone-tutorial%2F&amp;linkname=Cocos2d%20iphone%20tutorial"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/cocos2d-iphone-tutorial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My Review of Wordpress 2.9.1 (So Far)</title>
		<link>http://benreeves.co.uk/my-review-of-wordpress-2-9-1-so-far/</link>
		<comments>http://benreeves.co.uk/my-review-of-wordpress-2-9-1-so-far/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 23:12:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[blogging software]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress vs drupal]]></category>

		<guid isPermaLink="false">http://www.benreeves.co.uk/?p=156</guid>
		<description><![CDATA[I&#8217;ve been meaning to redesign benreeves.co.uk for a while, however there were two things stopping me:

Graphics / Html have never been my strong point. Sure I can cut and paste from other designs and cobble together something which resembles a web page, but they always look just that, cobbled together.
It doesn&#8217;t get much traffic or [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to redesign benreeves.co.uk for a while, however there were two things stopping me:</p>
<ul>
<li>Graphics / Html have never been my strong point. Sure I can cut and paste from other designs and cobble together something which resembles a web page, but they always look just that, cobbled together.</li>
<li>It doesn&#8217;t get much traffic or provide much business value at present and hence I don&#8217;t want to have to pay a designer.</li>
</ul>
<p>I had previously used iWeb and then up until recently rapidweaver, these applications are fine up to a point, but soon there lack of advanced features and template editing becomes apparent.  Between an application like iWeb and designing the site from scratch we have content management systems (CMS), the most popular being Drupal, Joomla and wordpress.</p>
<p>I had heard good reviews of Drupal before so this was my first port of call. I won&#8217;t go into detail about the setup, but it was overall fairly straight forward, however after that things went downhill. The admin panel was confusing and slow, I spent several hours trying to get the sites navigation and content to resemble something how I wanted. It seemed like every theme I tried ended up looking like the same boxy layout, you could immediately tell the site was using drupal. The themes were poor quality, difficult to modify and modules were complicated to install. After my drupal experience I gave up on CMS for a while.</p>
<p>Today I decided to give wordpress a shot. Since I already had php setup, Installation really was a case on unpacking the zip file and placing it in the apache home directory. I immediately went to install a new template. Wordpress features an automatic template installation system, however this is where I hit my first stumbling block. Wordpress kept asking for my ftp information, however a quick google search revealed my file permissions were wrong.</p>
<p style="text-align: center;"><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/connecinfo-300x176.jpg" class="broken_link" ><img class="size-full wp-image-158  aligncenter" title="Wordpress asking for ftp connection" src="http://www.benreeves.co.uk/wp-content/uploads/2010/01/connecinfo-300x176.jpg" alt="" width="300" height="176" /></a></p>
<p style="text-align: center;">The following command did the trick: <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">sudo chmod -R 777 /Path/To/Wordpress</span></p>
<p>Other than that templates where easy to install and I had found several decent looking ones in a few minutes. The next task was to add a contact page, unfortunatly wordpress doesn&#8217;t come with one as standard however the plugin &#8220;Contact Form 7&#8243; was easy to install without leaving the admin interface. Even the more advanced task of separating the wordpress blog into two different pages (see <a href="http://codex.wordpress.org/The_Loop">The Loop</a>) could be done without leaving the admin interface.</p>
<p>Overall I have been extremely impressed so, maybe I&#8217;ll run into customisation limitations again later, however at the moment I can&#8217;t praise wordpress enough.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fmy-review-of-wordpress-2-9-1-so-far%2F&amp;linkname=My%20Review%20of%20Wordpress%202.9.1%20%28So%20Far%29"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/my-review-of-wordpress-2-9-1-so-far/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Reachability Code to your app</title>
		<link>http://benreeves.co.uk/adding-reachability-code-to-your-app/</link>
		<comments>http://benreeves.co.uk/adding-reachability-code-to-your-app/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 19:37:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://www.benreeves.co.uk/?p=130</guid>
		<description><![CDATA[Ok so iVersion 1.4 was declined due to not loading correctly when their is no network connectivity.
When the device is connected to a cellular network, iVersion does not load its contents.  After the user enters the URL (http://svn.collab.net/repos/svn/trunk/) and taps &#8220;connect,&#8221; an error message is received.
Apparently the error message is not clear enough or something, anyway this [...]]]></description>
			<content:encoded><![CDATA[<p>Ok so iVersion 1.4 was declined due to not loading correctly when their is no network connectivity.</p>
<blockquote><p>When the device is connected to a cellular network, iVersion does not load its contents.  After the user enters the URL (<a href="http://svn.collab.net/repos/svn/trunk/" class="broken_link"  target="_blank">http://svn.collab.net/repos/svn/trunk/</a>) and taps &#8220;connect,&#8221; an error message is received.</p></blockquote>
<p>Apparently the error message is not clear enough or something, anyway this is not a rant, this is what apple recommends.</p>
<blockquote><p>Please take a look at the Reachability iPhone program sample which demonstrates the use of the System Configuration Reachability API to detect the absence of WiFi and Wireless Wide Area Network (WWAN) services. Your application can then take appropriate action at the first point where network services are required.</p></blockquote>
<p>The sample code can be found on Apple developer site, however the two file we are interested in are:</p>
<p><strong>Download the Reachability Code:</strong><br />
<a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/Reachability.h" class="broken_link" >Reachability.h</a></p>
<p><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/Reachability.m" class="broken_link" >Reachability.m</a></p>
<p><strong>How to use:</strong><br />
Lets say you have a simple UILabel which you want to update with either &#8220;(Offline)&#8221; or &#8220;(Online)&#8221; depending on whether the network is reachable. Your view controller would be defined something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> MyStatusView <span style="color: #002200;">:</span> UIViewController
<span style="color: #002200;">&#123;</span>
	UILabel <span style="color: #002200;">*</span> statusLabel;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span>nonatomic, assign<span style="color: #002200;">&#41;</span> IBOutlet UILabel <span style="color: #002200;">*</span> statusLabel;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>reachabilityChanged<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSNotification</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>note;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>updateStatus;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Then we add the following code to the view controller .m file:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>viewWillAppear<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>animated
<span style="color: #002200;">&#123;</span>
	self.reachability <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>Reachability reachabilityWithHostName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;google.com&quot;</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>reachability startNotifer<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNotificationCenter</span> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>reachabilityChanged<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;kNetworkReachabilityChangedNotification&quot;</span> object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>self updateStatus<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>viewWillDisappear<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>animated
<span style="color: #002200;">&#123;</span>
	self.reachability <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
	<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNotificationCenter</span> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>reachabilityChanged<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSNotification</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification
<span style="color: #002200;">&#123;</span>
	<span style="color: #002200;">&#91;</span>self updateStatus<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>updateStatus
<span style="color: #002200;">&#123;</span>
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Reachability changed&quot;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>reachability currentReachabilityStatus<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> NotReachable<span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		statusLabel.text <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;(Offline)&quot;</span>;
	<span style="color: #002200;">&#125;</span>
	<span style="color: #a61390;">else</span>
	<span style="color: #002200;">&#123;</span>
		statusLabel.text <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;(Online)&quot;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>I think it&#8217;s fairly self explanatory. Basically when the view appears the reachability class is created and started using startNotifier. Then we hook in our reachabilityChanged: method into the notification centre, so it is automatically called when the network status changes. reachabilityChanged: calls updateStatus which simply changes our label depending on the connectivity.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fadding-reachability-code-to-your-app%2F&amp;linkname=Adding%20Reachability%20Code%20to%20your%20app"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/adding-reachability-code-to-your-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIKit Modal Prompt</title>
		<link>http://benreeves.co.uk/uikit-modal-prompt/</link>
		<comments>http://benreeves.co.uk/uikit-modal-prompt/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 19:20:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[modal prompt]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.benreeves.co.uk/?p=121</guid>
		<description><![CDATA[in order to not lock the ui iVersion runs it&#8217;s svn commands in a seperate threads. The promblem arises when one of thses threads needs to prompt for a value e.g. a username / password. Firstly UIKit does not provide a modal alert view and secondly UIKit should only be called from the mainThread.
First we [...]]]></description>
			<content:encoded><![CDATA[<p>in order to not lock the ui iVersion runs it&#8217;s svn commands in a seperate threads. The promblem arises when one of thses threads needs to prompt for a value e.g. a username / password. Firstly UIKit does not provide a modal alert view and secondly UIKit should only be called from the mainThread.</p>
<p>First we create a new class which has a view which will be loaded from a nib, a thread condition to lock the calling thread and two NSString fields to store the result and the string of the button which was clicked.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> MessagePrompt <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span>
<span style="color: #002200;">&#123;</span>
&nbsp;
UIView <span style="color: #002200;">*</span> view;
<span style="color: #400080;">NSCondition</span> <span style="color: #002200;">*</span> promptCondition;
<span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span> clickedButton Text;
<span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span> result;
<span style="color: #002200;">&#123;</span>
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Our new prompt method can be called from the thread which needs to be locked, it will subsequently call UIKit on the main thread.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">+</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>newPrompt<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>MessagePrompt<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>prompt
<span style="color: #002200;">&#123;</span>
&nbsp;
     <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSThread</span> currentThread<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSThread</span> mainThread<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
          <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;Should not be called by Main thread<span style="color: #2400d9;">\n</span>&quot;</span><span style="color: #002200;">&#41;</span>;
          <span style="color: #a61390;">return</span> <span style="color: #a61390;">nil</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
     prompt.promptCondition <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSCondition</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>prompt performSelectorOnMainThread<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>prompt<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> withObject<span style="color: #002200;">:</span>view waitUntilDone<span style="color: #002200;">:</span><span style="color: #a61390;">NO</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>prompt.promptCondition wait<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">return</span> prompt;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>This method is called by +(id)NewPrompt and displays a prompt in our window. It also adds targets to each UIButton to receive user actions.</p>
<p style="text-align: center;"><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/screen-shot-2009-10-23-at-15.44.00.png" class="broken_link" ><img class="size-full wp-image-123  aligncenter" title="Prompt Nib Example" src="http://www.benreeves.co.uk/wp-content/uploads/2010/01/screen-shot-2009-10-23-at-15.44.00.png" alt="" width="380" height="269" /></a></p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>prompt<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIView<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>inView
<span style="color: #002200;">&#123;</span>
     <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span> nib <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> loadNibNamed<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;MyPromptView&quot;</span> owner<span style="color: #002200;">:</span>self options<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
     inView <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>nib objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;	
&nbsp;
     <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span> subviews <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.view subviews<span style="color: #002200;">&#93;</span>;
     <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span> cview <span style="color: #a61390;">in</span> subviews<span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
          <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>cview isKindOfClass<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIButton class<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
          <span style="color: #002200;">&#123;</span>
               UIButton <span style="color: #002200;">*</span> button <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>UIButton<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>cview;
                <span style="color: #002200;">&#91;</span>button addTarget<span style="color: #002200;">:</span>self action<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>clicked<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> forControlEvents<span style="color: #002200;">:</span>UIControlEventTouchDown<span style="color: #002200;">&#93;</span>;
          <span style="color: #002200;">&#125;</span>
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>inView.superview addSubview<span style="color: #002200;">:</span>view<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>This is called when a user clicks a button, it finds the value field and retreives and stores the value in self.message. The prompt condition is then signalled which causes the calling thread to continue running.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>clicked<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIButton<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>sender
<span style="color: #002200;">&#123;</span>
     self.clickedButton <span style="color: #002200;">=</span> sender.currentTitle;
&nbsp;
     UITextView <span style="color: #002200;">*</span> text <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>iVersionAppDelegate findSubViewOfKind<span style="color: #002200;">:</span>self.view class<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UITextView class<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
     <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>text<span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
         self.message <span style="color: #002200;">=</span> text.text;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>self.view removeFromSuperview<span style="color: #002200;">&#93;</span>;
     self.view <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>promptCondition <span style="color: #a61390;">signal</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Usage</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">/* Called when svn requires a log message */</span>
svn_error_t <span style="color: #002200;">*</span>
iversion_svn_cl__get_log_message<span style="color: #002200;">&#40;</span><span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">**</span>log_msg,
<span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">**</span>tmp_file,
<span style="color: #a61390;">const</span> apr_array_header_t <span style="color: #002200;">*</span>commit_items,
<span style="color: #a61390;">void</span> <span style="color: #002200;">*</span>baton,
apr_pool_t <span style="color: #002200;">*</span>pool<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
&nbsp;
CommitLogMessagePrompt <span style="color: #002200;">*</span> prompt <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>CommitLogMessagePrompt newPrompt<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">/* Clicked Continue */</span>
     <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>prompt.clickedButton isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Continue&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">*</span>log_msg <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>prompt.message UTF8String<span style="color: #002200;">&#93;</span>;
         <span style="color: #a61390;">return</span> SVN_NO_ERROR;
    <span style="color: #002200;">&#125;</span>
&nbsp;
     <span style="color: #a61390;">return</span> svn_error_create<span style="color: #002200;">&#40;</span>SVN_ERR_CANCELLED, <span style="color: #a61390;">NULL</span>, _<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;Delete Cancelled&quot;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fuikit-modal-prompt%2F&amp;linkname=UIKit%20Modal%20Prompt"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/uikit-modal-prompt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone File System Monitor</title>
		<link>http://benreeves.co.uk/iphone-file-system-monitor/</link>
		<comments>http://benreeves.co.uk/iphone-file-system-monitor/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 19:04:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[file monitor]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.benreeves.co.uk/?p=111</guid>
		<description><![CDATA[I require simple for system monitoring for a new (undisclosed) iphone project. It doesn&#8217;t appear that there is any equivilant to ionotify for the iphone, so I whipped up this polling file system monitor which meets my basic requirements. If you find this code useful feel free to use / distribute etc.

#include &#34;FileSystemMonitor.h&#34;
&#160;
//Setup the monitor
FileSystemMonitor [...]]]></description>
			<content:encoded><![CDATA[<p>I require simple for system monitoring for a new (undisclosed) iphone project. It doesn&#8217;t appear that there is any equivilant to ionotify for the iphone, so I whipped up this polling file system monitor which meets my basic requirements. If you find this code useful feel free to use / distribute etc.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#include &quot;FileSystemMonitor.h&quot;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//Setup the monitor</span>
FileSystemMonitor <span style="color: #002200;">*</span> monitor <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>FileSystemMonitor alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
monitor.delegate <span style="color: #002200;">=</span> self;
<span style="color: #002200;">&#91;</span>monitor monitorPath<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;/&quot;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">//...In your delegate class</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>nodeWasCreatedAt<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path
<span style="color: #002200;">&#123;</span>
     <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;Created %s<span style="color: #2400d9;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>path UTF8String<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>nodeWasDeletedAt<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path
<span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;Deleted %s<span style="color: #2400d9;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>path UTF8String<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>fileSizeDidchange<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path bytes<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">size_t</span><span style="color: #002200;">&#41;</span>difference
<span style="color: #002200;">&#123;</span>
     <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;file Added %ul bytes<span style="color: #2400d9;">\n</span>&quot;</span>, difference<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p><strong>Notes:</strong></p>
<ul>
<li>Can monitor for Deleted files, Created Files and File Size Changes</li>
<li>On an iPhone 3GS it is able to monitor the entire SVN 1.6 source tree and the iVersion source tree (total 11,050 File/Directories) in an execution time of 12s. Due to the low thread priority and the fact that the majority of execution time is IO it does not cause much/any slow down to the UI. However there is still room for improvement.</li>
</ul>
<p><strong>Download:</strong></p>
<p><strong><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/FileSystemMonitor.h" class="broken_link" >FileSystemMonitor.h</a></strong></p>
<p><strong><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/FileSystemMonitor.m" class="broken_link" >FileSystemMonitor.m</a></strong></p>
<p><strong><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/FileMonitorDelegateProtocol.h" class="broken_link" >FileMonitorDelegateProtocol.h</a></strong></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fiphone-file-system-monitor%2F&amp;linkname=iPhone%20File%20System%20Monitor"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/iphone-file-system-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic Arrays with C</title>
		<link>http://benreeves.co.uk/dynamic-arrays-with-c/</link>
		<comments>http://benreeves.co.uk/dynamic-arrays-with-c/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 17:12:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dynamic arrays]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=81</guid>
		<description><![CDATA[In the final push to add syntax highlighting to iVersion I have been working on optimising the parser.
In the inner parsing loop I have been using the standard NSMutableArray to keep track of various objects and tokens. Objective C message passing is of course an order of times slower than a C function call, even [...]]]></description>
			<content:encoded><![CDATA[<p>In the final push to add syntax highlighting to iVersion I have been working on optimising the parser.</p>
<p>In the inner parsing loop I have been using the standard NSMutableArray to keep track of various objects and tokens. Objective C message passing is of course an order of times slower than a C function call, even if purely for the fact that they can’t be inlined. A great article that explains more about the objective c runtime an be found on the <a href="http://cocoasamurai.blogspot.com/2010/01/understanding-objective-c-runtime.html" target="_blank">cocoa samurai blog</a></p>
<p>So I decided to drop down to a dynamic array using plain C. However even though I’m sure dynamic arrays have been implement thousands of times I couldn’t seem to find any simple implementations.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">//** Usage</span>
<span style="color: #11740a; font-style: italic;">//Create an array with capacity 2</span>
CArray <span style="color: #002200;">*</span> array <span style="color: #002200;">=</span> CArrayInit<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">//Add two buckets</span>
CArrayAdd<span style="color: #002200;">&#40;</span>array, <span style="color: #bf1d1a;">&quot;test&quot;</span><span style="color: #002200;">&#41;</span>;
CArrayAdd<span style="color: #002200;">&#40;</span>array, <span style="color: #bf1d1a;">&quot;another test&quot;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">//Add another and it will resize accordingly</span>
CArrayAdd<span style="color: #002200;">&#40;</span>array, <span style="color: #bf1d1a;">&quot;yet another&quot;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">//Print All</span>
<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> ii <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; ii <span style="color: #002200;">&amp;</span>lt; array<span style="color: #002200;">-&amp;</span>gt;count; <span style="color: #002200;">++</span>ii<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span> buffer <span style="color: #002200;">=</span> CArrayObjectAtIndex<span style="color: #002200;">&#40;</span>array, ii<span style="color: #002200;">&#41;</span>;
        <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;Index: %d - %s<span style="color: #2400d9;">\n</span>&quot;</span>, ii, buffer<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p><strong>Download:</strong></p>
<p><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/CArray.h" class="broken_link" >CArray.h</a></p>
<p><a href="http://www.benreeves.co.uk/wp-content/uploads/2010/01/CArray.c" class="broken_link" >CArray.c</a></p>
<p><strong>Notes:</strong><br />
The following test  function usually reports about 5x faster than NSMutableArray which I think is a credit to how efficient the Objective C library and messaging system really is considering all the things your missing out on (exceptions, null pointers etc)</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">void</span> CArrayTestRoutine<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
&nbsp;
    CArray <span style="color: #002200;">*</span> array <span style="color: #002200;">=</span> CArrayInit<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;
&nbsp;
    NSTimeInterval start <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDate</span> date<span style="color: #002200;">&#93;</span> timeIntervalSince1970<span style="color: #002200;">&#93;</span>;
    <span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span> test;
&nbsp;
    <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> ii <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; ii <span style="color: #002200;">&amp;</span>lt; <span style="color: #2400d9;">10000000</span>; <span style="color: #002200;">++</span>ii<span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        CArrayAdd<span style="color: #002200;">&#40;</span>array, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;test&quot;</span><span style="color: #002200;">&#41;</span>;
        test <span style="color: #002200;">=</span> CArrayObjectAtIndex<span style="color: #002200;">&#40;</span>array, CArrayCount<span style="color: #002200;">&#40;</span>array<span style="color: #002200;">&#41;</span><span style="color: #002200;">-</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
     CArrayRemoveObjectAtIndex<span style="color: #002200;">&#40;</span>array, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;
&nbsp;
     NSTimeInterval end <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDate</span> date<span style="color: #002200;">&#93;</span> timeIntervalSince1970<span style="color: #002200;">&#93;</span>;
     <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;CArray 100,000,000 Elements took %fs<span style="color: #2400d9;">\n</span>&quot;</span>, end<span style="color: #002200;">-</span>start<span style="color: #002200;">&#41;</span>;
&nbsp;
     <span style="color: #400080;">NSMutableArray</span> <span style="color: #002200;">*</span> nsarray <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSMutableArray</span> alloc<span style="color: #002200;">&#93;</span> initWithCapacity<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
     start <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDate</span> date<span style="color: #002200;">&#93;</span> timeIntervalSince1970<span style="color: #002200;">&#93;</span>;
     <span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span> <span style="color: #a61390;">string</span>;
&nbsp;
     <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> ii <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; ii <span style="color: #002200;">&amp;</span>lt; <span style="color: #2400d9;">10000000</span>; <span style="color: #002200;">++</span>ii<span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span>nsarray addObject<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;test&quot;</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #a61390;">string</span> <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>nsarray objectAtIndex<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>nsarray count<span style="color: #002200;">&#93;</span><span style="color: #002200;">-</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>nsarray removeObjectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
&nbsp;
     end <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDate</span> date<span style="color: #002200;">&#93;</span> timeIntervalSince1970<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>nsarray release<span style="color: #002200;">&#93;</span>;
     <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;NSMutableArray 100,000,000 Elements took %fs<span style="color: #2400d9;">\n</span>&quot;</span>, end<span style="color: #002200;">-</span>start<span style="color: #002200;">&#41;</span>;
&nbsp;
     <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;%s<span style="color: #2400d9;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span><span style="color: #a61390;">string</span> UTF8String<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
     <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;%s<span style="color: #2400d9;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>test UTF8String<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
     CArrayDestroy<span style="color: #002200;">&#40;</span>array<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #002200;">&#125;</span></pre></div></div>

<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fdynamic-arrays-with-c%2F&amp;linkname=Dynamic%20Arrays%20with%20C"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/dynamic-arrays-with-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iVersion</title>
		<link>http://benreeves.co.uk/75/</link>
		<comments>http://benreeves.co.uk/75/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 17:06:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[svn client]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=75</guid>
		<description><![CDATA[iVersion is a SVN client for the iphone 3G and ipod touch.
iVersion uses the open source subversion 1.6 client library, written in plain C, with an Objective C wrapper for simpler interfacing with the Objective C UI. Using an objective C Wrapper the client can easily be abstracted to work with other version control protocols. In [...]]]></description>
			<content:encoded><![CDATA[<p><strong>iVersion is a SVN client for the iphone 3G and ipod touch.</strong></p>
<p>iVersion uses the open source <a rel="self" href="http://subversion.tigris.org/">subversion 1.6 </a>client library, written in plain C, with an Objective C wrapper for simpler interfacing with the Objective C UI. Using an objective C Wrapper the client can easily be abstracted to work with other version control protocols. In the future <a rel="self" href="http://git-scm.com/">git</a>, <a rel="self" href="http://www.selenic.com/mercurial/wiki/">mercurial</a>and <a rel="self" href="http://bazaar-vcs.org/en/">bazaar</a> support maybe included.</p>
<h2>Features</h2>
<ul>
<li>Multi-threaded non-locking ui</li>
<li>OpenSSL support for https:// and svn+ssh:// connections</li>
<li>svn commands: list, info, cat,</li>
<li>Browse Directories</li>
<li>View Commit Logs</li>
<li>View file Info</li>
<li>Bookmarks, History &amp; Directory Cache through NSUserDefaults</li>
</ul>
<p><em>** Commit Support<br />
Subversion does not allow commiting of a single file without a working copy of the previous directory. A work around for this has been found and commit support should be available in a future version.</em></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2F75%2F&amp;linkname=iVersion"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/75/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mosaico Web Gallery</title>
		<link>http://benreeves.co.uk/mosaico-web-gallery/</link>
		<comments>http://benreeves.co.uk/mosaico-web-gallery/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:23:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[image gallery]]></category>
		<category><![CDATA[mosaico]]></category>
		<category><![CDATA[web gallery]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=23</guid>
		<description><![CDATA[Specification:
 Desktop Application for Mac OSX 10.5
1. Loads an XML file;
2. Presents the XML data in an a table that can be sorted by each column;
3. Enables custom views of data, i.e., show all columns or only some;
4. Exports updated information back into the XML format;
5. Has an &#8220;FTP Widget&#8221; that can upload images to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Specification:<br />
</strong> Desktop Application for Mac OSX 10.5</p>
<p>1. Loads an XML file;<br />
2. Presents the XML data in an a table that can be sorted by each column;<br />
3. Enables custom views of data, i.e., show all columns or only some;<br />
4. Exports updated information back into the XML format;<br />
5. Has an &#8220;FTP Widget&#8221; that can upload images to a server.</p>
<p><strong>Solution:<br />
</strong> As per the clients specification the application was written using primarily Objective C, with Xcode as the development IDE. The UI is designed to be powerful and customizable. Profiles can be created to customize the view of the XML data. The Main window is split between an image view and a table view, which the user can adjust and hide if necessary, which is smoothly animated. Side drawers are used to display additional Options to the user.</p>
<p>XML parsing is handled using Cocoa’s bundled <span style="color: #ff3399;">NSXMLParser</span> using the format supplied by the client. The XML file can be imported, searched and exported using a tabular style layout. Fields can be edited, copied or deleted using single or multiple selections. The XML file can be uploaded to the site from within the app using <span style="color: #ff3399;">NSURLConnection</span> and http post.</p>
<p>Initially the possibility of using an existing Objective C Ftp library, such as <a title="Connection kit FTP framework" href="http://opensource.utr-software.com/connection/" target="_blank">Connection kit</a> was explored, as well as the possibility of interfacing directly with an existing Mac ftp client such as Cyberduck. However the final solution was to write a lightweight ftp client using C Sockets with an Objective C API wrapper. The result is the user can quickly and easily upload and download images directly from the program, without any external dependancies.</p>
<p>Mosiaco has been tested throughly with <a title="Xcode IDE" href="http://developer.apple.com/technology/tools.html" target="_blank">Xcode’s Leaks</a> and <a title="GNU Debugger" href="http://www.gnu.org/software/gdb/" target="_blank">GNU gdb</a> and is stable and leak free without garbage collection.</p>
<p><em><span style="color: #808080;">“ zootreeves was exactly the kind of provider I was looking for in this collaboration: he knew exactly how to take my vision for the app and make it a reality. In addition, he always brought alternative solutions and new ideas to the table. The final product is above and beyond what I had hoped to create. He was a thorough pleasure to work with and I would highly recommend him to anyone looking for a Mac OS X app developer. Timothy Allen President &amp; Creative Director Hypergolica, Inc. www.hypergolica.net”</span></em></p>
<p>For more information regarding the Mosaico web gallery desktop software or if you are interested in finding an all in one solution for your online web gallery hosting please contact <a href="http://www.mosaico-webgallery.com/">Mosaico</a> or <a href="http://www.hypergolica.net/">Hypergolica</a></p>

<div class="ngg-galleryoverview" id="ngg-gallery-2-23">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://benreeves.co.uk/mosaico-web-gallery/?show=slide">
			[Show as slideshow]		</a>
	</div>

	
	<!-- Thumbnails -->
		
	<div id="ngg-image-23" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1000-full.jpg" title=" "  >
								<img title="page5-1000-full" alt="page5-1000-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1000-full.jpg" width="96" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-24" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1001-full.jpg" title=" "  >
								<img title="page5-1001-full" alt="page5-1001-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1001-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-25" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1002-full.jpg" title=" "  >
								<img title="page5-1002-full" alt="page5-1002-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1002-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-26" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1003-full.jpg" title=" "  >
								<img title="page5-1003-full" alt="page5-1003-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1003-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-27" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1004-full.jpg" title=" "  >
								<img title="page5-1004-full" alt="page5-1004-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1004-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-28" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1005-full.jpg" title=" "  >
								<img title="page5-1005-full" alt="page5-1005-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1005-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-29" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1006-full.jpg" title=" "  >
								<img title="page5-1006-full" alt="page5-1006-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1006-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-30" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/page5-1007-full.jpg" title=" "  >
								<img title="page5-1007-full" alt="page5-1007-full" src="http://benreeves.co.uk/wp-content/gallery/mosaico-web-gallery-screenshots/thumbs/thumbs_page5-1007-full.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fbenreeves.co.uk%2Fmosaico-web-gallery%2F&amp;linkname=Mosaico%20Web%20Gallery"><img src="http://benreeves.co.uk/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://benreeves.co.uk/mosaico-web-gallery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
