<?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>XS-Labs - Blog</title>
	<atom:link href="http://www.noxeos.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.noxeos.com</link>
	<description>XS-Labs is the home of the XEOS Operating System and related projects.</description>
	<lastBuildDate>Sun, 28 Apr 2013 13:11:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>XS-Labs</title>
		<link>http://www.noxeos.com/2013/04/28/xs-labs/</link>
		<comments>http://www.noxeos.com/2013/04/28/xs-labs/#comments</comments>
		<pubDate>Sun, 28 Apr 2013 13:11:35 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=717</guid>
		<description><![CDATA[That&#8217;s it! Following my decision to close all eosgarden activities, here&#8217;s the new home for my personal OpenSource projects: www.xs-labs.com As said previously, I&#8217;ll now focus only on the development of the XEOS Operating System, and related projects. Enjoy!]]></description>
				<content:encoded><![CDATA[<p>That&#8217;s it! Following my decision to close all eosgarden activities, here&#8217;s the new home for my personal OpenSource projects: <a href="http://www.xs-labs.com/" title="XS-Labs">www.xs-labs.com</a></p>
<p>As said previously, I&#8217;ll now focus only on the development of the <a href="http://www.xs-labs.com/en/projects/xeos" title="XEOS">XEOS Operating System</a>, and related projects.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2013/04/28/xs-labs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring cleaning</title>
		<link>http://www.noxeos.com/2013/04/26/spring-cleaning/</link>
		<comments>http://www.noxeos.com/2013/04/26/spring-cleaning/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 15:26:56 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=682</guid>
		<description><![CDATA[Ok folks, that’s it… A few days ago, I decided to close all my software development activities on my main site, eosgarden.com. It was a tough decision to make, as it implies the discontinuation of all previously published software. But I really needed to stop focusing on the past, and on software I originally developed [...]]]></description>
				<content:encoded><![CDATA[<p>Ok folks, that’s it… A few days ago, I decided to close all my software development activities on my main site, <a href="http://www.eosgarden.com/">eosgarden.com</a>.</p>
<p>It was a tough decision to make, as it implies the discontinuation of all previously published software.<br />
But I really needed to stop focusing on the past, and on software I originally developed years ago.</p>
<p>Simply some fresh air, in order to focus on new/actual stuff and personal projects.</p>
<p>The eosgarden website will stay as-is, but will no longer be updated.<br />
All published software have been discontinued, meaning they won’t be updated anymore.<br />
Commercial software are now completely free to use (a valid serial number is provided on the download page).</p>
<p>That’s the end of a long story, but I have to admit it feels good.<br />
Maintaining all this stuff was just too much, between my work as a development engineer for <a href="http://www.digidna.net/">DigiDNA</a> (an awesome swiss-australian software company), my current and personal code projects, and my private life.</p>
<p>So here we go, ready for a complete new start.<br />
But this time, no more commercial software, and in fact no more end-user software at all.<br />
I’ll just focus on the personal projects I want to develop, like the <a href="https://github.com/macmade/XEOS">XEOS Operating System</a>, and related stuff.<br />
A new web home will soon be launched, for all of this stuff, so stay tuned…</p>
<p>And hopefully, I’ll have some more time blogging now… : )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2013/04/26/spring-cleaning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codeine &#8211; Diagnostics &amp; Code completion</title>
		<link>http://www.noxeos.com/2012/08/19/codeine-diagnostics-code-completion/</link>
		<comments>http://www.noxeos.com/2012/08/19/codeine-diagnostics-code-completion/#comments</comments>
		<pubDate>Sun, 19 Aug 2012 20:55:02 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=664</guid>
		<description><![CDATA[Since I announced Codeine, I mainly worked on live code diagnostics and code completion. Live diagnostics are now working well. I modified Codeine&#8217;s console area to provide live diagnostics, as well as the output console. The whole stuff now looks like this: On the right, you can select the output console, or the code diagnostics [...]]]></description>
				<content:encoded><![CDATA[<p>Since I <a href="http://www.noxeos.com/2012/08/15/announcing-codeine/">announced</a> Codeine, I mainly worked on live code diagnostics and code completion.</p>
<p>Live diagnostics are now working well.<br />
I modified Codeine&#8217;s console area to provide live diagnostics, as well as the output console.<br />
The whole stuff now looks like this:</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2012/08/debug.png"><img src="http://www.noxeos.com/wp-content/uploads/2012/08/debug.png" alt="" title="debug" width="600" height="95" class="size-full wp-image-665" /></a></p>
<p>On the right, you can select the output console, or the code diagnostics (here with a well formed code).</p>
<p>Diagnostics are provided in real-time:</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2012/08/errors.png"><img src="http://www.noxeos.com/wp-content/uploads/2012/08/errors.png" alt="" title="errors" width="572" height="305" class="size-full wp-image-668" /></a></p>
<p>In that example, I didn&#8217;t include the necessary C library headers, hence the errors.</p>
<p>Code completion is more complex, but it&#8217;s now beginning to work:</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2012/08/complete.png"><img src="http://www.noxeos.com/wp-content/uploads/2012/08/complete.png" alt="" title="complete" width="548" height="245" class="size-full wp-image-670" /></a></p>
<p>Code-completion results still needs to be filtered, and the final output will of course provide useful infos, just as xCode autocompletion.</p>
<p>So stay tuned. I&#8217;ll keep posting here updates about Codeine. : )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/08/19/codeine-diagnostics-code-completion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing Codeine</title>
		<link>http://www.noxeos.com/2012/08/15/announcing-codeine/</link>
		<comments>http://www.noxeos.com/2012/08/15/announcing-codeine/#comments</comments>
		<pubDate>Wed, 15 Aug 2012 22:34:13 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=654</guid>
		<description><![CDATA[I&#8217;m very pleased to announce the next software I&#8217;m working on: Codeine. Codeine is a full-featured code editor, runner and debugger for OS X, supporting C, C++ and Objective-C. It uses Clang/LLVM as compiler/linker toolchain, as well as for syntax highlighting, live diagnostics and code-completion. I always dreamed creating such an editor &#8211; now it&#8217;s [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m very pleased to announce the next software I&#8217;m working on: <strong>Codeine</strong>.</p>
<p>Codeine is a full-featured code editor, runner and debugger for OS X, supporting C, C++ and Objective-C.<br />
It uses Clang/LLVM as compiler/linker toolchain, as well as for syntax highlighting, live diagnostics and code-completion.</p>
<p>I always dreamed creating such an editor &#8211; now it&#8217;s finally here and running (well, for most parts).</p>
<p>Development as started 2 months ago, and it&#8217;s getting really fast.<br />
I&#8217;ve actually no idea when version 1 will be ready, but I&#8217;ll keep posting here about the project&#8217;s advancement. So stay tuned&#8230; : )</p>
<p>For more infos about the project, please visit: <a href="http://www.codeine-app.com/">www.codeine-app.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/08/15/announcing-codeine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple vs the World (again)</title>
		<link>http://www.noxeos.com/2012/08/06/apple-world/</link>
		<comments>http://www.noxeos.com/2012/08/06/apple-world/#comments</comments>
		<pubDate>Mon, 06 Aug 2012 21:16:45 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=641</guid>
		<description><![CDATA[iOS 6 is now close to release. Today, Apple made iOS 6 beta 4 available to registered developers. From a developer&#8217;s perspective, there&#8217;s quite a lot of changes. New APIs, new frameworks, changes in the default UI behavior, better iCloud support (let&#8217;s say so), etc. As usual you may say. It&#8217;s not really the same [...]]]></description>
				<content:encoded><![CDATA[<p>iOS 6 is now close to release.</p>
<p>Today, Apple made iOS 6 beta 4 available to registered developers.</p>
<p>From a developer&#8217;s perspective, there&#8217;s quite a lot of changes.</p>
<p>New APIs, new frameworks, changes in the default UI behavior, better iCloud support (let&#8217;s say so), etc. As usual you may say.</p>
<p>It&#8217;s not really the same from a user&#8217;s perspective, except a few and discreet UI changes and a FaceBook integration (yeah, now my calendar is full of crappy events from «friends»!).</p>
<p>But wait&#8230; There&#8217;s actually one more thing&#8230;</p>
<p>The first iOS 6 beta introduced a brand-new Maps app.</p>
<p>Google&#8217;s technology is out. Apple rolled-out its own system (or so), now with 3D support. Neat!</p>
<p>But unfortunately, after a few uses, it turns out this new Maps app is slightly less usable than the previous one, which used Google-Map&#8217;s services.</p>
<p>The 3D stuff is nice, indeed, but very limited (for now). And it&#8217;s actually not as nice as the new 3D stuff from Google.</p>
<p>So what?</p>
<p>It seems Apple and Google are no-longer friends. Wait, were they once actually?</p>
<p>With iOS 6 beta 4, it&#8217;s even worse: Apple removed the default YouTube app.</p>
<p>YouTube is owned by Google, so it&#8217;s not really a surprise.</p>
<p>But again, let&#8217;s think from a user&#8217;s perspective, not from a lawyer&#8217;s perspective, as Apple&#8217;s engineers and decision makers seems to do now.</p>
<p>Accessing YouTube contents will now require downloading a third-party app, maps and associated services are now less accurate&#8230;</p>
<p>What&#8217;s next? Maybe we&#8217;ll have in a few weeks iOS 6 beta 5, with an Apple made search-engine for Safari and no option to use Google by default&#8230;</p>
<p>I really don&#8217;t think this is the right way.</p>
<p>Apple&#8217;s past shows us that sometimes custom proprietary technologies are not the right way of doing awesome stuff.</p>
<p>Personally, it remembers me stuff like ADC (<a href="http://en.wikipedia.org/wiki/Apple_Display_Connector">Apple Display Connector</a>) port. Remember that?</p>
<p>This was actually brilliant.</p>
<p>Back in 2000, introduced with the <a href="http://en.wikipedia.org/wiki/Power_Mac_G4_Cube">Power Mac G4 Cube</a> (actually one of my most beloved machine), this was a proprietary modification of the DVI connector, allowing analog and digital display signals, USB and power from the very same cable.</p>
<p>It was just a dream. One cable to rule them all, finally!</p>
<p>I first thought that all displays (even PCs displays) would soon adopt this, as a new standard.</p>
<p>But this was unfortunately proprietary stuff, and the whole stuff ended as a flop.</p>
<p>I&#8217;m still crying when I see my <a href="http://www.everymac.com/monitors/apple/studio_cinema/specs/apple_studio_display_17_cl.html">17-Inch CRT Apple Studio Display</a> under my desk, covered with dust.</p>
<p>Recently, Apple rolled-out some amazing new technologies, in partnership with big companies, like Intel.</p>
<p>It seems they have finally learned from all that past.</p>
<p>Now we have for instance Thunderbolt. As it&#8217;s also developed by Intel, it guarantees a standard, even in the PC world.</p>
<p>Having such a standard guarantees the technology won&#8217;t go away, as the ADC did, and guarantees we&#8217;ll have soon tons of compatible hardware from the PC market.</p>
<p>Note I previously said: «It seems they have finally learned from all that past».</p>
<p>With iOS 6, the new Maps app and the removal of YouTube, I&#8217;m quite afraid they are beginning to do the same mistake again.</p>
<p>Maybe (and let&#8217;s hope so) it&#8217;s just me. And I would really enjoy being wrong about all this.</p>
<p>But I can&#8217;t stop thinking about it.</p>
<p>We&#8217;ll see actually. And of course Apple is now strong enough to do mistakes that would have been hard to recover from a few years ago.</p>
<p>But thinking as lawyers is not thinking different.</p>
<p>So please guys, think about us, poor stupid users, who just don&#8217;t care about all your patents&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/08/06/apple-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple kills the FileSystem App</title>
		<link>http://www.noxeos.com/2012/05/27/apple-kills-filesystem-app/</link>
		<comments>http://www.noxeos.com/2012/05/27/apple-kills-filesystem-app/#comments</comments>
		<pubDate>Sun, 27 May 2012 16:33:16 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=606</guid>
		<description><![CDATA[A few month ago, I decided to update my `FileSystem` iPhone app, available on the AppStore since a few years now. The purpose of the App was to let you access (read-only) the complete iOS filesystem, displaying every directory, file, file contents, etc. Just like a Finder on OS X. When I started iOS development [...]]]></description>
				<content:encoded><![CDATA[<p><img class=" wp-image-626 alignright" title="fs1" src="http://www.noxeos.com/wp-content/uploads/2012/05/fs1.png" alt="" width="230" height="346" /></p>
<p>A few month ago, I decided to update my `FileSystem` iPhone app, available on the AppStore since a few years now.</p>
<p>The purpose of the App was to let you access (read-only) the complete iOS filesystem, displaying every directory, file, file contents, etc.<br />
Just like a Finder on OS X.</p>
<p>When I started iOS development back then, being an experienced Cocoa developer, I suffered from the lack of informations about the filesystem, the organization of files, etc.<br />
Of course, I knew that all apps were sandboxed, but as a developer, I usually like to know how stuff is done on the platform I am developing for.</p>
<p>So the first test app I actually created was this one, as I wanted to see how the iOS system actually looked liked.<br />
It helped me a lot understanding iOS, and the sandboxing system.</p>
<p>As it helped me, I decided then to clean-up the project, provide a better UI, and publish it to the AppStore, as it would maybe help other developers.</p>
<div style="clear: both;"></div>
<p><img class="alignright wp-image-625" title="fs2" src="http://www.noxeos.com/wp-content/uploads/2012/05/fs2.png" alt="" width="230" height="346" /><br />
Of course, I knew that the app would certainly be rejected, even if it was perfectly clean.<br />
No private API, no hidden feature&#8230; Everything was in accordance with the AppStore review guidelines.</p>
<p>I published it, and it was accepted. Hooray!<br />
I even published a small update, to fix a crash on iOS 5 (the app was originally made for iOS 3).</p>
<p>And by the way, the app was available for free.</p>
<p>The app was working nice, I had some good reviews, but unfortunately, it wasn&#8217;t an universal app, so it wasn&#8217;t available for iPad.<br />
Of course, the iPad did not exist when I developed the app.</p>
<p>So I decided to update it.<br />
In fact, I rewrote it from scratch as an universal app, adding some extra features (like showing the iOS partitions, better and faster previews, open-in features, etc)  and a smoother and cleaner UI.</p>
<p>I was pretty confident, as the app was accepted twice.<br />
Moreover, the update also sticked with the AppStore review guidelines.<br />
No editing, so no security problem for Apple; as an iOS developer, I&#8217;m perfectly OK to play the Apple&#8217;s rules.</p>
<p>So I uploaded the new version (2.0) on the AppStore.<br />
The review process began. «Waiting for review», then a few weeks later, «In review». Nice.</p>
<p>Then I received a very strange mail from the AppStore review team:</p>
<blockquote><p>Subject: Your app requires additional review time</p>
<p>Dear Jean-David,</p>
<p>We are currently reviewing an app that you submitted for inclusion on the App Store, and want to let you know that the review process will require additional time. We apologize for the delay and will provide you with an update on the status of your app as soon as possible.</p>
<p>Sincerely,If you have any questions or concerns regarding this notice please contact us at <a href="mailto:appreview@apple.com">appreview@apple.com</a> .</p>
<p>App Review</p></blockquote>
<p>Wow&#8230; What was this?<br />
I published several iOS app, mainly for clients,  but I never received this kind of mail.<br />
What was happening?</p>
<p>I searched a bit on the internet, and discovered that the Apple App Review Team uses this when they don&#8217;t want an app an the AppStore, but have no legal right not to allow it.<br />
Apparently, some developers have such an app in this special «in review» state for more than a year.</p>
<p>Additional review time. When it becomes more than a year, I guess lots of developers will turn to another app&#8230;</p>
<p>I decided to wait, to see what could happen.<br />
Two month later, without a single answer or explanation from Apple,  I decided to contact them.</p>
<p>I explained the situation, very politely, asking if I could do something to help the review process, etc.</p>
<p>A few hours later, the app status changed to: «removed from sales», meaning it was not available anymore on the AppStore.<br />
Yep, Apple just killed it.</p>
<p>I then received an email from Apple&#8217;s WorldWide Developer Relations&#8217;s team:</p>
<blockquote><p>Hello Jean-David,</p>
<p>My name is XXX and I’m writing on behalf of the App Review Team at Apple.</p>
<p>I would like to talk to you about your app.</p>
<p>At your earliest convenience, can you please reply to this message and provide a phone number where you can be reached between 6:00 pm and 9:00 pm (your local time)? Additionally, if you can be reached after 9 pm your time, please let me know.</p>
<p>Once I receive your phone number, I will contact you at my next available opportunity.</p>
<p>Thank you and Best Regards,</p></blockquote>
<p>Mmmmm&#8230; It just looked bad.<br />
Anyway, I had this phone call.</p>
<p>The person at Apple told me my app was removed from sales, as it was accessing files from the system, and as it should only access files from it&#8217;s own sandbox.<br />
I then tried to explain the purpose of the app, insisting on the fact that no editing was allowed.</p>
<p>The person then explained me that, at Apple, <strong>some «business models» are not wanted</strong>.<br />
Ok&#8230; So it&#8217;s like: we don&#8217;t like your app, but we can&#8217;t reject it officially, so we are going to kill it, and ask you not to submit it anymore.</p>
<p>Neat&#8230;</p>
<p>So here I am. It&#8217;s not really a problem, as the app was free, and as I never tried to build something on it.<br />
But I just feel bad about Apple policy.</p>
<p>So the app is no more available from the AppStore, and will never be.</p>
<p>What&#8217;s the result of all this, now?</p>
<p>Well, the project is <a href="https://github.com/macmade/FileSystem">freely available on GitHub</a>, published under an OpenSource license.<br />
I&#8217;ll also publish the app for free on Cydia as soon as possible, for jailbroken iOS devices.</p>
<p>Nice  Apple&#8230; You just dislike OpenSource (most of the times), and fight against JailBreak&#8230;<br />
Maybe you should do something so developers don&#8217;t feel forced to break your rules.</p>
<p>Ok, maybe I&#8217;m a bit sarcastic. It&#8217;s just a little iPhone app, for other iOS geeks&#8230;</p>
<p>But think a minute. Today&#8217;s date is May 27, 2012.<br />
On June 1, 2012, all applications on the Mac AppStore are supposed to be sandboxed. You see now?</p>
<p>Lots of fun ahead for Mac developers.</p>
<p>I always loved Apple, and of course I still do.<br />
But times are definitively changing.</p>
<p>Years ago, maybe some don&#8217;t remembers or weren&#8217;t even born, developers helped Apple not to die.<br />
Now it just seems Apple wants to help developers quitting Mac development.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/05/27/apple-kills-filesystem-app/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mac OS X Mountain Lion Screens</title>
		<link>http://www.noxeos.com/2012/04/20/mac-os-mountain-lion-screens/</link>
		<comments>http://www.noxeos.com/2012/04/20/mac-os-mountain-lion-screens/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 23:22:46 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=567</guid>
		<description><![CDATA[Installation Setup &#8211; Apple ID (1 of 2) Setup -Apple ID (2 of 2) Setup -iCloud Setup &#8211; Find My Mac Setup &#8211; Done Desktop Reminders Messages Notes Preferences &#8211; Notifications GameCenter X11 Preferences &#8211; Security Notifications Open panel &#8211; iCloud support Open panel &#8211; Local files Safari]]></description>
				<content:encoded><![CDATA[<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/1.png" alt="" width="648" height="504" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Installation</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/2-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Setup &#8211; Apple ID (1 of 2)</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/3-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Setup -Apple ID (2 of 2)</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/4-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Setup -iCloud</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/5-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Setup &#8211; Find My Mac</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/6-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Setup &#8211; Done</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/7-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Desktop</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/8-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Reminders</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/9-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Messages</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/10-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Notes</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/11-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Preferences &#8211; Notifications</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/12-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">GameCenter</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/13-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">X11</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/14-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Preferences &#8211; Security</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/15-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Notifications</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/16-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Open panel &#8211; iCloud support</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img src="http://www.noxeos.com/wp-content/uploads/2012/04/17-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Open panel &#8211; Local files</div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><img class="aligncenter" src="http://www.noxeos.com/wp-content/uploads/2012/04/18-1024x640.png" alt="" width="645" height="403" /></div>
<div style="text-align: center;"></div>
<div style="text-align: center;">Safari</div>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/04/20/mac-os-mountain-lion-screens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mixing C++ with C/Objective-C</title>
		<link>http://www.noxeos.com/2012/01/16/mixing-c-cobjective-c/</link>
		<comments>http://www.noxeos.com/2012/01/16/mixing-c-cobjective-c/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 22:00:13 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=545</guid>
		<description><![CDATA[When working on a software project, you may sometimes have to mix programming languages. It may be because you need to use some specific libraries, because of code portability needs, whatever. When coding a Mac OS X (or iOS) application, you are usually going to use Objective-C as main language. It&#8217;s not mandatory, as you [...]]]></description>
				<content:encoded><![CDATA[<p>When working on a software project, you may sometimes have to mix programming languages.<br />
It may be because you need to use some specific libraries, because of code portability needs, whatever.</p>
<p>When coding a Mac OS X (or iOS) application, you are usually going to use Objective-C as main language.<br />
It&#8217;s not mandatory, as you can use the old Carbon API, or stuff like QT (C++), but it will usually be easier, at least for all the UI related stuff.</p>
<p>Mixing C with Objective-C is not a problem, as Objective-C is a strict superset of C.<br />
Whether you have pure C code, or if you are linking with a C library, there&#8217;s no issue.</p>
<p>Mixing C or Objective-C with C++ is not as easy.<br />
Although C++ was originally based on the C language, it&#8217;s not strictly a superset, so trying to use C++ code from C or Objective-C may not be always easy.</p>
<p>Of course, with Objective-C, you have the possibility to use Objective-C++ (.mm files).<br />
This way, you can use all the C++ features within Objective-C code.</p>
<p>But sometimes, this is not wanted. Moreover, it&#8217;s of course impossible with pure C.</p>
<p>Before going on, let&#8217;s take a little example in pure C.<br />
We are going to code a typical «hello world» application.</p>
<p>For this, we decide to have a file for our program&#8217;s main function, and another file for utility functions.</p>
<p>Let&#8217;s start by the utility functions file.<br />
First of all, we need to create a header file, named «lib.h»:</p>
<div class="code">
<code class="source"><span class="code-keyword">#ifndef __LIB_H__</span></code><br />
<code class="source"><span class="code-keyword">#define __LIB_H__</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> say_hello( <span class="code-keyword">void</span> );</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#endif</span></code>
</div>
<p>We declare here the prototype of a function named «say_hello».<br />
We are now going to provide an implementation, in a new file named «lib.c»:</p>
<div class="code">
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;stdio.h&gt;</span></code><br />
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">"lib.h"</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> say_hello( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-predefined">printf</span>( <span class="code-string">"hello, world\n"</span> );</code><br />
<code class="source">}</code>
</div>
<p>Nothing special here.<br />
Now let&#8217;s create our program&#8217;s main function, in a file named «main.c»:</p>
<div class="code">
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">"lib.h"</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">int</span> main( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    say_hello();</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">return</span> 0;</code><br />
<code class="source">}</code>
</div>
<p>Here, we just use our «say_hello» function, before exiting the program.</p>
<p>Let&#8217;s take a look at the compilation.<br />
We are going to generate an object file (.o) for each C file, and then link them together.</p>
<p>Let&#8217;s start with «lib.c»:</p>
<div class="code">
<code class="source">gcc -Wall -o lib.o -c lib.c</code>
</div>
<p>From the «lib.c» source file, we generate an object file (machine code) named «lib.o».<br />
We can use the «nm» command to list the symbols available in that object file:</p>
<div class="code">
<code class="source">nm lib.o</code>
</div>
<p>It will output:</p>
<div class="code">
<code class="source">0000000000000028 s EH_frame0</code><br />
<code class="source">0000000000000015 s L_.str</code><br />
<code class="source">                 U _puts</code><br />
<code class="source">0000000000000000 T _say_hello</code><br />
<code class="source">0000000000000040 S _say_hello.eh</code>
</div>
<p>We can see here our «say_hello» function.<br />
As you can see, it has a leading underscore. This is totally normal.</p>
<p>Now let&#8217;s create an object file from «main.c»:</p>
<div class="code">
<code class="source">gcc -Wall -o main.o -c main.c</code>
</div>
<p>Now, we have two distinct object files.<br />
In order to create an executable, we need to link them. This can be done with:</p>
<div class="code">
<code class="source">gcc -Wall -o test lib.o main.o</code>
</div>
<p>This will create an executable named «test», which will just print «hello, world» when run.</p>
<p>Piece of cake.<br />
But now imagine we want to use C++ for the library part, and C for the other parts.</p>
<p>First of all, we are going to rename «lib.c» to «lib.cpp».<br />
The «lib.h» header doesn&#8217;t need to be changed.</p>
<p>We are also going to replace the implementation of the «say_hello» function, so it uses «IOStream» instead of «printf()».<br />
Our «lib.cpp» file will now look like that:</p>
<div class="code">
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;iostream&gt;</span></code><br />
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">"lib.h"</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> say_hello( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-predefined">std::cout</span> &lt;&lt; <span class="code-string">"hello, world"</span> &lt;&lt; <span class="code-predefined">std::endl</span>;</code><br />
<code class="source">}</code>
</div>
<p>No problem here, just a standard C++ hello world.<br />
Let&#8217;s recompile everything (note that we are now going to use g++ instead of gcc for the C++ file):</p>
<div class="code">
<code class="source">g++ -Wall -o lib.o -c lib.cpp</code><br />
<code class="source">gcc -Wall -o main.o -c main.c</code>
</div>
<p>No problem here. Let&#8217;s link the two files in order to create an executable, as previously:</p>
<div class="code">
<code class="source">gcc -Wall -o test lib.o main.o</code>
</div>
<p>Unfortunately, you&#8217;ll have linker errors here, such as:</p>
<div class="code">
<code class="source">Undefined symbols for architecture x86_64:</code><br />
<code class="source">  "std::cout", referenced from:</code><br />
<code class="source">      say_hello()    in lib.o</code><br />
<code class="source">  "std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&#038; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&#038;, char const*)", referenced from:</code><br />
<code class="source">      say_hello()    in lib.o</code><br />
<code class="source">  "std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&#038; std::endl&lt;char, std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&#038;)", referenced from:</code><br />
<code class="source">      say_hello()    in lib.o</code><br />
<code class="source">  "std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;::operator&lt;&lt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&#038; (*)(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&#038;))", referenced from:</code><br />
<code class="source">      say_hello()    in lib.o</code><br />
<code class="source">  "std::ios_base::Init::Init()", referenced from:</code><br />
<code class="source">      __static_initialization_and_destruction_0(int, int)in lib.o</code><br />
<code class="source">  "std::ios_base::Init::~Init()", referenced from:</code><br />
<code class="source">      ___tcf_0 in lib.o</code><br />
<code class="source">  "_say_hello", referenced from:</code><br />
<code class="source">      _main in main.o</code><br />
<code class="source">ld: symbol(s) not found for architecture x86_64</code><br />
<code class="source">collect2: ld returned 1 exit status</code>
</div>
<p>Ok, obviously we are not linked with the C++ standard library.<br />
This is because we used gcc to create our final executable.</p>
<p>So let&#8217;s use g++ for the final stage.<br />
Note that we will still use gcc for the «main.c» file, as it&#8217;s still pure C code.<br />
No need for a C++ compiler here:</p>
<div class="code">
<code class="source">g++ -Wall -o lib.o -c lib.cpp</code><br />
<code class="source">gcc -Wall -o main.o -c main.c</code><br />
<code class="source">g++ -Wall -o test lib.o main.o</code>
</div>
<p>We still got a linker error:</p>
<div class="code">
<code class="source">Undefined symbols for architecture x86_64:</code><br />
<code class="source">  "_say_hello", referenced from:</code><br />
<code class="source">      _main in main.o</code><br />
<code class="source">ld: symbol(s) not found for architecture x86_64</code><br />
<code class="source">collect2: ld returned 1 exit status</code>
</div>
<p>Here, we can see we are effectively linked with the C++ standard library, as the errors for the «std::» members, like «std::cout» are gone.</p>
<p>But it seems that the C++ version of our «say_hello» function is not found.<br />
Let&#8217;s take a look at the «lib.o» file, to find out what&#8217;s wrong.<br />
We are going to use the «nm» command again, to list the symbols available in that file:</p>
<div class="code">
<code class="source">nm lib.o</code>
</div>
<p>The result is:</p>
<div class="code">
<code class="source">0000000000000100 s EH_frame0</code><br />
<code class="source">00000000000000eb s L_.str</code><br />
<code class="source">0000000000000070 s __GLOBAL__I__Z9say_hellov</code><br />
<code class="source">0000000000000148 s __GLOBAL__I__Z9say_hellov.eh</code><br />
<code class="source">0000000000000090 s __Z41__static_initialization_and_destruction_0ii</code><br />
<code class="source">0000000000000178 s __Z41__static_initialization_and_destruction_0ii.eh</code><br />
<code class="source">0000000000000000 T __Z9say_hellov</code><br />
<code class="source">0000000000000118 S __Z9say_hellov.eh</code><br />
<code class="source">                 U __ZNSolsEPFRSoS_E</code><br />
<code class="source">                 U __ZNSt8ios_base4InitC1Ev</code><br />
<code class="source">                 U __ZNSt8ios_base4InitD1Ev</code><br />
<code class="source">                 U __ZSt4cout</code><br />
<code class="source">                 U __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_</code><br />
<code class="source">00000000000001d8 b __ZStL8__ioinit</code><br />
<code class="source">                 U __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc</code><br />
<code class="source">                 U ___cxa_atexit</code><br />
<code class="source">                 U ___dso_handle</code><br />
<code class="source">0000000000000040 t ___tcf_0</code><br />
<code class="source">00000000000001a8 s ___tcf_0.eh</code>
</div>
<p>There&#8217;s no symbol for our «say_hello» function.<br />
Instead, we have:</p>
<div class="code">
<code class="source">__Z9say_hellov</code>
</div>
<p>What&#8217;s this «_Z9» prefix?<br />
Ever heard of «name mangling»?</p>
<p>First of all, remember that C++ has built-in support for function overloading.<br />
It means that the following example is perfectly valid:</p>
<div class="code">
<code class="source"><span class="code-keyword">void</span> foo( <span class="code-keyword">int</span> x );</code><br />
<code class="source"><span class="code-keyword">void</span> foo( <span class="code-keyword">double</span> x );</code><br />
<code class="source"><span class="code-keyword">int</span>  foo( <span class="code-keyword">int</span> x );</code>
</div>
<p>Here, we&#8217;ve got three functions named «foo».<br />
In C or Objective-C, this is not possible, as a symbol can only be defined once.</p>
<p>In C++, this is called «function overloading». A function (or method) can have multiple implementations, as long as there is a difference in the return type and/or the arguments.</p>
<p>The compiler will then generate three different functions, and automatically choose which one to use when you issue a call, depending on the return type and the argument types.</p>
<p>In order to do this, as the compiler will create different functions, it will have to use different symbol names.<br />
That&#8217;s why C++ functions (or methods) have a modified symbol name, in the resulting object code.</p>
<p>So how can we deal with this, from our «main.c» file?<br />
With Objective-C++, it would have worked, of course. But not with pure C, or pure Objective-C.</p>
<p>Fortunately, there is a way to tell the C++ compiler to comply with C-like declarations, so it won&#8217;t use its calling conventions (with mangled names) when producing object code.</p>
<p>This way, our C++ function will be callable from pure-C (even if it&#8217;s implementation uses C++ features).</p>
<p>In order to do this, we just need to change the «lib.h» header file:</p>
<div class="code">
<code class="source"><span class="code-keyword">#ifndef __LIB_H__</span></code><br />
<code class="source"><span class="code-keyword">#define __LIB_H__</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#ifdef __cplusplus</span></code><br />
<code class="source"><span class="code-keyword">extern</span> <span class="code-string">"C"</span> {</code><br />
<code class="source"><span class="code-keyword">#endif</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> say_hello( <span class="code-keyword">void</span> );</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#ifdef __cplusplus</span></code><br />
<code class="source">}</code><br />
<code class="source"><span class="code-keyword">#endif</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#endif</span></code>
</div>
<p>When the C++ compiler is used, the «__cplusplus» macro is defined.<br />
Now, in such a case, our function&#8217;s prototype will be wrapped with:</p>
<div class="code">
<code class="source"><span class="code-keyword">extern</span> <span class="code-string">"C"</span> {</code><br />
<code class="source">}</code>
</div>
<p>This will tell the C++ compiler that we intend to use everything inside the braces from C code, meaning it will generate symbol names according to C.</p>
<p>So let&#8217;s recompile our «lib.cpp» file into object code:</p>
<div class="code">
<code class="source">g++ -Wall -o lib.o -c lib.cpp</code>
</div>
<p>Now, if we run «nm», we can see:</p>
<div class="code">
<code class="source">0000000000000100 s EH_frame0</code><br />
<code class="source">00000000000000eb s L_.str</code><br />
<code class="source">0000000000000070 s __GLOBAL__I_say_hello</code><br />
<code class="source">0000000000000148 s __GLOBAL__I_say_hello.eh</code><br />
<code class="source">0000000000000090 s __Z41__static_initialization_and_destruction_0ii</code><br />
<code class="source">0000000000000178 s __Z41__static_initialization_and_destruction_0ii.eh</code><br />
<code class="source">                 U __ZNSolsEPFRSoS_E</code><br />
<code class="source">                 U __ZNSt8ios_base4InitC1Ev</code><br />
<code class="source">                 U __ZNSt8ios_base4InitD1Ev</code><br />
<code class="source">                 U __ZSt4cout</code><br />
<code class="source">                 U __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_</code><br />
<code class="source">00000000000001d8 b __ZStL8__ioinit</code><br />
<code class="source">                 U __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc</code><br />
<code class="source">                 U ___cxa_atexit</code><br />
<code class="source">                 U ___dso_handle</code><br />
<code class="source">0000000000000040 t ___tcf_0</code><br />
<code class="source">00000000000001a8 s ___tcf_0.eh</code><br />
<code class="source">0000000000000000 T _say_hello</code><br />
<code class="source">0000000000000118 S _say_hello.eh</code>
</div>
<p>Hurray! The symbol name for our «say_hello» function is now «_say_hello» as with pure C.<br />
It means we are now able to link our object files, in order to produce the executable:</p>
<div class="code">
<code class="source">g++ -Wall -o test lib.o main.o</code>
</div>
<p>No error here. Our executable was successfully produced, and is working fine!</p>
<p>Of course, when using «extern &#8220;C&#8221; {}», you can no more use C++ stuff like function&#8217;s overloading, or namespaces (and of course classes).<br />
But this way, when providing functions implemented in C++, you can make them available to C code, and so to Objective-C as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/01/16/mixing-c-cobjective-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Warning flags for Clang</title>
		<link>http://www.noxeos.com/2012/01/10/warning-flags-clang/</link>
		<comments>http://www.noxeos.com/2012/01/10/warning-flags-clang/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 19:43:33 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=528</guid>
		<description><![CDATA[Below is the complete list of the warning flags I use with Clang, the C frontend for LLVM. I personally use those flags for all my production code, for C, C++ and Objective-C development. Basically, all warning flags are activated. I had to look at the Clang source code to find all of them. I [...]]]></description>
				<content:encoded><![CDATA[<p>Below is the complete list of the warning flags I use with <a href="http://clang.llvm.org/">Clang</a>, the C frontend for LLVM.<br />
I personally use those flags for all my production code, for C, C++ and Objective-C development.</p>
<p>Basically, all warning flags are activated. I had to look at the Clang source code to find all of them.</p>
<p>I also created a header file which automatically sets those flags, when compiling source code.<br />
This way, whether you use an IDE or command-line to compile your code, you won&#8217;t need anymore to set those flags, as long as you include the header.<br />
It&#8217;s available <a href="https://github.com/macmade/SeriousCode/blob/master/clang-warnings.h">here on GitHub</a>. Enjoy!</p>
<p><strong>Warning flags list:</strong></p>
<ul>
<li>-Wabi</li>
<li>-Waddress-of-temporary</li>
<li>-Waddress</li>
<li>-Waggregate-return</li>
<li>-Wall</li>
<li>-Wambiguous-member-template</li>
<li>-Warc-abi</li>
<li>-Warc-non-pod-memaccess</li>
<li>-Warc-retain-cycles</li>
<li>-Warc-unsafe-retained-assign</li>
<li>-Warc</li>
<li>-Watomic-properties</li>
<li>-Wattributes</li>
<li>-Wavailability</li>
<li>-Wbad-function-cast</li>
<li>-Wbind-to-temporary-copy</li>
<li>-Wbitwise-op-parentheses</li>
<li>-Wbool-conversions</li>
<li>-Wbuiltin-macro-redefined</li>
<li>-Wc++-compat</li>
<li>-Wc++0x-compat</li>
<li>-Wc++0x-extensions</li>
<li>-Wcast-align</li>
<li>-Wcast-qual</li>
<li>-Wchar-align</li>
<li>-Wchar-subscripts</li>
<li>-Wcomment</li>
<li>-Wcomments</li>
<li>-Wconditional-uninitialized</li>
<li>-Wconversion</li>
<li>-Wctor-dtor-privacy</li>
<li>-Wcustom-atomic-properties</li>
<li>-Wdeclaration-after-statement</li>
<li>-Wdefault-arg-special-member</li>
<li>-Wdelegating-ctor-cycles</li>
<li>-Wdelete-non-virtual-dtor</li>
<li>-Wdeprecated-declarations</li>
<li>-Wdeprecated-implementations</li>
<li>-Wdeprecated-writable-strings</li>
<li>-Wdeprecated</li>
<li>-Wdisabled-optimization</li>
<li>-Wdiscard-qual</li>
<li>-Wdiv-by-zero</li>
<li>-Wduplicate-method-arg</li>
<li>-Weffc++</li>
<li>-Wempty-body</li>
<li>-Wendif-labels</li>
<li>-Wexit-time-destructors</li>
<li>-Wextra-tokens</li>
<li>-Wextra</li>
<li>-Wformat-extra-args</li>
<li>-Wformat-nonliteral</li>
<li>-Wformat-zero-length</li>
<li>-Wformat</li>
<li>-Wformat=2</li>
<li>-Wfour-char-constants</li>
<li>-Wglobal-constructors</li>
<li>-Wgnu-designator</li>
<li>-Wgnu</li>
<li>-Wheader-hygiene</li>
<li>-Widiomatic-parentheses</li>
<li>-Wignored-qualifiers</li>
<li>-Wimplicit-atomic-properties</li>
<li>-Wimplicit-function-declaration</li>
<li>-Wimplicit-int</li>
<li>-Wimplicit</li>
<li>-Wimport</li>
<li>-Wincompatible-pointer-types</li>
<li>-Winit-self</li>
<li>-Winitializer-overrides</li>
<li>-Winline</li>
<li>-Wint-to-pointer-cast</li>
<li>-Winvalid-offsetof</li>
<li>-Winvalid-pch</li>
<li>-Wlarge-by-value-copy</li>
<li>-Wliteral-range</li>
<li>-Wlocal-type-template-args</li>
<li>-Wlogical-op-parentheses</li>
<li>-Wlong-long</li>
<li>-Wmain</li>
<li>-Wmicrosoft</li>
<li>-Wmismatched-tags</li>
<li>-Wmissing-braces</li>
<li>-Wmissing-declarations</li>
<li>-Wmissing-field-initializers</li>
<li>-Wmissing-format-attribute</li>
<li>-Wmissing-include-dirs</li>
<li>-Wmissing-noreturn</li>
<li>-Wmost</li>
<li>-Wmultichar</li>
<li>-Wnested-externs</li>
<li>-Wnewline-eof</li>
<li>-Wnon-gcc</li>
<li>-Wnon-virtual-dtor</li>
<li>-Wnonfragile-abi2</li>
<li>-Wnonnull</li>
<li>-Wnonportable-cfstrings</li>
<li>-Wnull-dereference</li>
<li>-Wobjc-nonunified-exceptions</li>
<li>-Wold-style-cast</li>
<li>-Wold-style-definition</li>
<li>-Wout-of-line-declaration</li>
<li>-Woverflow</li>
<li>-Woverlength-strings</li>
<li>-Woverloaded-virtual</li>
<li>-Wpacked</li>
<li>-Wpadded</li>
<li>-Wparentheses</li>
<li>-Wpointer-arith</li>
<li>-Wpointer-to-int-cast</li>
<li>-Wprotocol</li>
<li>-Wreadonly-setter-attrs</li>
<li>-Wredundant-decls</li>
<li>-Wreorder</li>
<li>-Wreturn-type</li>
<li>-Wself-assign</li>
<li>-Wsemicolon-before-method-body</li>
<li>-Wsequence-point</li>
<li>-Wshadow</li>
<li>-Wshorten-64-to-32</li>
<li>-Wsign-compare</li>
<li>-Wsign-promo</li>
<li>-Wsizeof-array-argument</li>
<li>-Wstack-protector</li>
<li>-Wstrict-aliasing</li>
<li>-Wstrict-overflow</li>
<li>-Wstrict-prototypes</li>
<li>-Wstrict-selector-match</li>
<li>-Wsuper-class-method-mismatch</li>
<li>-Wswitch-default</li>
<li>-Wswitch-enum</li>
<li>-Wswitch</li>
<li>-Wsynth</li>
<li>-Wtautological-compare</li>
<li>-Wtrigraphs</li>
<li>-Wtype-limits</li>
<li>-Wundeclared-selector</li>
<li>-Wuninitialized</li>
<li>-Wunknown-pragmas</li>
<li>-Wunnamed-type-template-args</li>
<li>-Wunneeded-internal-declaration</li>
<li>-Wunneeded-member-function</li>
<li>-Wunused-argument</li>
<li>-Wunused-exception-parameter</li>
<li>-Wunused-function</li>
<li>-Wunused-label</li>
<li>-Wunused-member-function</li>
<li>-Wunused-parameter</li>
<li>-Wunused-value</li>
<li>-Wunused-variable</li>
<li>-Wunused</li>
<li>-Wused-but-marked-unused</li>
<li>-Wvariadic-macros</li>
<li>-Wvector-conversions</li>
<li>-Wvla</li>
<li>-Wvolatile-register-var</li>
<li>-Wwrite-strings</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/01/10/warning-flags-clang/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WebStart 1.3.0</title>
		<link>http://www.noxeos.com/2012/01/05/webstart-1-3-0/</link>
		<comments>http://www.noxeos.com/2012/01/05/webstart-1-3-0/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 06:54:36 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=534</guid>
		<description><![CDATA[Version 1.3.0 of WebStart has just been released. Root directories for websites can now be chosen individually, making it easier to organize your files on your hard disk. The update is available free of charge from the integrated updater. A full installer is also available to download. Version 1.3.0 also includes a 14 days trial period. [...]]]></description>
				<content:encoded><![CDATA[<p>Version 1.3.0 of <a title="WebStart" href="http://www.eosgarden.com/en/products/webstart/overview/">WebStart</a> has just been released.</p>
<p>Root directories for websites can now be chosen individually, making it easier to organize your files on your hard disk.</p>
<p>The update is available free of charge from the integrated updater.<br />
A full installer is also <a href="http://www.eosgarden.com/en/products/webstart/download/">available to download</a>.</p>
<p>Version 1.3.0 also includes a <strong>14 days trial</strong> period.<br />
So just give it a try, I&#8217;m sure you won&#8217;t regret it! Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/01/05/webstart-1-3-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Little apps on the Mac AppStore</title>
		<link>http://www.noxeos.com/2012/01/05/apps-mac-appstore/</link>
		<comments>http://www.noxeos.com/2012/01/05/apps-mac-appstore/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 00:28:38 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=509</guid>
		<description><![CDATA[I just published two little apps on the Mac AppStore. Both were successfully validated, and are available for purchase. The first one, named «AutoPurge» is a UI agent, placed in the menu bar, that automatically frees unused memory based on a specific user-defined time interval. It&#8217;s useful for Macs with low memory capabilities, or for [...]]]></description>
				<content:encoded><![CDATA[<p>I just published two little apps on the Mac AppStore. Both were successfully validated, and are available for purchase.</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2012/01/autopurge.png"><img class="alignleft size-thumbnail wp-image-517" style="margin-bottom: 100px;" title="autopurge" src="http://www.noxeos.com/wp-content/uploads/2012/01/autopurge-150x150.png" alt="" width="150" height="150" /></a></p>
<p>The first one, named «<a href="http://itunes.apple.com/us/app/autopurge/id480739949?mt=12">AutoPurge</a>» is a UI agent, placed in the menu bar, that automatically frees unused memory based on a specific user-defined time interval.<br />
It&#8217;s useful for Macs with low memory capabilities, or for users that use a lot of huge programs, like VMWare, Adobe Creative Suite, Xcode, etc.</p>
<p>Mac OS X doesn&#8217;t always reclaim the used memory immediately, when a program exits. So if you use a lot of software, your Mac may become slow, as the system will then have to use the hard disk as memory, when all the physical RAM is used.</p>
<p>AutoPurge helps the system to recover the unused memory, making it available again to applications.</p>
<p>AutoPurge is available for $0.99, from the Mac AppStore:<br />
<a href="http://itunes.apple.com/us/app/autopurge/id480739949?mt=12"> http://itunes.apple.com/us/app/autopurge/id480739949?mt=12</a></p>
<p>&nbsp;</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2012/01/sostatus.png"><img class="alignleft size-thumbnail wp-image-516" title="sostatus" src="http://www.noxeos.com/wp-content/uploads/2012/01/sostatus-150x150.png" alt="" width="150" height="150" /></a></p>
<p>The second one, called «<a href="http://itunes.apple.com/us/app/sostatus/id490656622?mt=12">SOStatus</a>», provides you with real-time informations from your <a href="http://www.stackoverflow.com/">StackOverflow</a> account, from the menu bar.</p>
<p>It&#8217;s available for $0.99 too, from the Mac AppStore:<br />
<a href="http://itunes.apple.com/us/app/sostatus/id490656622?mt=12"> http://itunes.apple.com/us/app/sostatus/id490656622?mt=12</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/01/05/apps-mac-appstore/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unix manual pages</title>
		<link>http://www.noxeos.com/2012/01/03/unix-manual-pages/</link>
		<comments>http://www.noxeos.com/2012/01/03/unix-manual-pages/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 23:08:26 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=500</guid>
		<description><![CDATA[I just released a little commercial application on the Mac AppStore. It&#8217;s a GUI front-end for the UNIX manual pages. It automatically searches your computer for all available manuals, and displays them in a nice way, ordered by sections. The following features are available: Live search for specific manual pages Search and highlight in manual [...]]]></description>
				<content:encoded><![CDATA[<p>I just released a little commercial application on the Mac AppStore.</p>
<p>It&#8217;s a GUI front-end for the UNIX manual pages.<br />
It automatically searches your computer for all available manuals, and displays them in a nice way, ordered by sections.</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2012/01/mzl.pakjucup.800x500-75.jpg"><img class="alignnone  wp-image-505" title="mzl.pakjucup.800x500-75" src="http://www.noxeos.com/wp-content/uploads/2012/01/mzl.pakjucup.800x500-75.jpg" alt="" width="640" height="400" /></a></p>
<p>The following features are available:</p>
<ul>
<li>Live search for specific manual pages</li>
<li>Search and highlight in manual contents</li>
<li>Printing support</li>
<li>Filtering by sections</li>
</ul>
<p>You may purchase it from the <a href="http://itunes.apple.com/us/app/manual/id482439025?mt=12">Mac AppStore</a>, for $1.99.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/01/03/unix-manual-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebStart 1.2.0 released</title>
		<link>http://www.noxeos.com/2012/01/03/webstart-1-2-0-released/</link>
		<comments>http://www.noxeos.com/2012/01/03/webstart-1-2-0-released/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 23:00:04 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=492</guid>
		<description><![CDATA[Today, I officially released version 1.2.0 of WebStart. This release fixes an annoying bug, introduced since Mac OS X 10.7.2. The virtual hosts were not accessible anymore from a web browser. It also adds support for PHP 5.4.0 (release candidate). Now, four version of PHP are available. Next releases will include custom locations for virtual [...]]]></description>
				<content:encoded><![CDATA[<p>Today, I officially released version 1.2.0 of <a href="http://www.eosgarden.com/en/products/webstart/overview/" title="WebStart">WebStart</a>.</p>
<p>This release fixes an annoying bug, introduced since Mac OS X 10.7.2.<br />
The virtual hosts were not accessible anymore from a web browser.</p>
<p>It also adds support for PHP 5.4.0 (release candidate). Now, four version of PHP are available.</p>
<p>Next releases will include custom locations for virtual hosts, as well as a 14 days trial.</p>
<p>This is a Mac OS X Lion only update. Users still on Mac OS X 10.6.x will have to stick with version 1.1.<br />
Sorry guys, but it&#8217;s time to move on.</p>
<p>As I&#8217;m compiling the bundled software (Apache, PHP, MySQL, etc.) on Lion, some of them may not be compatible with older Mac OS releases.<br />
So I decided not to support Snow Leopard anymore, to concentrate on the actual OS version.</p>
<p>I&#8217;d also like to speak about the virtual hosts bug, on Mac OS X Lion.</p>
<p>Previous versions of WebStart used the OpenDirectory database in order to manage hosts, instead of using the /etc/hosts file.<br />
This is a much cleaner solution, as it uses a real database, with an official API, instead of parsing and modifying a system configuration file.</p>
<p>Unfortunately, since Mac OS X 10.7.2, there is a kind of bug in OpenDirectory.<br />
The DNS resolver, apparently for performance reasons, no longer asks the OpenDirectory database for hosts.</p>
<p>I tried to find a workaround, with guys from Apple, but no luck.<br />
Apple recognizes that it&#8217;s a bug in the DNS resolver, but won&#8217;t fix it.<br />
Here&#8217;s an answer from Apple about this:</p>
<blockquote><p>I can replicate the problem as you described it.  I spent a bunch of time investigating it yesterday.<br />
At this point I&#8217;m somewhat confused.  I spent a bunch of time yesterday working my way through the OD daemon&#8217;s code to try and figure out what&#8217;s going on.  However, I think I might get a result more quickly by asking the experts, so I&#8217;ve sent a request to the OD daemon engineer to see if he has any insight into this problem.  Please stand by.</p></blockquote>
<p>And finally:</p>
<blockquote><p>After talking this over with OD engineering, I have an answer for you, but probably not the one you were hoping for: this is a known issue that&#8217;s unlikely to be fixed in the near future.  The change was made as part of the effort to push all DNS resolution down into the mDNSResponder daemon.  Doing this has a number of advantages (there&#8217;s now just one resolver, which allows for coherent caching and so on), but it prevents the OD daemon from providing host information (because the OD daemon exists &#8216;above&#8217; the mDNSResponder daemon, and you can&#8217;t call &#8216;up&#8217; in the stack with causing other problems, typically deadlocks).</p></blockquote>
<p>So version 1.2.0 of WebStart uses the /etc/hosts file, as there is no other solution for this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2012/01/03/webstart-1-2-0-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Xcode &#8211; Build number from SVN</title>
		<link>http://www.noxeos.com/2011/09/13/xcode-build-number-svn/</link>
		<comments>http://www.noxeos.com/2011/09/13/xcode-build-number-svn/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 18:57:13 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=463</guid>
		<description><![CDATA[All programs come with a version number, generally composed of a number for the major version, another one for the minor version, and a last one for the maintenance version. It may be also useful to add another number, called the «build» version, identifying more precisely the software&#8217;s version. Such a number is often represented [...]]]></description>
				<content:encoded><![CDATA[<p>All programs come with a version number, generally composed of a number for the major version, another one for the minor version, and a last one for the maintenance version.</p>
<p>It may be also useful to add another number, called the «build» version, identifying more precisely the software&#8217;s version.<br />
Such a number is often represented in a hexadecimal.</p>
<p>You may have for instance: 1.7.5 (12B43)</p>
<p>The build number is especially useful when dealing with betas, where to software&#8217;s version number doesn&#8217;t change.</p>
<p>If you use a revision control system, such as Subversion (SVN) or GIT, you want to bind the build number to the revision number.</p>
<p>So here&#8217;s a quick tutorial for the Xcode users, using Subversion.<br />
We are going to automatically update an entry of the «Info.plist» file, with the SVN revision number.</p>
<p>In your application&#8217;s «Info.plist» file, add an entry called «BuildNumber», and define it as a number.</p>
<p>Then, on your target&#8217;s build phases, add a new «Run Script» phase, and place the following content:</p>
<div class="code">
<code class="source"><span class="code-comment">#!/bin/bash</span></code><br />
<code class="source">plist=<span class="code-string">"MyApp/Info.plist"</span></code><br />
<code class="source">svn update</code><br />
<code class="source">rev=$(svn info | grep <span class="code-string">'^Revision:'</span> | sed -e <span class="code-string">'s/^Revision: //'</span>)</code><br />
<code class="source">/usr/libexec/PlistBuddy -c <span class="code-string">"Set :BuildNumber $rev"</span> <span class="code-string">"$plist"</span></code>
</div>
<p>That&#8217;s all. Simply replace the &#8220;MyApp/Info.plist&#8221; string with the actual path of your «Info.plist» file.</p>
<p>Each time you build your application, the script will update the entry in the «Info.plist» file with the latest revision number from your SVN repository.</p>
<p>To access the build number in Objective-C, you can use:</p>
<div class="code">
<code class="source">[ [ <span class="code-predefined">NSBundle</span> mainBundle ] objectForInfoDictionaryKey: <span class="code-string">@"BuildNumber"</span> ];</code>
</div>
<p>You can the build a full version string using:</p>
<div class="code">
<code class="source">[ <span class="code-predefined">NSString</span></code><br />
<code class="source">    stringWithFormat: @"%@ (%@)",</code><br />
<code class="source">    [ [ <span class="code-predefined">NSBundle</span> mainBundle ] objectForInfoDictionaryKey: <span class="code-string">@"CFBundleVersion"</span> ],</code><br />
<code class="source">    [ [ <span class="code-predefined">NSBundle</span> mainBundle ] objectForInfoDictionaryKey: <span class="code-string">@"BuildNumber"</span> ]</code><br />
<code class="source">];</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/09/13/xcode-build-number-svn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iCloud &#8211; Migration from MobileMe</title>
		<link>http://www.noxeos.com/2011/08/23/icloud-migration-mobileme/</link>
		<comments>http://www.noxeos.com/2011/08/23/icloud-migration-mobileme/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 19:10:53 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=381</guid>
		<description><![CDATA[Some screenshots presenting the migration process from a MobileMe account to an iCloud account.]]></description>
				<content:encoded><![CDATA[<p>Some screenshots presenting the migration process from a MobileMe account to an iCloud account.</p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-01.png"><img class="alignnone size-full wp-image-385" title="icloud-01" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-01.png" alt="" width="640" height="640" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-02.png"><img class="alignnone size-full wp-image-386" title="icloud-02" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-02.png" alt="" width="640" height="640" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-03.png"><img class="alignnone size-full wp-image-387" title="icloud-03" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-03.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-04.png"><img class="alignnone size-full wp-image-388" title="icloud-04" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-04.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-05.png"><img class="alignnone size-full wp-image-389" title="icloud-05" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-05.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-06.png"><img class="alignnone size-full wp-image-390" title="icloud-06" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-06.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-07.png"><img class="alignnone size-full wp-image-391" title="icloud-07" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-07.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-08.png"><img class="alignnone size-full wp-image-392" title="icloud-08" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-08.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-09.png"><img class="alignnone size-full wp-image-393" title="icloud-09" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-09.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-10.png"><img class="alignnone size-full wp-image-394" title="icloud-10" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-10.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-11.png"><img class="alignnone size-full wp-image-395" title="icloud-11" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-11.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-12.png"><img class="alignnone size-full wp-image-396" title="icloud-12" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-12.png" alt="" width="640" height="485" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-13.png"><img class="alignnone size-full wp-image-397" title="icloud-13" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-13.png" alt="" width="601" height="505" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-14.png"><img class="alignnone size-full wp-image-398" title="icloud-14" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-14.png" alt="" width="601" height="233" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-15.png"><img class="alignnone size-full wp-image-399" title="icloud-15" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-15.png" alt="" width="590" height="477" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-16.png"><img class="alignnone size-full wp-image-400" title="icloud-16" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-16.png" alt="" width="590" height="477" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-17.png"><img class="alignnone size-full wp-image-401" title="icloud-17" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-17.png" alt="" width="590" height="477" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-18.png"><img class="alignnone size-full wp-image-402" title="icloud-18" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-18.png" alt="" width="590" height="477" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-19.png"><img class="alignnone size-full wp-image-403" title="icloud-19" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-19.png" alt="" width="590" height="477" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-20.png"><img class="alignnone size-full wp-image-404" title="icloud-20" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-20.png" alt="" width="640" height="640" /></a></p>
<p><a href="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-21.png"><img class="alignnone size-full wp-image-405" title="icloud-21" src="http://www.noxeos.com/wp-content/uploads/2011/08/icloud-21.png" alt="" width="640" height="485" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/08/23/icloud-migration-mobileme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C: const and static keywords</title>
		<link>http://www.noxeos.com/2011/07/29/c-const-static-keywords/</link>
		<comments>http://www.noxeos.com/2011/07/29/c-const-static-keywords/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 01:30:09 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=344</guid>
		<description><![CDATA[Ok, once and for all, I&#8217;ll try to clarify to meaning of the &#8216;const&#8217; and &#8216;static&#8217; keywords in C (it applies to Objective-C and C++ too). I&#8217;m just tired of questions about this on StackOverflow. Objective-C programmers usually don&#8217;t think about C code while coding. I personally think this is a big mistake (it can [...]]]></description>
				<content:encoded><![CDATA[<p>Ok, once and for all, I&#8217;ll try to clarify to meaning of the &#8216;const&#8217; and &#8216;static&#8217; keywords in C (it applies to Objective-C and C++ too).</p>
<p>I&#8217;m just tired of questions about this on StackOverflow.</p>
<p>Objective-C programmers usually don&#8217;t think about C code while coding. I personally think this is a big mistake (it can sometimes apply to C++ programmers too).</p>
<p>Objective-C is just a layer over C. So in order to be a good Objective-C programmer, you <strong>HAVE</strong> to know at least a few things about the C language.</p>
<p>I don&#8217;t know why C has such a bad reputation for Objective-C coders, especially on iOS. And it&#8217;s very surprising to see the lack of knowledge of some Objective-C developers.</p>
<p>So once and for all:</p>
<p>If you want to code in Objective-C, learn at least the following C topics:</p>
<ul>
<li>Language keywords and their meanings</li>
<li>Pointers and pointer arithmetic</li>
<li>C standard library</li>
</ul>
<p>Those are the (very) basics.</p>
<p>Objective-C is a very nice object-oriented language, with amazing runtime capabilities. That&#8217;s true.<br />
But it doesn&#8217;t mean you can bypass completely the C language.<br />
A lot of time, you&#8217;ll save a lot of processor time and memory, just by knowing a few things about the C language, rather than relying on the apparent simplicity of the Objective-C language.</p>
<p>But that&#8217;s a different story. Now back on our keywords&#8230;</p>
<h3>const</h3>
<p>First of all, the &#8216;const&#8217; keyword.</p>
<p>Ok, it means &#8216;constant&#8217;&#8230; So:</p>
<div class="code">
<code class="source"><span class="code-keyword">const int</span> x = 42;</code>
</div>
<p>declares a constant integer variable. It means it&#8217;s value can&#8217;t be modified. It&#8217;s value is initially assigned to 42.<br />
If you try to change its value later, the compiler will issue a warning, or an error, depending on your compiler settings.<br />
So the following statement is invalid:</p>
<div class="code">
<code class="source"><span class="code-keyword">const int</span> x = 42;</code><br />
<code class="source">x           = 43;</code>
</div>
<p>That&#8217;s pretty easy to understand.<br />
The problem comes with pointers.</p>
<p>Let&#8217;s take a look at the following code:</p>
<div class="code">
<code class="source"><span class="code-keyword">char</span> * str = <span class="code-string">"hello, world"</span>;</code>
</div>
<p>It declares a &#8216;char&#8217; pointer. Ok… But then what about this:</p>
<div class="code">
<code class="source"><span class="code-keyword">char</span> * <span class="code-keyword">const</span> str = <span class="code-string">"hello, world"</span>;</code>
</div>
<p>or</p>
<div class="code">
<code class="source"><span class="code-keyword">const char</span> * str = <span class="code-string">"hello, world"</span>;</code>
</div>
<p>Now read carefully.<br />
The first one declares a constant pointer to a char.</p>
<p>It means the the characters of the string can be modified, but not the pointer value.<br />
So the variable &#8216;str&#8217; cannot be assigned to another pointer.</p>
<p>For instance, this is invalid:</p>
<div class="code">
<code class="source"><span class="code-keyword">char</span> * hello     = <span class="code-string">"hello, universe"</span>;</code><br />
<code class="source"><span class="code-keyword">char</span> * <span class="code-keyword">const</span> str = <span class="code-keyword">"hello, world"</span>;</code><br />
<code class="source">str              = hello;</code>
</div>
<p>as your a modifying the pointer value (not the string value).</p>
<p>This is valid:</p>
<div class="code">
<code class="source"><span class="code-keyword">char</span> * <span class="code-keyword">const</span> str = <span class="code-predefined">strdup</span>( <span class="code-string">"hello, world"</span> )</span>;</code><br />
<code class="source">str[ 0 ]         = <span class="code-string">'a'</span>;</code>
</div>
<p>The &#8216;str&#8217; variable will then contain &#8216;hello, world&#8217;. Remember: the pointer can&#8217;t be modified, the value that is pointed can be.</p>
<p>It&#8217;s the exact opposite with the following notation:</p>
<div class="code">
<code class="source"><span class="code-keyword">const char</span> * str = <span class="code-string">"hello, world"</span>;</code>
</div>
<p>Here, you can assign the pointer to another variable, but you can&#8217;t change the value.</p>
<p>The &#8216;const&#8217; keyword is contextual, in a way, when using pointers. It can apply to the pointer itself, or to the value pointed.</p>
<p>So, in order to resume:</p>
<div class="code">
<code class="source"><span class="code-keyword">const int</span> * x;</code>
</div>
<p>A modifiable pointer to a constant integer.</p>
<div class="code">
<span class="code-keyword">int</span> * <span class="code-keyword">const</span> x;</code>
</div>
<p>A constant pointer to an modifiable integer.</p>
<div class="code">
<span class="code-keyword">const int</span> * <span class="code-keyword">const</span> x;</code>
</div>
<p>A constant pointer to a constant integer.</p>
<h3>static</h3>
<p>The static keyword can have two meanings.</p>
<p>First of all, it can be declared inside a function.<br />
Let's take a look at this example:</p>
<div class="code">
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;stdio.h&gt;</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> foo( <span class="code-keyword">void</span> );</code><br />
<code class="source"><span class="code-keyword">void</span> bar( <span class="code-keyword">void</span> );</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> foo( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-keyword">int</span> x = 0;</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-predefined">printf</span>( <span class="code-string">"X - foo: %i\n"</span>, x );</code><br />
<code class="source">    </code><br />
<code class="source">    x++;</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> bar( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-keyword">static int</span> x = 0;</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-predefined">printf</span>( <span class="code-string">"X - bar: %i\n"</span>, x );</code><br />
<code class="source">    </code><br />
<code class="source">    x++;</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">int</span> main( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    foo();</code><br />
<code class="source">    foo();</code><br />
<code class="source">    foo();</code><br />
<code class="source">    bar();</code><br />
<code class="source">    bar();</code><br />
<code class="source">    bar();</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">return</span> 0;</code><br />
<code class="source">}</code>
</div>
<p>The output will be:</p>
<div class="code">
<code class="source">X - foo: 0</code><br />
<code class="source">X - foo: 0</code><br />
<code class="source">X - foo: 0</code><br />
<code class="source">X - bar: 0</code><br />
<code class="source">X - bar: 1</code><br />
<code class="source">X - bar: 2</code>
</div>
<p>Because a simple local variable, as in the 'foo' function, only exists when the function is called. It's destroyed (to be simple) when the function exits.</p>
<p>So for the 'foo' function, the variable is created each time the function is called, with a value of '0'. The value is printed, then incremented.<br />
The function then exit, and the variable is destroyed.</p>
<p>But in the 'bar' function, the variable is declared as static. It means the value will persist across function calls.<br />
It's initialized the first time the function is called, but only at that time. Once it has been initialized, it just exist, so its value will be taken for the next function calls.</p>
<p>Now the 'static' keyword as a completely different meaning when used in a variable declared outside of a function (in the global scope).</p>
<p>It means that the variable will be «file scoped». In other words, the variable, which is global, will be accessible only from the scope of the file which declared it. It won't be accessible from other files.</p>
<p>It's just a way to create global private variable.</p>
<p>For instance, imagine a file called 'foo.c':</p>
<div class="code">
<code class="source"><span class="code-keyword">int</span>        x = 42;</code><br />
<code class="source"><span class="code-keyword">static int</span> y = 42;</code>
</div>
<p>From a 'bar.c' file, you'll be able to access the 'x' symbol, if both files are linked together. But you won't be able to access the 'y' symbol, as it's decaled as 'static'.<br />
It means that the symbol for the 'y' variable won't be exported by the linker, when the symbol for the 'x' variable will be.</p>
<p>In other words, you'll be able to access the 'y' global variable only from function declared in the 'foo.c' file. The 'x' variable will be also accessible from other files.</p>
<p>Of course,  the 'static' keyword can be combined with const.<br />
For instance:</p>
<div class="code">
<code class="source"><span class="code-keyword">static const int</span> * <span class="code-keyword">const</span> y;</code>
</div>
<p>A constant pointer to a constant integer, that will be accessible only from the file which declared it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/07/29/c-const-static-keywords/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>New job</title>
		<link>http://www.noxeos.com/2011/05/31/job-2/</link>
		<comments>http://www.noxeos.com/2011/05/31/job-2/#comments</comments>
		<pubDate>Tue, 31 May 2011 14:03:22 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=298</guid>
		<description><![CDATA[I&#8217;ve been hired by DigiDNA, a swiss software company, based in Geneva. DigiDNA currently develops software for Mac  OS X, iOS (iPhone &#38; iPad) and Windows. Here&#8217;s the current product line: DiskAid DiskAid is a tool for PC and Mac which enables the use of iPhone, iPad or iPod Touch as an external mass storage [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been hired by <a href="http://www.digidna.net/">DigiDNA</a>, a swiss software company, based in Geneva.<br />
DigiDNA currently develops software for Mac  OS X, iOS (iPhone &amp; iPad) and Windows.</p>
<p><img class="alignnone size-full wp-image-341" title="home_screen" src="http://www.noxeos.com/wp-content/uploads/2011/05/home_screen.png" alt="" width="677" height="305" /></p>
<p>Here&#8217;s the current product line:</p>
<ul>
<li><a href="http://www.digidna.net/products/diskaid">DiskAid</a><br />
DiskAid is a tool for PC and Mac which enables the use of iPhone, iPad or iPod Touch as an external mass storage device. DiskAid gives access to the device’s file system, transfers text messages (SMS) to computer, allows to copy, edit or rename files and folders on the iPhone, iPad or iPod Touch directly from the desktop. Using a USB connection, it is the safest and most reliable way to access device’s files and folders. Used with FileApp or FileApp Pro transfered files and documents can easily being accessed on the device.</li>
<li><a href="http://www.digidna.net/products/fileapp/features">FileApp / FileAppPro</a><br />
FileApp is a file manager and reader for your iPhone, iPad and iPod TouchEasily copy files on your device for a quick look on the road. Powerful and yet still very user friendly, FileApp will let you find the document you&#8217;re looking for within seconds.Copying files over to your iPhone or iPod Touch takes place wirelessly (by FTP) or via USB (cable) using DiskAid or iTunes File Sharing.If you are looking for power features such as copy, move, create and rename folders, create folders and text files, multi-selection of items to email or ZIP, make sure you try FileApp Pro ! FileApp Pro is FileApp on steroids, while preserving all the simplicity of FileApp, don&#8217;t miss it!</li>
<li><a href="http://www.digidna.net/products/tuneaid">TuneAid</a><br />
TuneAid is an iPod content recovery tool. It will let you import your iPod’s library back into a Folder or iTunes with no effort. Hard Drive crash? Stolen computer? Corrupted system? No problem, TuneAid will salvage your Music!Apple’s iTunes lets you transfer your music to iPhone, iPod or iPad. But this sync function only works one way: from computer to device.TuneAid lets you transfer your music to computer, and in doing so also directly copy to iTunes all your library : ratings, playlists and more, whether its a Windows PC or a Mac!</li>
<li><a href="http://www.digidna.net/products/picsaid">PicsAid</a><br />
Have you ever noticed that pictures that have been synced into an iPod, an iPhone or an iPad cannot be accessed nor copied back to a computer?Apple’s iTunes lets you copy to iPod, iPhone or iPad your favorite pictures through syncronised albums. But this sync feature only works one way: from computer to device, and it does not allow to copy photos back, nor sharing them anyhow!Your photos remain stuck in the device’s proprietary database ( ithmb ).So how to transfer photos back to your computer ?PicsAid will allow retrieval of all the pictures that were synced with iTunes. In the event of a computer crash or simply in order to freely share pictures, PicsAid will allow to copy all synced albums to any computer you like, allowing sharing and recovery of those precious captures!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/05/31/job-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Book selection</title>
		<link>http://www.noxeos.com/2011/05/31/book-selection/</link>
		<comments>http://www.noxeos.com/2011/05/31/book-selection/#comments</comments>
		<pubDate>Tue, 31 May 2011 13:21:05 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=308</guid>
		<description><![CDATA[The Essentials of Computer Organization And Architecture Linda Null, Julia Lobur Thoroughly Revised And Updated, The Essentials Of Computer Organization And Architecture, Second Edition Is A Comprehensive Resource That Addresses All Of The Necessary Organization And Architecture Topics Yet Is Concise Enough To Move Through In A Single Semester. The Text Covers Such Topics As [...]]]></description>
				<content:encoded><![CDATA[<h3 style="clear: both;"><a href="http://www.amazon.com/Essentials-Computer-Organization-Architecture/dp/0763737690/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1306845489&amp;sr=8-1"><img class="alignleft size-full wp-image-319" style="margin-left: 20px; margin-right: 20px;" title="computer" src="http://www.noxeos.com/wp-content/uploads/2011/05/computer.jpg" alt="" width="180" height="255" /></a>The Essentials of Computer Organization And Architecture</h3>
<h4>Linda Null, Julia Lobur</h4>
<p>Thoroughly Revised And Updated, The Essentials Of Computer Organization And Architecture, Second Edition Is A Comprehensive Resource That Addresses All Of The Necessary Organization And Architecture Topics Yet Is Concise Enough To Move Through In A Single Semester. The Text Covers Such Topics As Digital Logic, Data Representation, Machine-Level Language, General Organization, Assembly Language Programming, CPU Organization, Memory Organization, And Input/Output Devices, As Well As A New Chapter On Embedded Systems. Correlated To The ACM-IEEE Computing Curricula Guidelines, The Essentials Of Computer Organization And Architecture Is The Forefront Text For Your Computer Organization And Architecture Course.</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&amp;qid=1306845516&amp;sr=8-1"><img class="alignleft size-full wp-image-318" style="margin-left: 20px; margin-right: 20px;" title="code" src="http://www.noxeos.com/wp-content/uploads/2011/05/code.jpg" alt="" width="180" height="255" /></a>Code: The Hidden Language of Computer Hardware and Software</h3>
<h4>Charles Petzold</h4>
<p>Charles Petzold&#8217;s latest book, Code: The Hidden Language of Computer Hardware and Software, crosses over into general-interest nonfiction from his usual programming genre. It&#8217;s a carefully written, carefully researched gem that will appeal to anyone who wants to understand computer technology at its essence. Readers learn about number systems (decimal, octal, binary, and all that) through Petzold&#8217;s patient (and frequently entertaining) prose and then discover the logical systems that are used to process them. There&#8217;s loads of historical information too. From Louis Braille&#8217;s development of his eponymous raised-dot code to Intel Corporation&#8217;s release of its early microprocessors, Petzold presents stories of people trying to communicate with (and by means of) mechanical and electrical devices.</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/iPhone-Developers-Cookbook-Building-Applications/dp/0321659570/ref=sr_1_1?ie=UTF8&amp;qid=1306845552&amp;sr=8-1"><img class="alignleft size-full wp-image-322" style="margin-left: 20px; margin-right: 20px;" title="iphone-cookbook" src="http://www.noxeos.com/wp-content/uploads/2011/05/iphone-cookbook.jpg" alt="" width="180" height="255" /></a>The iPhone Developer&#8217;s Cookbook: Building Applications with the iPhone 3.0 SDK (2nd Edition)</h3>
<h4>Erica Sadun</h4>
<p>Want to get started building applications for Apple’s iPhone and iPod touch? Already building iPhone applications and want to get better at it? This is the only book that brings together all the expert guidance–and the code–you’ll need!</p>
<p>Completely revised and expanded to cover the iPhone 3.0 SDK, The iPhone Developer’s Cookbook is the essential resource for developers building apps for the iPhone and iPod touch. Taking you further than before, this new edition starts out with an introduction to Objective-C 2.0 for developers who might be new to the platform. You’ll learn about Xcode and Interface Builder and learn how to set up and configure your iPhone Developer account</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/Cocoa-Design-Patterns-Erik-Buck/dp/0321535022/ref=sr_1_1?ie=UTF8&amp;qid=1306845559&amp;sr=8-1-spell"><img class="alignleft size-full wp-image-316" style="margin-left: 20px; margin-right: 20px;" title="cocoa-design-patterns" src="http://www.noxeos.com/wp-content/uploads/2011/05/cocoa-design-patterns.jpg" alt="" width="180" height="255" /></a>Cocoa Design Patterns</h3>
<h4>Erik M. Buck, Donald A. Yacktman</h4>
<p>Mac and iPhone developers are often overwhelmed by the breadth and sophistication of the Cocoa frameworks. Although Cocoa is indeed huge, once you understand the object-oriented patterns it uses, you’ll find it remarkably elegant, consistent, and simple.</p>
<p>Cocoa Design Patterns begins with the mother of all patterns: the Model-View-Controller (MVC) pattern, which is central to all Mac and iPhone development. Encouraged, and in some cases enforced by Apple’s tools, it’s important to have a firm grasp of MVC right from the start.</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619/ref=sr_1_1?ie=UTF8&amp;qid=1306845572&amp;sr=8-1"><img class="alignleft size-full wp-image-317" style="margin-left: 20px; margin-right: 20px;" title="cocoa-programming" src="http://www.noxeos.com/wp-content/uploads/2011/05/cocoa-programming.jpg" alt="" width="180" height="255" /></a>Cocoa Programming for Mac OS X (3rd Edition)</h3>
<h4>Aaron Hillegass</h4>
<p>There&#8217;s a reason that a large slice of the open-source movement has defected from running Linux on its laptops to running Mac OS X. The reason is the Unix core that underlies Mac OS X, and the development tools that run on that core. Cocoa makes it easy to create very slick Mac OS X interfaces for software (as well as to create applications in a hurry), and this new edition of Cocoa Programming for Mac OS X does an excellent job of teaching its readers how to put a Cocoa face on top of code (Objective-C code almost exclusively). If you know something about C and/or C++ programming and want to apply your skills to the Mac, this is precisely the book you want.</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1306845584&amp;sr=8-1"><img class="alignleft size-full wp-image-320" style="margin-left: 20px; margin-right: 20px;" title="effective-c++" src="http://www.noxeos.com/wp-content/uploads/2011/05/effective-c++.jpg" alt="" width="180" height="255" /></a>Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)</h3>
<h4>Scott Meyers</h4>
<p>This exceptionally useful text offers Scott Myers&#8217;s expertise in C++ class design and programming tips. The second edition incorporates recent advances to C++ included in the ISO standard, including namespaces and built-in template classes, and is required reading for any working C++ developer.<br />
The book opens with some hints for porting code from C to C++ and then moves on to the proper use of the new and delete operators in C++ for more robust memory management. The text then proceeds to class design, including the proper use of constructors, destructors, and overloaded operator functions for assignment within classes. (These guidelines ensure that you will create custom C++ classes that are fully functional data types, which can be copied and assigned just like built-in C++ classes.)</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/gp/product/1593272073/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=1278548962&amp;pf_rd_s=lpo-top-stripe-1&amp;pf_rd_t=201&amp;pf_rd_i=1886411972&amp;pf_rd_m=ATVPDKIKX0DER&amp;pf_rd_r=0XGJ4TGE8JKS477VT4DP"><img class="alignleft size-full wp-image-312" style="margin-left: 20px; margin-right: 20px;" title="assembly" src="http://www.noxeos.com/wp-content/uploads/2011/05/assembly.jpg" alt="" width="180" height="255" /></a>The Art of Assembly Language</h3>
<h4>Randall Hyde</h4>
<p>Assembly is a low-level programming language that&#8217;s one step above a computer&#8217;s native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use.</p>
<p>Since 1996, Randall Hyde&#8217;s The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde&#8217;s primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/Advanced-Compiler-Design-Implementation-Muchnick/dp/8178672413/ref=sr_1_1?ie=UTF8&amp;qid=1306845533&amp;sr=8-1"><img class="alignleft size-full wp-image-310" style="margin-left: 20px; margin-right: 20px;" title="advanced-compiler-design" src="http://www.noxeos.com/wp-content/uploads/2011/05/advanced-compiler-design.jpg" alt="" width="180" height="255" /></a>Advanced Compiler Design &amp; Implementation</h3>
<h4>Steven S. Muchnick</h4>
<p>This comprehensive, up-to-date work covers advanced issues in the design and implementation of compilers for modern processors, written for professionals and graduate students.</p>
<h3 style="clear: both;"><a href="http://www.amazon.com/Retargetable-Compiler-Design-Implementation/dp/0805316701"><img class="alignleft size-full wp-image-323" style="margin-left: 20px; margin-right: 20px;" title="retargetable-compiler" src="http://www.noxeos.com/wp-content/uploads/2011/05/retargetable-compiler.jpg" alt="" width="180" height="255" /></a>A Retargetable C Compiler: Design and Implementation</h3>
<h4>David R. Hanson, Christopher W. Fraser</h4>
<p>Designed as a self-study guide, the book describes the real-world tradeoffs encountered in building a production-quality, platform-retargetable compiler. The authors examine the implementation of lcc, a production-quality, research-oriented retargetable compiler, designed at AT&amp;T Bell Laboratories for the ANSI C programming language. The authors&#8217; innovative approach-a &#8220;literate program&#8221; that intermingles the text with the source code-uses a line-by-line explanation of the code to demonstrate how lcc is built.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/05/31/book-selection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GDB &#8211; Assembly debugging</title>
		<link>http://www.noxeos.com/2011/05/03/gdb-assembly-debugging/</link>
		<comments>http://www.noxeos.com/2011/05/03/gdb-assembly-debugging/#comments</comments>
		<pubDate>Tue, 03 May 2011 16:01:36 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=304</guid>
		<description><![CDATA[Here&#8217;s a little GDB trick, if you want to debug your program using assembly output. From a GDB session, type: display /i $pc break main The first line will tell GCC to output the assembly code. The second one will create a breakpoint on the main function. You can of course choose another symbol for [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a little GDB trick, if you want to debug your program using assembly output.</p>
<p>From a GDB session, type:</p>
<div class="code">
    <code class="source">display /i $pc</code><br />
    <code class="source">break main</code>
</div>
<p>The first line will tell GCC to output the assembly code. The second one will create a breakpoint on the main function. You can of course choose another symbol for the breakpoint.</p>
<p>Once done, you can run your program:</p>
<div class="code">
    <code class="source">run</code>
</div>
<p>In our example, to code will stop at the main function, showing the assembly code:</p>
<div class="code">
    <code class="source">Breakpoint 1, main () at test.c:3</code><br />
    <code class="source">3	    return 0;</code><br />
    <code class="source">1: x/i $pc  0x100000f3c <main+4>:	mov    $0x0,%eax</code>
</div>
<p>You can then step to each assembly instruction with the «si» command.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/05/03/gdb-assembly-debugging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C &#8211; Function call stack on Windows</title>
		<link>http://www.noxeos.com/2011/04/20/function-call-stack-windows/</link>
		<comments>http://www.noxeos.com/2011/04/20/function-call-stack-windows/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 13:04:12 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=292</guid>
		<description><![CDATA[For the XSFoundation project, I&#8217;ve coded an integrated debugger, that signals memory faults. On Mac OS X or Unix-like system, I can use the backtrace() function, from execinfo.h to retrieve a function call stack, when necessary. This way, when a fault occurs, the debugger can show you where the fault occurred. As XSFoundation is a [...]]]></description>
				<content:encoded><![CDATA[<p>For the <a href="http://www.noxeos.com/2011/04/20/big-thing-xsfoundation/">XSFoundation</a> project, I&#8217;ve coded an integrated debugger, that signals memory faults.</p>
<p>On Mac OS X or Unix-like system, I can use the backtrace() function, from execinfo.h to retrieve a function call stack, when necessary.</p>
<p>This way, when a fault occurs, the debugger can show you where the fault occurred.</p>
<p>As XSFoundation is a portable library, I had to do the same thing on Windows.<br />
I first try using the <a href="http://msdn.microsoft.com/en-us/library/ms680650(v=vs.85).aspx">StackWalk64</a> function, with no luck.</p>
<p>At last, I found a solution using the <a href="http://msdn.microsoft.com/en-us/library/bb204633(v=vs.85).aspx">CaptureBackTrace</a> function, from the MS API.</p>
<p>The output will be the following:</p>
<div class="code">
<code class="source">6: printStack - 0xD2430</code><br />
<code class="source">5: wmain - 0xD28F0</code><br />
<code class="source">4: __tmainCRTStartup - 0xE5010</code><br />
<code class="source">3: wmainCRTStartup - 0xE4FF0</code><br />
<code class="source">2: BaseThreadInitThunk - 0x75BE3665</code><br />
<code class="source">1: RtlInitializeExceptionChain - 0x770F9D0F</code><br />
<code class="source">0: RtlInitializeExceptionChain - 0x770F9D0F</code>
</div>
<p>Here&#8217;s the actual code to achieve this:</p>
<div class="code">
<code class="source"><span class="code-keyword">void</span> printStack( <span class="code-keyword">void</span> );</code><br />
<code class="source"><span class="code-keyword">void</span> printStack( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">     <span class="code-keyword">unsigned int</span>   i;</code><br />
<code class="source">     <span class="code-keyword">void</span>         * stack[ 100 ];</code><br />
<code class="source">     <span class="code-keyword">unsigned short</span> frames;</code><br />
<code class="source">     SYMBOL_INFO  * symbol;</code><br />
<code class="source">     HANDLE         process;</code><br />
<code class="source"></code><br />
<code class="source">     process = GetCurrentProcess();</code><br />
<code class="source"></code><br />
<code class="source">     SymInitialize( process, <span class="code-keyword">NULL</span>, TRUE );</code><br />
<code class="source"></code><br />
<code class="source">     frames               = CaptureStackBackTrace( 0, 100, stack, <span class="code-keyword">NULL</span> );</code><br />
<code class="source">     symbol               = ( SYMBOL_INFO * )calloc( <span class="code-keyword">sizeof</span>( SYMBOL_INFO ) + 256 * sizeof( char ), 1 );</code><br />
<code class="source">     symbol->MaxNameLen   = 255;</code><br />
<code class="source">     symbol->SizeOfStruct = <span class="code-keyword">sizeof</span>( SYMBOL_INFO );</code><br />
<code class="source"></code><br />
<code class="source">     <span class="code-keyword">for</span>( i = 0; i < frames; i++ )</code><br />
<code class="source">     {</code><br />
<code class="source">         SymFromAddr( process, ( DWORD64 )( stack[ i ] ), 0, symbol );</code><br />
<code class="source"></code><br />
<code class="source">         printf( "%i: %s - 0x%0X\n", frames - i - 1, symbol->Name, symbol->Address );</code><br />
<code class="source">     }</code><br />
<code class="source"></code><br />
<code class="source">     free( symbol );</code><br />
<code class="source">}</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/04/20/function-call-stack-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The next big thing: XSFoundation</title>
		<link>http://www.noxeos.com/2011/04/20/big-thing-xsfoundation/</link>
		<comments>http://www.noxeos.com/2011/04/20/big-thing-xsfoundation/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 11:59:57 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=286</guid>
		<description><![CDATA[Long time since I haven&#8217;t posted here. I&#8217;m currently coding eosgarden&#8217;s next big thing. A project called XSFoundation. It consist of a portable C library. By portable, I mean it can run on POSIX compliant systems, such as Mac OS X, Linux, Unix, as well as Windows. A few time ago, I started an insane [...]]]></description>
				<content:encoded><![CDATA[<p>Long time since I haven&#8217;t posted here.</p>
<p>I&#8217;m currently coding eosgarden&#8217;s next big thing. A project called XSFoundation.<br />
It consist of a portable C library. By portable, I mean it can run on POSIX compliant systems, such as Mac OS X, Linux, Unix, as well as Windows.</p>
<p>A few time ago, I started an insane project: coding an operating system.<br />
The base for this OS, named XEOS (x86 Experimental Operating System) is now working, and it&#8217;s even published on <a href="https://github.com/macmade/XEOS">GitHub</a>.</p>
<p>The main boot parts are coded in Assembly, and the 32bits kernel is coded in C. It also include a (not yet complete) C89 library.</p>
<p>I also decided to code another library for this OS, the XEOS library, to simplify C programming for XEOS software.<br />
I ended up with the XSFoundation project. It will be integrated in XEOS once the C library will be complete.</p>
<p>For now, it&#8217;s a standalone project, and I decided to make it portable on every OS.</p>
<p>XSFoundation is a C library providing object-oriented-like coding in C, reference counting memory management, multi-threading, base objects like array, dictionaries, sets, strings, numbers, URLs, timers, etc.<br />
The design inspiration comes from Apple&#8217;s Core Foundation.</p>
<p>Today, I achieved the final portability steps for Windows, which were multi-threading capabilities.<br />
Now you can have exactly the same code, compiling on Window, Mac or Linux!</p>
<p>I&#8217;m now going to code the socket part, so the library will have network capabilities.</p>
<p>The project is also available on GitHub, and is distributed under the terms of the BOOST license:</p>
<p><a href="https://github.com/macmade/XSFoundation/wiki">https://github.com/macmade/XSFoundation/wiki</a></p>
<p>Feel free to fork me on GitHub, and enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/04/20/big-thing-xsfoundation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Face Detection on iPhone</title>
		<link>http://www.noxeos.com/2011/04/07/face-detection-iphone/</link>
		<comments>http://www.noxeos.com/2011/04/07/face-detection-iphone/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 15:50:01 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=283</guid>
		<description><![CDATA[I&#8217;ve just released a example iPhone app that uses OpenCV to do face recognition. The OpenCV port for iOS is available on GitHub, as well as the example app. Enjoy!]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve just released a example iPhone app that uses OpenCV to do face recognition.</p>
<p>The <a href="https://github.com/macmade/OpenCV-iOS">OpenCV port</a> for iOS is available on GitHub, as well as the <a href="https://github.com/macmade/FaceDetect">example app</a>.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/04/07/face-detection-iphone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migration to GitHub</title>
		<link>http://www.noxeos.com/2011/04/02/migration-github/</link>
		<comments>http://www.noxeos.com/2011/04/02/migration-github/#comments</comments>
		<pubDate>Sat, 02 Apr 2011 08:31:11 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=279</guid>
		<description><![CDATA[I&#8217;ve just migrated all eosgarden&#8217;s OpenSource projects from GoogleCode to GitHub. I must say I still prefer SVN over GIT, as a version control system. That said, that&#8217;s maybe because I got a strong experience with SVN, and not with GIT. For now, the cool thing about GIT is the local commits. You don&#8217;t need [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve just migrated all eosgarden&#8217;s OpenSource projects from GoogleCode to GitHub.</p>
<p>I must say I still prefer SVN over GIT, as a version control system. That said, that&#8217;s maybe because I got a strong experience with SVN, and not with GIT.</p>
<p>For now, the cool thing about GIT is the local commits. You don&#8217;t need an internet connection to commit your files.<br />
For the other features, we&#8217;ll see later.</p>
<p>I took the decision to migrate to GIT mainly because of the social part of GitHub.<br />
With a GoogleCode project, you got no visibility. But with GitHub, that&#8217;s very different.</p>
<p>People can see what you&#8217;re working on, fork your projects, participate easily, etc&#8230;<br />
That&#8217;s why I&#8217;m now going to create GIT projects instead of SVN, even if I&#8217;m not as experienced with GIT as I am with SVN.</p>
<p>So just take a look at my GitHub page, if you&#8217;re interested: <a href="https://github.com/macmade">https://github.com/macmade</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/04/02/migration-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPU 64Bits check</title>
		<link>http://www.noxeos.com/2011/03/17/275/</link>
		<comments>http://www.noxeos.com/2011/03/17/275/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 18:26:14 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=275</guid>
		<description><![CDATA[I had to make a little Mac OS X application that check if the processor has a 64Bits instruction set or not. I made that for WebStart, as it only run on 64Bits machines, so users can test their own processor before downloading and buying the software. It&#8217;s not a great deal, since there are [...]]]></description>
				<content:encoded><![CDATA[<p>I had to make a little Mac OS X application that check if the processor has a 64Bits instruction set or not.<br />
I made that for <a href="http://www.eosgarden.com/en/products/webstart/">WebStart</a>, as it only run on 64Bits machines, so users can test their own processor before downloading and buying the software.</p>
<p>It&#8217;s not a great deal, since there are __x86_64__ and __i386__ macros, but in case you need such an app, it&#8217;s available on GitHub, released under the <a href="http://www.eosgarden.com/en/opensource/licenses/boost/">Boost license</a>.<br />
Feel free to use it:</p>
<p><a href="https://github.com/macmade/CPU-64Bits-Check">https://github.com/macmade/CPU-64Bits-Check</a></p>
<p>I also made the icon myself, which is available in 2000px. Also feel free to use it without copyright limitations if you need it!<br />
Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/03/17/275/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebStart &#8211; Mac OS X Lion</title>
		<link>http://www.noxeos.com/2011/03/14/webstart-mac-os-lion/</link>
		<comments>http://www.noxeos.com/2011/03/14/webstart-mac-os-lion/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 23:29:32 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=269</guid>
		<description><![CDATA[I just tested WebStart on Mac OS X 10.7 Lion, and it&#8217;s working like a charm&#8230; Enjoy!]]></description>
				<content:encoded><![CDATA[<p>I just tested WebStart on Mac OS X 10.7 Lion, and it&#8217;s working like a charm&#8230; Enjoy!</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-270" title="WebStart" src="http://www.noxeos.com/wp-content/uploads/2011/03/WebStart1.png" alt="" width="552" height="396" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/03/14/webstart-mac-os-lion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WebStart &#8211; What&#8217;s next</title>
		<link>http://www.noxeos.com/2011/03/10/webstart-next/</link>
		<comments>http://www.noxeos.com/2011/03/10/webstart-next/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 09:51:38 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=264</guid>
		<description><![CDATA[I&#8217;m currently working on the next release of WebStart. I plan to integrate support for the DynDNS service. That&#8217;s a feature of MAMP pro, and I was asked for such a feature. It will be for version 1.1, free upgrade for those with a 1.0 license code. Next steps will be support for the Trac [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m currently working on the next release of WebStart.</p>
<p>I plan to integrate support for the DynDNS service. That&#8217;s a feature of MAMP pro, and I was asked for such a feature.<br />
It will be for version 1.1, free upgrade for those with a 1.0 license code.</p>
<p>Next steps will be support for the Trac SCM. I plan to add a GUI over the Trac installation script, so you&#8217;ll be able to create Trac projects directly from WebStart.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/03/10/webstart-next/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSX Fat Binaries</title>
		<link>http://www.noxeos.com/2011/03/05/osx-fat-binaries/</link>
		<comments>http://www.noxeos.com/2011/03/05/osx-fat-binaries/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 18:03:09 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=257</guid>
		<description><![CDATA[Just a little reminder (also to myself)&#8230; Mac OS X support a lot of different processor architectures. From PPC to Intel, including ARM (for iOS), all of these with 32 or 64 bits instruction sets. When compiling a C file with GCC under Mac OS X, only the current CPU architecture will be compiled by [...]]]></description>
				<content:encoded><![CDATA[<p>Just a little reminder (also to myself)&#8230;</p>
<p>Mac OS X support a lot of different processor architectures.<br />
From PPC to Intel, including ARM (for iOS), all of these with 32 or 64 bits instruction sets.</p>
<p>When compiling a C file with GCC under Mac OS X, only the current CPU architecture will be compiled by default.</p>
<p>For instance:<br />
<code>gcc -Wall -o test test.c</code></p>
<p>Will produce an executable supporting only one architecture (similar to the host machine).</p>
<p>The executable format is called «Mach-O», and is specific to OS X.</p>
<p>The Mach-O format supports more than one architecture.<br />
It means you can have a single binary file, which contain code that will run on different CPU architectures.</p>
<p>Apple introduced that format with Mac OS X, while preparing the transition from the PowerPC architecture to Intel.<br />
The same thing was done for the M68K to PPC transition.<br />
But it&#8217;s also used to run binaries with 32 or 64 bits instruction sets.</p>
<p>To see what kind of architecture an executable file supports, your can use the «lipo» command.<br />
For instance, on my computer (Intel x86_64):<br />
<code>lipo -info /bin/bash</code></p>
<p>will return:<br />
<code>Architectures in the fat file: /bin/bash are: x86_64 i386</code></p>
<p>Meaning the executable can be run on Intel 64bits or 32bits processors.</p>
<p>In order to compile an executable for a specific processor architecture, you can pass the <code>-arch</code> option to GCC.<br />
For instance, to compile a FAT binary, that will run on 64 and 64 bits intel processors:<br />
<code>gcc -Wall -arch x86_64 -arch i386 -o test test.c</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/03/05/osx-fat-binaries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finder Wallpaper</title>
		<link>http://www.noxeos.com/2011/03/01/finder-wallpaper/</link>
		<comments>http://www.noxeos.com/2011/03/01/finder-wallpaper/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 22:41:59 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=254</guid>
		<description><![CDATA[I guess I just coded enough for this night&#8230; So here&#8217;s a little wallpaper, for the Mac addicts around here. Remembers me the good old time of Mac OS 8.5, on my iMac G3! Enjoy&#8230;]]></description>
				<content:encoded><![CDATA[<p>I guess I just coded enough for this night&#8230;<br />
So here&#8217;s a <a href="http://www.noxeos.com/wp-content/uploads/2011/03/Finder.jpg">little wallpaper</a>, for the Mac addicts around here.</p>
<p>Remembers me the good old time of Mac OS 8.5, on my iMac G3!<br />
Enjoy&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/03/01/finder-wallpaper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About selling software</title>
		<link>http://www.noxeos.com/2011/02/28/selling-software/</link>
		<comments>http://www.noxeos.com/2011/02/28/selling-software/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 22:31:20 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=245</guid>
		<description><![CDATA[As a programmer, I do love developing freeware, or OpenSource software. But sometimes, it&#8217;s just not an option. When you passed just too many days and nights coding, you&#8217;ll certainly think about selling your software. The question is how? Selling a software implies creating a web-shop, with credit-card support, having a good serial number system, [...]]]></description>
				<content:encoded><![CDATA[<p>As a programmer, I do love developing freeware, or OpenSource software.<br />
But sometimes, it&#8217;s just not an option.</p>
<p>When you passed just too many days and nights coding, you&#8217;ll certainly think about selling your software.<br />
The question is how?</p>
<p>Selling a software implies creating a web-shop, with credit-card support, having a good serial number system, and maybe an online activation system.</p>
<p>Not easy&#8230; When you&#8217;re software is ready, you usually don&#8217;t want to spend more time for those tasks&#8230;</p>
<p>I personally use the «eSellerate» system: <a href="http://www.esellerate.net/">http://www.esellerate.net/</a></p>
<p>They just manage everything. Serial numbers, online activation, custom web-shops, in-app purchase, physical CD delivery, etc&#8230;</p>
<p>They provide a very well documented SDK (static library), that you can embed into your software.<br />
No more hassle. It just works&#8230;</p>
<p>So if you need to sell software, and don&#8217;t want to spend time on other things than developing, just take a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/28/selling-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X Lion &#8211; Server Side</title>
		<link>http://www.noxeos.com/2011/02/24/mac-os-lion-server-side/</link>
		<comments>http://www.noxeos.com/2011/02/24/mac-os-lion-server-side/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 17:45:04 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=216</guid>
		<description><![CDATA[Server Stats Web Server Address Book Alerts Groups Hardware iCal Mail PodCast Profiles Sharing Time Machine Users VPN Wiki]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-228  aligncenter" title="stats" src="http://www.noxeos.com/wp-content/uploads/2011/02/stats.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Server Stats</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-232" title="web" src="http://www.noxeos.com/wp-content/uploads/2011/02/web.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Web Server</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-217" title="address" src="http://www.noxeos.com/wp-content/uploads/2011/02/address.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Address Book</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-218" title="alerts" src="http://www.noxeos.com/wp-content/uploads/2011/02/alerts.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Alerts</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-220" title="groups" src="http://www.noxeos.com/wp-content/uploads/2011/02/groups.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Groups</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-221" title="hardware" src="http://www.noxeos.com/wp-content/uploads/2011/02/hardware.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Hardware</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-222" title="ical" src="http://www.noxeos.com/wp-content/uploads/2011/02/ical.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">iCal</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-224" title="mail" src="http://www.noxeos.com/wp-content/uploads/2011/02/mail.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Mail</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-225" title="podcast" src="http://www.noxeos.com/wp-content/uploads/2011/02/podcast.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">PodCast</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-226" title="profile" src="http://www.noxeos.com/wp-content/uploads/2011/02/profile.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Profiles</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-227" title="sharing" src="http://www.noxeos.com/wp-content/uploads/2011/02/sharing.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Sharing</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-229" title="time-machine" src="http://www.noxeos.com/wp-content/uploads/2011/02/time-machine.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Time Machine</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-230" title="users" src="http://www.noxeos.com/wp-content/uploads/2011/02/users.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Users</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-231" title="vpn" src="http://www.noxeos.com/wp-content/uploads/2011/02/vpn.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">VPN</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-233" title="wiki" src="http://www.noxeos.com/wp-content/uploads/2011/02/wiki.jpg" alt="" width="601" height="411" /></p>
<p style="text-align: center;">Wiki</p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/24/mac-os-lion-server-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X Lion &#8211; Screens</title>
		<link>http://www.noxeos.com/2011/02/24/mac-os-lion-screens/</link>
		<comments>http://www.noxeos.com/2011/02/24/mac-os-lion-screens/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 16:30:19 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=191</guid>
		<description><![CDATA[Finder &#8211; All My Files Finder -Applications Finder -AirDrop Preferences &#8211; Internet Accounts Preferences -Disk Encryption AddressBook iCal iCal DashBoard Mail LaunchPad Expose &#160;]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-208" title="MyFiles" src="http://www.noxeos.com/wp-content/uploads/2011/02/MyFiles.jpg" alt="" width="619" height="394" /></p>
<p style="text-align: center;">Finder &#8211; All My Files</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-194" title="Applications" src="http://www.noxeos.com/wp-content/uploads/2011/02/Applications.jpg" alt="" width="619" height="394" /></p>
<p style="text-align: center;">Finder -Applications</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-197" title="AirDrop" src="http://www.noxeos.com/wp-content/uploads/2011/02/AirDrop.jpg" alt="" width="619" height="394" /></p>
<p style="text-align: center;">Finder -AirDrop</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-204" title="InternetAccounts" src="http://www.noxeos.com/wp-content/uploads/2011/02/InternetAccounts.jpg" alt="" width="601" height="515" /></p>
<p style="text-align: center;">Preferences &#8211; Internet Accounts</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-200" title="DiskCrypt" src="http://www.noxeos.com/wp-content/uploads/2011/02/DiskCrypt.jpg" alt="" width="601" height="480" /></p>
<p style="text-align: center;">Preferences -Disk Encryption</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-196" title="AddressBook" src="http://www.noxeos.com/wp-content/uploads/2011/02/AddressBook.jpg" alt="" width="599" height="361" /></p>
<p style="text-align: center;">AddressBook</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-202" title="iCal-1" src="http://www.noxeos.com/wp-content/uploads/2011/02/iCal-1.jpg" alt="" width="606" height="414" /></p>
<p style="text-align: center;">iCal</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-203" title="iCal-2" src="http://www.noxeos.com/wp-content/uploads/2011/02/iCal-2.jpg" alt="" width="666" height="448" /></p>
<p style="text-align: center;">iCal</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-199" title="Dashboard" src="http://www.noxeos.com/wp-content/uploads/2011/02/Dashboard.jpg" alt="" width="640" height="400" /></p>
<p style="text-align: center;">DashBoard</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-207" title="Mail" src="http://www.noxeos.com/wp-content/uploads/2011/02/Mail.jpg" alt="" width="614" height="439" /></p>
<p style="text-align: center;">Mail</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-205" title="LaunchPad" src="http://www.noxeos.com/wp-content/uploads/2011/02/LaunchPad.jpg" alt="" width="560" height="350" /></p>
<p style="text-align: center;">LaunchPad</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-201" title="Expose" src="http://www.noxeos.com/wp-content/uploads/2011/02/Expose.jpg" alt="" width="560" height="350" /></p>
<p style="text-align: center;">Expose</p>
<p style="text-align: center;">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/24/mac-os-lion-screens/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interview with Apple</title>
		<link>http://www.noxeos.com/2011/02/18/interview-apple/</link>
		<comments>http://www.noxeos.com/2011/02/18/interview-apple/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 17:24:01 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=186</guid>
		<description><![CDATA[The interview is done! Two hours, with a SpringBoard Apps manager, and a GameKit manager, writing C code on a sheet of paper. Linked lists, hash tables, big O notation, search algorithms, bitwise operations&#8230; Everything on paper. It&#8217;s kinda hard! And I have to say I felt stupid some times&#8230; But they said I did [...]]]></description>
				<content:encoded><![CDATA[<p>The interview is done!<br />
Two hours, with a SpringBoard Apps manager, and a GameKit manager, writing C code on<br />
a sheet of paper.</p>
<p>Linked lists, hash tables, big O notation, search algorithms, bitwise operations&#8230;<br />
Everything on paper.<br />
It&#8217;s kinda hard! And I have to say I felt stupid some times&#8230;</p>
<p>But they said I did well. So I&#8217;ll have to wait for an answer.<br />
Whatever happens, it&#8217;s already amazing that Apple contacted me, and wanted to interview me here in Barcelona.</p>
<p>Now I&#8217;ll enjoy my stay here, till sunday, having champagne on my private deck in the hotel.<br />
Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/18/interview-apple/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MWC &#8211; Barcelona</title>
		<link>http://www.noxeos.com/2011/02/16/mwc-barcelona/</link>
		<comments>http://www.noxeos.com/2011/02/16/mwc-barcelona/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 18:21:06 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=181</guid>
		<description><![CDATA[Tomorrow morning, I&#8217;ll flight to Barcelona. I&#8217;ll be there till sunday. I don&#8217;t know if I&#8217;ll be able to attend the Mobile World Congress, but I&#8217;ll try eventually. On Friday, I&#8217;ve got a meeting with Apple. Job interview with 3 iOS engineers managers, plus a recruiter. Cross your fingers! California is just past the sea&#8230; [...]]]></description>
				<content:encoded><![CDATA[<p>Tomorrow morning, I&#8217;ll flight to Barcelona. I&#8217;ll be there till sunday.<br />
I don&#8217;t know if I&#8217;ll be able to attend the Mobile World Congress, but I&#8217;ll try eventually.</p>
<p>On Friday, I&#8217;ve got a meeting with Apple. Job interview with 3 iOS engineers managers, plus a recruiter.<br />
Cross your fingers! California is just past the sea&#8230; ; )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/16/mwc-barcelona/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebStart Light</title>
		<link>http://www.noxeos.com/2011/02/14/webstart-light/</link>
		<comments>http://www.noxeos.com/2011/02/14/webstart-light/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 23:08:40 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=178</guid>
		<description><![CDATA[Today, I decided to create a light and free version of WebStart. It will only include Apache 2, MySQL 5.1, and PHP 5.3. Only one virtual host will be available by default (but you can still tweak the configuration files). No log file viewing, no configuration editing, no OpenLDAP, no easy website creation and management, [...]]]></description>
				<content:encoded><![CDATA[<p>Today, I decided to create a light and free version of WebStart.</p>
<p>It will only include Apache 2, MySQL 5.1, and PHP 5.3.<br />
Only one virtual host will be available by default (but you can still tweak the configuration files).</p>
<p>No log file viewing, no configuration editing, no OpenLDAP, no easy website creation and management, no SCM&#8230;<br />
But it will be free. : )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/14/webstart-light/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebStart installer is ready</title>
		<link>http://www.noxeos.com/2011/02/13/webstart-installer-ready/</link>
		<comments>http://www.noxeos.com/2011/02/13/webstart-installer-ready/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 17:31:45 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=175</guid>
		<description><![CDATA[Today, I ended the development of the WebStart custom installer. I&#8217;ve just tested the application on a fresh Mac OS X installation, and everything is working like a charm, out of the box. Now, I just need to finish writing the documentation, for the application and on the website, take a decision for the pricing, [...]]]></description>
				<content:encoded><![CDATA[<p>Today, I ended the development of the WebStart custom installer.<br />
I&#8217;ve just tested the application on a fresh Mac OS X installation, and everything is working like a charm, out of the box.</p>
<p>Now, I just need to finish writing the documentation, for the application and on the website, take a decision for the pricing, and it will be over&#8230;</p>
<p>I probably won&#8217;t have time to finish everything this week, as I&#8217;m flying to Barcelona for the Mobile World Congress.<br />
But maybe next week&#8230; Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/13/webstart-installer-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebStart announced!</title>
		<link>http://www.noxeos.com/2011/02/07/webstart-announced/</link>
		<comments>http://www.noxeos.com/2011/02/07/webstart-announced/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 15:10:57 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=168</guid>
		<description><![CDATA[Today, I decided to announce WebStart, eosgarden&#8217;s major product. No release date has been fixed, but I&#8217;m very close to the end of the development. The main purpose of WebStart is to provide you with a workable web and database server. Therefore, it includes the Apache 2 HTTP server (with the PHP scripting language), the [...]]]></description>
				<content:encoded><![CDATA[<p>Today, I decided to <a href="http://www.eosgarden.com/en/products/webstart/overview/">announce</a> WebStart, eosgarden&#8217;s major product.<br />
No release date has been fixed, but I&#8217;m very close to the end of the development.</p>
<p>The main purpose of WebStart is to provide you with a workable web and database server.<br />
Therefore, it includes the Apache 2 HTTP server (with the PHP scripting language), the MySQL database server, and the OpenLDAP directory service.</p>
<p>But WebStart is more than just a packaged version of those software. It also provides you with a full-featured web development environment, with more than 50 useful tools, that web developers often need.</p>
<p>It has software for automatic image generation, software revision control, document conversion, automated documentation generation, testing, etc.</p>
<p>All that stuff is installed in a specific directory, separate from the system paths, so you don&#8217;t have to worry when you upgrade your Mac OS X system. It does not replace any exisiting software on your computer. It&#8217;s just here at your convenience, so you can concentrate on your development tasks, rather than on compiling and installing software again and again from scratch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/07/webstart-announced/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A look at the ARM architecture</title>
		<link>http://www.noxeos.com/2011/02/05/arm-architecture/</link>
		<comments>http://www.noxeos.com/2011/02/05/arm-architecture/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 12:07:19 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=156</guid>
		<description><![CDATA[I must say I&#8217;m a big fan of the x86 architecture, and Intel processors, especially when writing assembly code. The instruction set on that type of processors is nice, there&#8217;s not too much registers&#8230; In one word: SISC. At the opposite, I always felt completely stupid with RISC processors. From the PPC architecture, with all [...]]]></description>
				<content:encoded><![CDATA[<p>I must say I&#8217;m a big fan of the x86 architecture, and Intel processors, especially when writing assembly code.<br />
The instruction set on that type of processors is nice, there&#8217;s not too much registers&#8230; In one word: SISC.</p>
<p>At the opposite, I always felt completely stupid with RISC processors. From the PPC architecture, with all that vectorial and floating point registers, to the ARM architecture, know used on the iOS devices.</p>
<p>I took a closer look on the ARM architecture some time ago, because I always felt the need to know more about RISC processors.</p>
<p>Here are a few tips, or things that I&#8217;ve learned about the ARM architecture.</p>
<p>First of all, an ARM processor can be run in several modes, as Intel processors.<br />
The  six available modes are:</p>
<ol>
<li><strong>User: </strong>The unprivileged mode under which most tasks run</li>
<li><strong>FIQ: </strong>Entered when a high priority interrupt is raised</li>
<li><strong>IRQ: </strong>Entered when a low priority nterrupt is raised</li>
<li><strong>Supervisor: </strong>Entered on reset and when a interrupt instruction is run</li>
<li><strong>Abort: </strong>Memory access violations</li>
<li><strong>Undef: </strong>Undefined instructions mode</li>
</ol>
<p>I must say I always felt bad with RISC registers. There are just too many of them.<br />
The ARM architecture has 37 registers. All registers are 32 bits long.</p>
<p>The registers are:</p>
<ol>
<li>1 program counter</li>
<li>1 current program status register</li>
<li>5 saved program status registers</li>
<li>30 general purpose registers</li>
</ol>
<p>However, access to these registers are defined by the CPU mode.<br />
Each mode has access to 13 general purpose registers (r0 &#8211; r12), a stack pointer (r13), a link regiser (r14), a program counter (r15), and the current program status register (cpsr).</p>
<p>When running supervisor mode, the spsr (saved program status register) register is also available.</p>
<p>The ARM architecture does not support shift operations, but they can be done through multiplication, by a power of 2.</p>
<p>It&#8217;s also important to note that the ARM architecture is  a «load &#038; store» architecture, meaning memory to memory data processing is not available.<br />
Data need to be copied into registers first, and then processed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/05/arm-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebStart</title>
		<link>http://www.noxeos.com/2011/02/05/webstart/</link>
		<comments>http://www.noxeos.com/2011/02/05/webstart/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 10:29:32 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=153</guid>
		<description><![CDATA[Here&#8217;s a little preview of what&#8217;s coming next&#8230; WebStart is an webserver control application, including full-featured Apache, MySQL, OpenLDAP servers, as well as a complete development environment for OS X. The application was originally developed on Mac OS X 10.4, so I&#8217;m going to update it for 10.6, with XCode 4. It might tight some [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a little preview of what&#8217;s coming next&#8230;<br />
WebStart is an webserver control application, including full-featured Apache, MySQL, OpenLDAP servers, as well as a complete development environment for OS X.<br />
The application was originally developed on Mac OS X 10.4, so I&#8217;m going to update it for 10.6, with XCode 4.<br />
It might tight some time for the update, but I&#8217;m decided to release this little piece of software.</p>
<p>So stay tuned, I&#8217;m now concentrating on that&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/05/webstart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About compiler optimizations</title>
		<link>http://www.noxeos.com/2011/02/04/compiler-optimizations/</link>
		<comments>http://www.noxeos.com/2011/02/04/compiler-optimizations/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 10:21:36 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=139</guid>
		<description><![CDATA[I came into some interesting stuff some time ago, while trying to detect performance issues in some ANSI-C software. Sometimes, while coding, it may be difficult to decide whether to use a recursive function or a loop, and if so, what kind of loop. The best example, is the factorial computation. That example is typically [...]]]></description>
				<content:encoded><![CDATA[<p>I came into some interesting stuff some time ago, while trying to detect performance issues in some ANSI-C software.</p>
<p>Sometimes, while coding, it may be difficult to decide whether to use a recursive function or a loop, and if so, what kind of loop.<br />
The best example, is the factorial computation. That example is typically used to teach recursive function.</p>
<p>I always felt something strange with those examples. Why the hell using a recursive function for a factorial computation, since we can use a <code>while</code> loop, for instance?</p>
<p>If you think about machine code, or assembly, calling a procedure implies to copy the values of some registers (instruction pointer, etc), to execute a jump into another portion of memory (maybe in another segment), to execute the code, to restore the registers, and finally to return to the previous memory location (<code>RETF</code>).<br />
In pure assembly, a simple loop, using the <code>CX</code> register, on Intel, is far more efficient, as there&#8217;s no jump, nor stack operation to copy the register values.</p>
<p>So what about C? Take a look at this typical example:</p>
<div class="code">
<code class="source"><span class="code-keyword">unsigned long</span> factorial( <span class="code-keyword">unsigned long</span> n )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-keyword">if</span>( n == 0 )</code><br />
<code class="source">    {</code><br />
<code class="source">        <span class="code-keyword">return</span> 1;</code><br />
<code class="source">    }</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">return</span> n * factorial( n - 1 );</code><br />
<code class="source">}</code>
</div>
<p>The same can be achieved with a <code>while</code> loop:</p>
<div class="code">
<code class="source"><span class="code-keyword">unsigned long</span> x = n;</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">if</span>( n == 0 )</code><br />
<code class="source">{</code><br />
<code class="source">    x = 1;</code><br />
<code class="source">}</code><br />
<code class="source"><span class="code-keyword">else</span></code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-keyword">while</span>( n > 1 )</code><br />
<code class="source">    {</code><br />
<code class="source">        x *= --n;</code><br />
<code class="source">    }</code><br />
<code class="source">}</code>
</div>
<p>We can also choose to use a <code>for</code> loop:</p>
<div class="code">
<code class="source"><span class="code-keyword">unsigned long</span> x = n;</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">if</span>( n == 0 )</code><br />
<code class="source">{</code><br />
<code class="source">    x = 1;</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">for</span>( ; n > 1 ; )</code><br />
<code class="source">{</code><br />
<code class="source">    x = --n * x;</code><br />
<code class="source">}</code>
</div>
<p>In pure assembly, we would also write a loop. So with GCC inline assembly:</p>
<div class="code">
<code class="source"><span class="code-keyword">unsigned long</span> x;</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">if</span>( n == 0 )</code><br />
<code class="source">{</code><br />
<code class="source">    x = 1;</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">__asm__</span></code><br />
<code class="source">(</code><br />
<code class="source">    <span class="code-string">"    movq %[n], %%rax \n\t"</span></code><br />
<code class="source">    <span class="code-string">"    movq %[n], %%rcx \n\t"</span></code><br />
<code class="source">    <span class="code-string">"    decq       %%rcx \n\t"</span></code><br />
<code class="source">    <span class="code-string">"FACTORIAL:"</span></code><br />
<code class="source">    <span class="code-string">"    mulq %%rcx \n\t"</span></code><br />
<code class="source">    <span class="code-string">"    decq %%rcx \n\t"</span></code><br />
<code class="source">    <span class="code-string">"    jnz FACTORIAL \n\t"</span></code><br />
<code class="source">    <span class="code-string">"    movq %%rax, %[x]"</span></code><br />
<code class="source">    </code><br />
<code class="source">    : [ x ] <span class="code-string">"=m"</span> ( x )</code><br />
<code class="source">    : [ n ] <span class="code-string">"m"</span>  ( n )</code><br />
<code class="source">);</code>
</div>
<p>Which one will be the fastest? At first sight, I would have said inline assembly, while, for, and finally the recursive function.</p>
<p>But that&#8217;s not the case.<br />
Running each case 10000000 time gives the following results:</p>
<div class="code">
<code class="source">Recursive:  0.64492511749267578125</code><br />
<code class="source">While:      1.47788429260253906250</code><br />
<code class="source">Assembler:  0.62227106094360351562</code><br />
<code class="source">For:        1.47960233688354492188</code>
</div>
<p>Inline assembly is the fastest, but the recursive function is very very close.<br />
The while and for loops takes much longer.</p>
<p>I was very surprised. Why such results?<br />
The answer is in the way GCC optimizes to source code to generate intermediate object code.</p>
<p>If we take a look closer at what GCC does, we can see it optimizes for us a lot of things.</p>
<p>For instance, our recusrisve function, in pure assembly, generated by GCC:</p>
<div class="code">
<code class="source">LFE7:</code><br />
<code class="source"><span class="code-keyword">.globl</span> _factorial_recursive</code><br />
<code class="source">_factorial_recursive:</code><br />
<code class="source">LFB8:</code><br />
<code class="source">	<span class="code-keyword">pushq</span>	%rbp</code><br />
<code class="source">LCFI3:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rsp, %rbp</code><br />
<code class="source">LCFI4:</code><br />
<code class="source">	<span class="code-keyword">subq</span>	$16, %rsp</code><br />
<code class="source">LCFI5:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rdi, -8(%rbp)</code><br />
<code class="source">	<span class="code-keyword">cmpq</span>	$0, -8(%rbp)</code><br />
<code class="source">	<span class="code-keyword">jne</span>	L4</code><br />
<code class="source">	<span class="code-keyword">movq</span>	$1, -16(%rbp)</code><br />
<code class="source">	<span class="code-keyword">jmp</span>	L6</code><br />
<code class="source">L4:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	-8(%rbp), %rdi</code><br />
<code class="source">	<span class="code-keyword">decq</span>	%rdi</code><br />
<code class="source">	<span class="code-keyword">call</span>	_factorial_recursive</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rax, %rdx</code><br />
<code class="source">	<span class="code-keyword">imulq</span>	-8(%rbp), %rdx</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rdx, -16(%rbp)</code><br />
<code class="source">L6:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	-16(%rbp), %rax</code><br />
<code class="source">	<span class="code-keyword">leave</span></code><br />
<code class="source">	<span class="code-keyword">ret</span></code>
</div>
<p>And now the <code>while</code> loop:</p>
<div class="code">
<code class="source">LFB9:</code><br />
<code class="source">	<span class="code-keyword">pushq</span>	%rbp</code><br />
<code class="source">LCFI6:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rsp, %rbp</code><br />
<code class="source">LCFI7:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rdi, -24(%rbp)</code><br />
<code class="source">	<span class="code-keyword">movq</span>	-24(%rbp), %rax</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rax, -8(%rbp)</code><br />
<code class="source">	<span class="code-keyword">cmpq</span>	$0, -24(%rbp)</code><br />
<code class="source">	<span class="code-keyword">jne</span>	L12</code><br />
<code class="source">	<span class="code-keyword">movq</span>	$1, -32(%rbp)</code><br />
<code class="source">	<span class="code-keyword">jmp</span>	L11</code><br />
<code class="source">L13:</code><br />
<code class="source">	<span class="code-keyword">decq</span>	-24(%rbp)</code><br />
<code class="source">	<span class="code-keyword">movq</span>	-8(%rbp), %rax</code><br />
<code class="source">	<span class="code-keyword">imulq</span>	-24(%rbp), %rax</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rax, -8(%rbp)</code><br />
<code class="source">L12:</code><br />
<code class="source">	<span class="code-keyword">cmpq</span>	$1, -24(%rbp)</code><br />
<code class="source">	<span class="code-keyword">ja</span>	L13</code><br />
<code class="source">	<span class="code-keyword">movq</span>	-8(%rbp), %rax</code><br />
<code class="source">	<span class="code-keyword">movq</span>	%rax, -32(%rbp)</code><br />
<code class="source">L11:</code><br />
<code class="source">	<span class="code-keyword">movq</span>	-32(%rbp), %rax</code>
</div>
<p>The same applies for the <code>for</code> loop.</p>
<p>We can see here the compiler (GCC for instance) did a HUGE optimization of our source code.<br />
It means actually that, except if you&#8217;re a assembly genius, you probably won&#8217;t code that will run faster, because you did it with inline assembly.<br />
Nowadays, compilers are so efficient that some optimizations just won&#8217;t work.</p>
<p>In doubt, always remember to benchmark your code, and always remember that compiler can usually generate intermediate assembly code, so you can check what your code will really look like, when executed by the CPU.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/04/compiler-optimizations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XCode Build Settings</title>
		<link>http://www.noxeos.com/2011/02/04/xcode-build-settings/</link>
		<comments>http://www.noxeos.com/2011/02/04/xcode-build-settings/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 06:36:22 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mac OS & iOS]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=118</guid>
		<description><![CDATA[For the curious, here are the build settings I use and recommend, when using XCode for Mac and iOS applications. Most of them activates the highest possible error reporting level. At first sight, it may seem it&#8217;s hard to code with those settings, but it really saves you a lot of time debugging your app. [...]]]></description>
				<content:encoded><![CDATA[<p>For the curious, here are the build settings I use and recommend, when using XCode for Mac and iOS applications.<br />
Most of them activates the highest possible error reporting level.</p>
<p>At first sight, it may seem it&#8217;s hard to code with those settings, but it really saves you a lot of time debugging your app.<br />
Most of the problems usually encountered in application development, using Objective-C, comes from the Objective-C runtime. And sometimes, those problems are hard to debug, because of the dynamic nature of the Objective-C language.</p>
<p>Activating most of the compiler error flags will save you time, as the compilation will fail, with an error message, instead of leaving you with a app that crashed for apparently no reason.</p>
<p>About the &#8220;Unused Parameters&#8221; setting, if you really don&#8217;t use a parameter, you can cast it to <code>void</code>, so the compiler won&#8217;t complain:</p>
<div class="code">
	<code class="source"><span class="code-keyword">void</span> some_func( <span class="code-keyword">int</span> some_param )</code><br />
	<code class="source">{</code><br />
	<code class="source">    ( <span class="code-keyword">void</span> )some_param;</code><br />
	<code class="source">    <span class="code-comment">/* ... */</span></code><br />
	<code class="source">}</code>
</div>
<p>When dealing with methods returning an <code>id</code> type, you may sometimes have to cast the object, to let the compiler knows about the type:</p>
<div class="code">
	<code class="source">[ ( ClassName * )[ someObject getIdObject ] someMethod ];</code>
</div>
<p>So here are the settings, grouped as in the XCode build settings panel.</p>
<h2>Linking</h2>
<h4>Dead Code Stripping</h4>
<pre>DEAD_CODE_STRIPPING = YES</pre>
<p>Activating this setting causes the -dead_strip flag to be passed to ld(1) via cc(1) to turn on dead code stripping.<br />
If this option is selected, -gfull (not -gused) must be used to generate debugging symbols in order to have them correctly stripped.</p>
<pre>[DEAD_CODE_STRIPPING, -dead_strip]</pre>
<h4>Link With Standard Libraries</h4>
<pre>LINK_WITH_STANDARD_LIBRARIES = YES</pre>
<p>If this setting activated, then the compiler driver will automatically pass its standard libraries to the linker to use during linking.<br />
If desired, this flag can be used to disable linking with the standard libraries, and then individual libraries can be passed as Other Linker Flags.</p>
<pre>[LINK_WITH_STANDARD_LIBRARIES, -nostdlib]</pre>
<h2>Packaging</h2>
<h4>Info.plist Output Encoding</h4>
<pre>INFOPLIST_OUTPUT_FORMAT = binary</pre>
<p>Specifies the output encoding for the output Info.plist (by default, the output encoding will be unchanged from the input). The output endcodings can be &#8216;binary&#8217; or &#8216;XML&#8217;.</p>
<pre>[INFOPLIST_OUTPUT_FORMAT]</pre>
<h2>GCC 4.2 &#8211; Code Generation</h2>
<h4>Generate Debug Symbols</h4>
<pre>GCC_GENERATE_DEBUGGING_SYMBOLS = NO</pre>
<p>(Permitted for «Debug» configuration)<br />
Enables or disables generation of debug symbols.<br />
When debug symbols are enabled, the level of detail can be controlled by the build &#8216;Level of Debug Symbols&#8217; setting.</p>
<pre>[GCC_GENERATE_DEBUGGING_SYMBOLS]</pre>
<h4>Generate Position-Dependant Code</h4>
<pre>GCC_DYNAMIC_NO_PIC = YES</pre>
<p>(No permitted for «Debug» configuration, or for shared libraries)<br />
Faster function calls for applications. Not appropriate for shared libraries (which need to be position-independent).</p>
<pre>[GCC_DYNAMIC_NO_PIC, -mdynamic-no-pic]</pre>
<h4>Inline Methods Hidden</h4>
<pre>GCC_INLINES_ARE_PRIVATE_EXTERN = YES</pre>
<p>When enabled, out-of-line copies of inline methods are declared &#8216;private extern&#8217;.</p>
<pre>[GCC_INLINES_ARE_PRIVATE_EXTERN, -fvisibility-inlines-hidden]</pre>
<h4>Make Strings Read-Only</h4>
<pre>GCC_REUSE_STRINGS = YES</pre>
<p>Reuse string literals.</p>
<pre>[GCC_REUSE_STRINGS, -fwritable-strings]</pre>
<h4>Objective-C Garbage Collection</h4>
<pre>GCC_ENABLE_OBJC_GC = Unsupported</pre>
<p>Compiles code to use Garbage Collector write-barrier assignment primitives within the Objective-C runtime.<br />
Code is marked as being GC capable.<br />
An application marked GC capable will be started by the runtime with Garbage Collection enabled.<br />
All Objective-C code linked or loaded by this application must also be GC capable.<br />
Code compiled as GC Required is presumed to not use traditional Cocoa retain/release methods and may not be loaded into an application that is not running with Garbage Collection enabled.<br />
Code compiled as GC Supported is presumed to also contain traditional retain/release method logic and can be loaded into any application.<br />
Garbage Collection is only supported on Mac OS X 10.5 and later.</p>
<pre>[GCC_ENABLE_OBJC_GC, -fobjc-gc | -fobjc-gc-only]</pre>
<h4>Optimization Level</h4>
<pre>GCC_OPTIMIZATION_LEVEL = Fastest, Smallest [-Os]</pre>
<ul>
<li>
	<strong>None</strong>: Do not optimize. [-O0] <br />
	With this setting, the compiler&#8217;s goal is to reduce the cost of compilation and to make debugging produce the expected results.<br />
	Statements are independent: if you stop the program with a breakpoint between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you would expect from the source code.
</li>
<li>
	<strong>Fast</strong>: Optimizing compilation takes somewhat more time, and a lot more memory for a large function. [-O, -O1]<br />
	 With this setting, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time. In Apple&#8217;s compiler, strict aliasing, block reordering, and inter-block scheduling are disabled by default when optimizing.
</li>
<li>
	<strong>Faster</strong>: The compiler performs nearly all supported optimizations that do not involve a space-speed tradeoff. [-O2]<br />
	 With this setting, the compiler does not perform loop unrolling or function inlining, or register renaming.<br />
	As compared to the &#8216;Fast&#8217; setting, this setting increases both compilation time and the performance of the generated code.
</li>
<li>
	<strong>Fastest</strong>: Turns on all optimizations specified by the &#8216;Faster&#8217; setting and also turns on function inlining and register renaming options.<br />
	This setting may result in a larger binary. [-O3]
</li>
<li>
	<strong>Fastest, smallest</strong>: Optimize for size.<br />
	This setting enables all &#8216;Faster&#8217; optimizations that do not typically increase code size.<br />
	It also performs further optimizations designed to reduce code size. [-Os]
</li>
</ul>
<pre>[GCC_OPTIMIZATION_LEVEL]</pre>
<h2>GCC 4.2 &#8211; Language</h2>
<h4>C Language Dialect</h4>
<pre>GCC_C_LANGUAGE_STANDARD = C89</pre>
<p>(C99 permitted if absolutely necessary, especially on iOS)<br />
Choose a standard or non-standard C language dialect.</p>
<ul>
<li>
	<strong>ANSI C:</strong><br />
	Accept ISO C90 and ISO C++, turning off GNU extensions that are incompatible. [-ansi] <br />
	Incompatible GNU extensions include the &#8216;asm&#8217;, &#8216;inline&#8217;, and &#8216;typeof&#8217; keywords 	(but not the equivalent __asm__, __inline__, and __typeof__ forms), and the &#8216;//&#8217; syntax for comments. <br />
	This setting also enables trigraphs.
</li>
<li>
	<strong>C89:</strong><br />
	Accept ISO C90, but not GNU extensions. [-std=c89]
</li>
<li>
	<strong>GNU89:</strong><br />
	Accept ISO C90 and GNU extensions. [-std=gnu89]
</li>
<li>
	<strong>C99:</strong><br />
	Accept ISO C99, but not GNU extensions. [-std=c99]
</li>
<li>
	<strong>GNU99:</strong><br />
	Accept ISO C99 and GNU extensions. [-std=gnu99]
</li>
<li>
	<strong>Compiler Default:</strong><br />
	Tells the compiler to use its default C language dialect. This is normally the best choice unless you have specific needs. (Currently equivalent to GNU89.)
</li>
</ul>
<p>Please see the full GCC manual for the full definition of all these settings on the C dialect: <br />
<a href="http://developer.apple.com/documentation/DeveloperTools/gcc-4.2.1/gcc/C-Dialect-Options.html">http://developer.apple.com/documentation/DeveloperTools/gcc-4.2.1/gcc/C-Dialect-Options.html</a></p>
<pre>[GCC_C_LANGUAGE_STANDARD]</pre>
<h2>GCC 4.2 &#8211; Warnings</h2>
<h4>Check Switch Statements</h4>
<pre>GCC_WARN_CHECK_SWITCH_STATEMENTS = YES</pre>
<p>Warn whenever a switch statement has an index of enumeral type and lacks a case for one or more of the named codes of that enumeration.<br />
The presence of a default label prevents this warning.<br />
Case labels outside the enumeration range also provoke warnings when this option is used.</p>
<pre>[GCC_WARN_CHECK_SWITCH_STATEMENTS, -Wswitch]</pre>
<h4>Effective C++ Violations</h4>
<pre>GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES</pre>
<p>Warn about violations of the following style guidelines from Scott Meyers&#8217; Effective C++ book:</p>
<ul>
<li>
	Item 11:<br />
	Define a copy constructor and an assignment operator for classes with dynamically allocated memory. 
</li>
<li>
	Item 12:<br />
	Prefer initialization to assignment in constructors. 
</li>
<li>
	Item 14:<br />
	Make destructors virtual in base classes. 
</li>
<li>
	Item 15:<br />
	Have operator= return a reference to *this. 
</li>
<li>
	Item 23:<br />
	Don&#8217;t try to return a reference when you must return an object.
</li>
</ul>
<p>and about violations of the following style guidelines from Scott Meyers&#8217; More Effective C++ book:</p>
<ul>
<li>
	Item 6:<br />
	Distinguish between prefix and postfix forms of increment and decrement operators. 
</li>
<li>
	Item 7:<br />
	Never overload &#038;&#038;, ||, or, .
</li>
</ul>
<p>If you use this option, you should be aware that the standard library headers do not obey all of these guidelines; you can use grep -v to filter out those warnings. </p>
<pre>[GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS, -Weffc++]</pre>
<h4>Four Character Literals</h4>
<pre>GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES</pre>
<p>Warn about four-char literals (e.g., MacOS-style OSTypes: &#8216;APPL&#8217;). </p>
<pre>[GCC_WARN_FOUR_CHARACTER_CONSTANTS, -Wfour-char-constants]</pre>
<h4>Global Construction or Destruction Required</h4>
<pre>GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS = YES</pre>
<p>Warn about namespace scope data that requires construction or destruction, or functions that use the constructor attribute or the destructor attribute.<br />
Additionally warn if the Objective-C GNU runtime is used to initialize various metadata. </p>
<pre>[GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS, -Wglobal-constructors]</pre>
<h4>Hidden Local Variables</h4>
<pre>GCC_WARN_SHADOW = YES</pre>
<p>Warn whenever a local variable shadows another local variable, parameter or global variable or whenever a built-in function is shadowed. </p>
<pre>[GCC_WARN_SHADOW, -Wshadow]</pre>
<h4>Implicit Conversion to 32 Bit Type</h4>
<pre>GCC_WARN_64_TO_32_BIT_CONVERSION = YES</pre>
<p>Warn if a value is implicitly converted from a 64 bit type to a 32 bit type. </p>
<pre>[GCC_WARN_64_TO_32_BIT_CONVERSION, -Wshorten-64-to-32]</pre>
<h4>Incomplete Objective-C Protocols</h4>
<pre>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES</pre>
<p>Warn if methods required by a protocol are not implemented in the class adopting it.<br />
Only applies to Objective-C and Objective-C++. </p>
<pre>[GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL, -Wno-protocol]</pre>
<h4>Inhibit All Warnings</h4>
<pre>GCC_WARN_INHIBIT_ALL_WARNINGS = NO</pre>
<p>Inhibit all warning messages. </p>
<pre>[GCC_WARN_INHIBIT_ALL_WARNINGS, -w]</pre>
<h4>Initializer Not Fully Bracketed</h4>
<pre>GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES</pre>
<p>Warn if an aggregate or union initializer is not fully bracketed.<br />
 Example, Here initializer for a is not fully bracketed, but that for b is fully bracketed.</p>
<div class="code">
	<code clas="source"><span class="code-keyword">int</span> a[ 2 ][ 2 ] = { 0, 1, 2, 3 }; </code><br />
	<code clas="source"><span class="code-keyword">int</span> b[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };</code>
</div>
<pre>[GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED, -Wmissing-braces]</pre>
<h4>Mismatched Return Type</h4>
<pre>GCC_WARN_ABOUT_RETURN_TYPE = YES</pre>
<p>Causes warnings to be emitted when a function with a defined return type (not void) contains a return statement without a return-value.<br />
Also emits a warning when a function is defined without specifying a return type. </p>
<pre>[GCC_WARN_ABOUT_RETURN_TYPE, -Wreturn-type]</pre>
<h4>Missing Braces and Parentheses</h4>
<pre>GCC_WARN_MISSING_PARENTHESES = YES</pre>
<p>Warn if parentheses are omitted in certain contexts, such as when there is an assignment in a context where a truth value is expected, or when operators are nested whose precedence people often get confused about.<br />
Also warn about constructions where there may be confusion to which if statement an else branch belongs.<br />
Here is an example of such a case:</p>
<div class="code">
	<code class="source">{</code><br />
	<code class="source">    <span class="code-keyword">if</span>( a )</code><br />
	<code class="source">        <span class="code-keyword">if</span>( b )</code><br />
	<code class="source">            foo();</code><br />
	<code class="source">        <span class="code-keyword">else</span></code><br />
	<code class="source">            bar();</code><br />
	<code class="source">}</code>
</div>
<p>In C, every else branch belongs to the innermost possible if statement, which in this example is if (b) .<br />
This is often not what the programmer expected, as illustrated in the above example by indentation the programmer chose.<br />
When there is the potential for this confusion, GCC will issue a warning when this flag is specified.<br />
To eliminate the warning, add explicit braces around the innermost if statement so there is no way the else could belong to the enclosing if.<br />
The resulting code would look like this:</p>
<div class="code">
	<code class="source">{</code><br />
	<code class="source">    <span class="code-keyword">if</span>( a )</code><br />
	<code class="source">    {</code><br />
	<code class="source">        <span class="code-keyword">if</span>( b )</code><br />
	<code class="source">            foo();</code><br />
	<code class="source">        <span class="code-keyword">else</span></code><br />
	<code class="source">            bar();</code><br />
	<code class="source">    }</code><br />
	<code class="source">}</code>
</div>
<pre>[GCC_WARN_MISSING_PARENTHESES, -Wparentheses]</pre>
<h4>Missing Fields in Structure Initializers</h4>
<pre>GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES</pre>
<p>Warn if a structure&#8217;s initializer has some fields missing.<br />
For example, the following code would cause such a warning, because &#8220;x.h&#8221; is implicitly zero:</p>
<div class="code">
	<code class="source"><span class="code-keyword">struct</span> s { int f, g, h; };</code><br />
	<code class="source"><span class="code-keyword">struct</span> s x = { 3, 4 };</code>
</div>
<p>This option does not warn about designated initializers, so the following modification would not trigger a warning:</p>
<div class="code">
	<code class="source"><span class="code-keyword">struct</span> s { int f, g, h; };</code><br />
	<code class="source"><span class="code-keyword">struct</span> s x = { .f = 3, .g = 4 };</code>
</div>
<pre>[GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS, -Wmissing-field-initializers]</pre>
<h4>Missing Function Prototypes</h4>
<pre>GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES</pre>
<p>Causes warnings to be emitted about missing prototypes. </p>
<pre>[GCC_WARN_ABOUT_MISSING_PROTOTYPES, -Wmissing-prototypes]</pre>
<h4>Missing Newline At End Of File</h4>
<pre>GCC_WARN_ABOUT_MISSING_NEWLINE = YES</pre>
<p>Warn when a source file does not end with a newline. </p>
<pre>[GCC_WARN_ABOUT_MISSING_NEWLINE, -Wnewline-eof]</pre>
<h4>Multiple Definition Types for Selector</h4>
<pre>GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO</pre>
<p>Warn if multiple methods of different types for the same selector are found during compilation.<br />
The check is performed on the list of methods in the final stage of compilation.<br />
Additionally, a check is performed for each selector appearing in a <code>"@selector(...)"</code> expression, and a corresponding method for that selector has been found during compilation.<br />
Because these checks scan the method table only at the end of compilation, these warnings are not produced if the final stage of compilation is not reached, for example because an error is found during compilation, or because the -fsyntax-only option is being used.</p>
<pre>[GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR, -Wselector]</pre>
<h4>Nonvirtual Destructor</h4>
<pre>GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES</pre>
<p>Warn when a class declares an nonvirtual destructor that should probably be virtual, because it looks like the class will be used polymorphically. </p>
<pre>[GCC_WARN_NON_VIRTUAL_DESTRUCTOR, -Wnon-virtual-dtor]</pre>
<p>This is only active for C++ or Objective-C++ sources.</p>
<h4>Other Warning Flags</h4>
<pre>WARNING_CFLAGS = -Wall -Wextra -Werror -Wbad-function-cast -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wstrict-prototypes -Wdeclaration-after-statement</pre>
<p>Space-separated list of additional warning flags to pass to the compiler. Use this setting if Xcode does not already provide UI for a particular compiler warning flag.</p>
<pre>[WARNING_CFLAGS]</pre>
<h4>Overloaded Virtual Functions</h4>
<pre>GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES</pre>
<p>Warn when a function declaration hides virtual functions from a base class.</p>
<pre>[GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS, -Woverloaded-virtual]</pre>
<p>For example, in:</p>
<div class="code">
	<code class="source"><span class="code-keyword">struct</span> A</code><br />
	<code class="source">{</code><br />
	<code class="source">    <span class="code-keyword">virtual void</span> f();</code><br />
	<code class="source">};</code><br />
	<code class="source"><span class="code-keyword">struct</span> B: <span class="code-keyword">public</span> A</code><br />
	<code class="source">{</code><br />
	<code class="source">    <span class="code-keyword">void</span> f( int );</code><br />
	<code class="source">};</code>
</div>
<p>the A class version of f() is hidden in B, and code like this:</p>
<div class="code">
	<code class="source">B * b;</code><br />
	<code class="source">b->f();</code>
</div>
<p>will fail to compile. This setting only applies to C++ and Objective-C++ sources.</p>
<h4>Pedantic Warnings</h4>
<pre>GCC_WARN_PEDANTIC = YES</pre>
<p>Issue all the warnings demanded by strict ISO C and ISO C++; reject all programs that use forbidden extensions, and some other programs that do not follow ISO C and ISO C++.<br />
For ISO C, follows the version of the ISO C standard specified by any -std option used. </p>
<pre>[GCC_WARN_PEDANTIC, -pedantic]</pre>
<h4>Pointer Sign Comparison</h4>
<pre>GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES</pre>
<p>Warn when pointers passed via arguments or assigned to a variable differ in sign. </p>
<pre>[GCC_WARN_ABOUT_POINTER_SIGNEDNESS, -Wno-pointer-sign]</pre>
<h4>Prototype Conversion</h4>
<pre>GCC_WARN_PROTOTYPE_CONVERSION = NO</pre>
<p>Warn if a prototype causes a type conversion that is different from what would happen to the same argument in the absence of a prototype.<br />
This includes conversions of fixed point to floating and vice versa, and conversions changing the width or signedness of a fixed point argument except when the same as the default promotion.<br />
Also, warn if a negative integer constant expression is implicitly converted to an unsigned type.<br />
For example, warn about the assignment <code>"x = -1"</code> if &#8220;x&#8221; is unsigned.<br />
But do not warn about explicit casts like &#8220;(unsigned) -1&#8243;.</p>
<pre>[GCC_WARN_PROTOTYPE_CONVERSION, -Wconversion]</pre>
<h4>Sign Comparison</h4>
<pre>GCC_WARN_SIGN_COMPARE = YES</pre>
<p>Warn when a comparison between signed and unsigned values could produce an incorrect result when the signed value is converted to unsigned.<br />
This warning is enabled by -W, and by -Wall in C++ only. </p>
<pre>[GCC_WARN_SIGN_COMPARE, -Wsign-compare]</pre>
<h4>Strict Selector Matching</h4>
<pre>GCC_WARN_STRICT_SELECTOR_MATCH = YES</pre>
<p>Warn if multiple methods with differing argument and/or return types are found for a given selector when attempting to send a message using this selector to a receiver of type &#8220;id&#8221; or &#8220;Class&#8221;.<br />
When this setting is disabled, the compiler will omit such warnings if any differences found are confined to types which share the same size and alignment.</p>
<pre>[GCC_WARN_STRICT_SELECTOR_MATCH, -Wstrict-selector-match]</pre>
<h4>Treat Missing Function Prototypes as Errors</h4>
<pre>GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES</pre>
<p>Causes warnings about missing function prototypes to be treated as errors.<br />
Only applies to C and Objective-C.</p>
<pre>[GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS, -Werror-implicit-function-declaration]</pre>
<h4>Treat Nonconformant Code Errors as Warnings</h4>
<pre>GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = NO</pre>
<p>Enabling this option will downgrade messages about nonconformant code from errors to warnings.<br />
By default, G++ effectively sets -pedantic-errors without -pedantic; this option reverses that.<br />
This behavior and this option are superseded by -pedantic, which works as it does for GNU C.</p>
<pre>[GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS, -fpermissive]</pre>
<h4>Treat Warnings as Errors</h4>
<pre>GCC_TREAT_WARNINGS_AS_ERRORS = YES</pre>
<p>Enabling this option causes all warnings to be treated as errors.</p>
<pre>[GCC_TREAT_WARNINGS_AS_ERRORS, -Werror]</pre>
<h4>Typecheck Calls to printf/scanf</h4>
<pre>GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES</pre>
<p>Check calls to printf and scanf, etc., to make sure that the arguments supplied have types appropriate to the format string specified, and that the conversions specified in the format string make sense.</p>
<pre>[GCC_WARN_TYPECHECK_CALLS_TO_PRINTF, -Wno-format]</pre>
<h4>Undeclared Selector</h4>
<pre>GCC_WARN_UNDECLARED_SELECTOR = YES</pre>
<p>Warn if a <code>"@selector(...)"</code> expression referring to an undeclared selector is found.<br />
A selector is considered undeclared if no method with that name has been declared before the <code>"@selector(...)"</code> expression, either explicitly in an @interface or @protocol declaration, or implicitly in an @implementation section.<br />
This option always performs its checks as soon as a <code>"@selector(...)"</code> expression is found, while -Wselector only performs its checks in the final stage of compilation.<br />
This also enforces the coding style convention that methods and selectors must be declared before being used.</p>
<pre>[GCC_WARN_UNDECLARED_SELECTOR, -Wundeclared-selector]</pre>
<h4>Uninitialized Automatic Variables</h4>
<pre>GCC_WARN_UNINITIALIZED_AUTOS = YES</pre>
<p>Warn if a variable might be clobbered by a setjmp call or if an automatic variable is used without prior initialization.<br />
Detection of uninitialized automatic variable requires data flow analsys that is only enabled during optimized compilation.<br />
Note that GCC cannot detect all cases where an automatic variable is initialized or all usage patterns that may lead to use prior to initialization.</p>
<pre>[GCC_WARN_UNINITIALIZED_AUTOS, -Wuninitialized]</pre>
<h4>Unknown Pragma</h4>
<pre>GCC_WARN_UNKNOWN_PRAGMAS = YES</pre>
<p>Warn when a #pragma directive is encountered which is not understood by GCC.<br />
If this command line option is used, warnings will even be issued for unknown pragmas in system header files.<br />
This is not the case if the warnings were only enabled by the -Wall command line option. </p>
<pre>[GCC_WARN_UNKNOWN_PRAGMAS, -Wunknown-pragmas]</pre>
<h4>Unused Functions</h4>
<pre>GCC_WARN_UNUSED_FUNCTION = YES</pre>
<p>Warn whenever a static function is declared but not defined or a non-inline static function is unused.</p>
<pre>[GCC_WARN_UNUSED_FUNCTION, -Wunused-function]</pre>
<h4>Unused Labels</h4>
<pre>GCC_WARN_UNUSED_LABEL = YES</pre>
<p>Warn whenever a label is declared but not used.</p>
<pre>[GCC_WARN_UNUSED_LABEL, -Wunused-label]</pre>
<h4>Unused Parameters</h4>
<pre>GCC_WARN_UNUSED_PARAMETER = YES</pre>
<p>Warn whenever a function parameter is unused aside from its declaration.</p>
<pre>[GCC_WARN_UNUSED_PARAMETER, -Wunused-parameter]</pre>
<h4>Unused Values</h4>
<pre>GCC_WARN_UNUSED_VALUE = YES</pre>
<p>Warn whenever a statement computes a result that is explicitly not used.</p>
<pre>[GCC_WARN_UNUSED_VALUE, -Wunused-value]</pre>
<h4>Unused Variables</h4>
<pre>GCC_WARN_UNUSED_VARIABLE = YES</pre>
<p>Warn whenever a local variable or non-constant static variable is unused aside from its declaration.</p>
<pre>[GCC_WARN_UNUSED_VARIABLE, -Wunused-variable]</pre>
<h4>Warn About Deprecated Functions</h4>
<pre>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES</pre>
<p>Warn about the use of deprecated functions, variables, and types (as indicated by the &#8216;deprecated&#8217; attribute). </p>
<pre>[GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS, -Wno-deprecated-declarations]</pre>
<h4>Warn About Undefined Use of offsetof Macro</h4>
<pre>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES</pre>
<p>Unchecking this setting will suppress warnings from applying the offsetof macro to a non-POD type.According to the 1998 ISO C++ standard, applying offsetof to a non-POD type is undefined.<br />
In existing C++ implementations, however, offsetof typically gives meaningful results even when applied to certain kinds of non-POD types. (Such as a simple struct that fails to be a POD type only by virtue of having a constructor.)<br />
This flag is for users who are aware that they are writing non-portable code and who have deliberately chosen to ignore the warning about it.<br />
The restrictions on offsetof may be relaxed in a future version of the C++ standard.</p>
<pre>[GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO, -Wno-invalid-offsetof]</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/04/xcode-build-settings/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>FileSystem for iPhone</title>
		<link>http://www.noxeos.com/2011/02/03/filesystem-iphone/</link>
		<comments>http://www.noxeos.com/2011/02/03/filesystem-iphone/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 20:42:41 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=112</guid>
		<description><![CDATA[I&#8217;m about to release an iPhone app I created a (very) long time ago. It allows to browse through the whole iPhone file system, displaying files and directories, with infos and previews. I doubt such an app will be validated by the AppStore team, but who knows. I had to re-create the project with the [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m about to release an iPhone app I created a (very) long time ago.</p>
<p>It allows to browse through the whole iPhone file system, displaying files and directories, with infos and previews.<br />
I doubt such an app will be validated by the AppStore team, but who knows.</p>
<p>I had to re-create the project with the new XCode 4, because it was created for iOS 2.<br />
Now it&#8217;s also ready for a future iPad version.</p>
<p>If it&#8217;s not validated, I think I&#8217;m going to release the source code as OpenSource&#8230;</p>
<p>More on a few days&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/03/filesystem-iphone/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Next freeware: Siege GUI</title>
		<link>http://www.noxeos.com/2011/02/01/freeware-siege-gui/</link>
		<comments>http://www.noxeos.com/2011/02/01/freeware-siege-gui/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 17:30:29 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=107</guid>
		<description><![CDATA[I&#8217;m now working on eosgarden&#8217;s next freeware: a GUI over the siege webserver load testing and benchmarking tool. Informations about siege can be found here: http://www.joedog.org/ Don&#8217;t know yet when this will be released, but stay tuned&#8230; : )]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m now working on eosgarden&#8217;s next freeware: a GUI over the siege webserver load testing and benchmarking tool.</p>
<p>Informations about siege can be found here: <a href="http://www.joedog.org/">http://www.joedog.org/</a></p>
<p>Don&#8217;t know yet when this will be released, but stay tuned&#8230; : )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/01/freeware-siege-gui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Minor updates</title>
		<link>http://www.noxeos.com/2011/02/01/minor-updates/</link>
		<comments>http://www.noxeos.com/2011/02/01/minor-updates/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 16:46:14 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=102</guid>
		<description><![CDATA[Some minor updates to the eosgarden&#8217;s freeware line. PropEdit has been updated to version 1.0.1: Download page ConsoleGrowl has been updated to version 1.2.2: Download page No new feature. Those new releases contains only minor bugfixes.]]></description>
				<content:encoded><![CDATA[<p>Some minor updates to the eosgarden&#8217;s freeware line.</p>
<p>PropEdit has been updated to version 1.0.1:<br />
<a href="http://www.eosgarden.com/en/freeware/propedit/download/">Download page</a></p>
<p>ConsoleGrowl has been updated to version 1.2.2:<br />
<a href="http://www.eosgarden.com/en/freeware/console-growl/download/">Download page</a></p>
<p>No new feature. Those new releases contains only minor bugfixes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/01/minor-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Release: ProcessRenicer</title>
		<link>http://www.noxeos.com/2011/02/01/release-processrenicer/</link>
		<comments>http://www.noxeos.com/2011/02/01/release-processrenicer/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 14:29:07 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=98</guid>
		<description><![CDATA[Version 1.0 of ProcessRenicer has been released! You can download it from the eosgarden&#8217;s website for now, but the app has been submitted to MacUpdate and to the Mac AppStore as well. Enjoy!]]></description>
				<content:encoded><![CDATA[<p>Version 1.0 of ProcessRenicer has been released!</p>
<p>You can <a href="http://www.eosgarden.com/en/freeware/process-renicer/download/">download</a> it from the eosgarden&#8217;s website for now, but the app has been submitted to MacUpdate and to the Mac AppStore as well.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/02/01/release-processrenicer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laws of simplicity</title>
		<link>http://www.noxeos.com/2011/01/31/laws-simplicity/</link>
		<comments>http://www.noxeos.com/2011/01/31/laws-simplicity/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 07:30:29 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=85</guid>
		<description><![CDATA[I recently read this amazing book by John Maeda, about simplicity. I highly recommend it to anyone, developers and designers. John Maeda is at the exact frontier of both worlds, touching excellence&#8230; He present&#8217;s what simplicity really is, or sould be, with ten laws to achieve it. The ten laws are: Reduce The simplest way [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.noxeos.com/wp-content/uploads/2011/01/Simpicity-Cover-196x300.jpg" alt="" title="Simpicity-Cover" width="196" height="300" class="alignright size-medium wp-image-88" />I recently read this amazing book by John Maeda, about simplicity.</p>
<p>I highly recommend it to anyone, developers and designers. John Maeda is at the exact frontier of both worlds, touching excellence&#8230;<br />
He present&#8217;s what simplicity really is, or sould be, with ten laws to achieve it.</p>
<p>The ten laws are:</p>
<ol>
<li>
		<strong>Reduce</strong><br />
		The simplest way to achieve simplicity is through thoughtfull reduction.
	</li>
<li>
		<strong>Organize</strong><br />
		Organization makes a system of many appear fewer.
	</li>
<li>
		<strong>Time</strong><br />
		Savings in time feels like simplicity.
	</li>
<li>
		<strong>Learn</strong><br />
		Knowledge makes everything simpler.
	</li>
<li>
		<strong>Differences</strong><br />
		Simplicity and complexity need each other.
	</li>
<li>
		<strong>Context</strong><br />
		What lies in the peripheral of simplicity is definitively not peripheral.
	</li>
<li>
		<strong>Emotion</strong><br />
		More emotions are better than less.
	</li>
<li>
		<strong>Trust</strong><br />
		In simplicity we trust.
	</li>
<li>
		<strong>Failure</strong><br />
		Some things can never be made simple.
	</li>
<li>
		<strong>The one</strong><br />
		Simplicity is about subtracting the obvious and adding the meaningful.
	</li>
</ol>
<p>Each law is described with a pictogram by John Maeda.<br />
I created some wallpapers with those pictos. They are now displayed each minute on my desktop, remembering me about simplicity, and the need to achieve it, whenever possible.</p>
<p>You can download the wallpaper set <a href="http://www.noxeos.com/wp-content/uploads/2011/01/Simplicity.zip">from here</a>. But just don&#8217;t forget to read this book!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/31/laws-simplicity/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NSLog in ANSI-C</title>
		<link>http://www.noxeos.com/2011/01/31/nslog-ansi-c/</link>
		<comments>http://www.noxeos.com/2011/01/31/nslog-ansi-c/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 03:34:18 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=68</guid>
		<description><![CDATA[In Objective-C, NSLog is great to debug software. Similar functions can be used in C, with Mac OS X, by using the ASL &#8211; Apple System Log &#8211; library. ASL consists of routines providing an interface to the Apple System Log facility, which is intended to be a replacement for the SysLog API. It allows [...]]]></description>
				<content:encoded><![CDATA[<p>In Objective-C, NSLog is great to debug software.<br />
Similar functions can be used in C, with Mac OS X, by using the ASL &#8211; Apple System Log &#8211; library.</p>
<p>ASL consists of routines providing an interface to the Apple System Log facility, which is intended to be a replacement for the SysLog API.<br />
It allows client applications to create flexible, structured messages and send them to the syslogd server, where they may undergo additional processing. Messages received by the server are saved in a data store (subject to input filtering constraints).</p>
<p>A man page for ASL can be found here: <a href='http://www.noxeos.com/wp-content/uploads/2011/01/ASL.txt'>ASL</a></p>
<p>Here&#8217;s a example C implementation:</p>
<div class="code">
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;asl.h&gt;</span></code><br />
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;stdarg.h&gt;</span></code><br />
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;stdlib.h&gt;</span></code><br />
<code class="source"><span class="code-keyword">#include</span> <span class="code-string">&lt;stdio.h&gt;</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * Public functions prototypes</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - Public functions prototypes -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLog(          <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogEmergency( <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogAlert(     <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogCritical(  <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogError(     <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogWarning(   <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogNotice(    <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogInfo(      <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"><span class="code-keyword">void</span> CLogDebug(     <span class="code-keyword">char</span> * fmt, ... );</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * C entry point</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - C entry point -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">int</span> main( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    CLog( <span class="code-string">"hello, world"</span> );</code><br />
<code class="source">    <span class="code-keyword">return</span> EXIT_SUCCESS;</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * Private functions prototypes</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - Private functions prototypes -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> __clog_create_client( <span class="code-keyword">void</span> );</code><br />
<code class="source"><span class="code-keyword">void</span> __clog_log( <span class="code-keyword">int</span> level, <span class="code-keyword">char</span> * fmt, <span class="code-predefined">va_list</span> ap );</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * Private macros</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - Private macros -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#define</span> __CLOG_VARGS_LOG( LEVEL )   \</code><br />
<code class="source">    <span class="code-predefined">va_list</span> ap;                     \</code><br />
<code class="source">    <span class="code-predefined">va_start</span>( ap, fmt );            \</code><br />
<code class="source">    __clog_log( LEVEL, fmt, ap );   \</code><br />
<code class="source">    <span class="code-predefined">va_end</span>( ap );</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#ifndef</span> __bool_true_false_are_defined</code><br />
<code class="source">    <span class="code-keyword">#ifdef</span> <span class="code-keyword">_Bool</span></code><br />
<code class="source">        <span class="code-keyword">#define</span> bool                        <span class="code-keyword">_Bool</span></code><br />
<code class="source">    <span class="code-keyword">#else</span></code><br />
<code class="source">        <span class="code-keyword">#define</span> bool                        <span class="code-keyword">char</span></code><br />
<code class="source">    <span class="code-keyword">#endif</span></code><br />
<code class="source">    <span class="code-keyword">#define</span> true                            1</code><br />
<code class="source">    <span class="code-keyword">#define</span> false                           0</code><br />
<code class="source">    <span class="code-keyword">#define</span> __bool_true_false_are_defined   1</code><br />
<code class="source"><span class="code-keyword">#endif</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * Private variables</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - Private variables -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">static</span> <span class="code-predefined">aslclient</span> __clog_client;</code><br />
<code class="source"><span class="code-keyword">static</span> bool      __clog_client_connected = false;</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * Private functions</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - Private functions -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> __clog_create_client( <span class="code-keyword">void</span> )</code><br />
<code class="source">{</code><br />
<code class="source">    __clog_client = <span class="code-predefined">asl_open</span>( <span class="code-string">"CLog"</span>, <span class="code-string">"com.apple.console"</span>, <span class="code-predefined">ASL_OPT_STDERR</span> | <span class="code-predefined">ASL_OPT_NO_DELAY</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> __clog_log( <span class="code-keyword">int</span> level, <span class="code-keyword">char</span> * fmt, <span class="code-predefined">va_list</span> ap )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-predefined">aslmsg</span> msg;</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">if</span>( __clog_client_connected == false )</code><br />
<code class="source">    {</code><br />
<code class="source">        __clog_create_client();</code><br />
<code class="source">    }</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">if</span>( __clog_client == <span class="code-keyword">NULL</span> )</code><br />
<code class="source">    {</code><br />
<code class="source">        <span class="code-predefined">fprintf</span>( <span class="code-predefined">stderr</span>, <span class="code-string">"Impossible to create the ASL client\n"</span> );</code><br />
<code class="source">        <span class="code-predefined">exit</span>( <span class="code-predefined">EXIT_FAILURE</span> );</code><br />
<code class="source">    }</code><br />
<code class="source">    </code><br />
<code class="source">    </code><br />
<code class="source">    msg = <span class="code-predefined">asl_new</span>( <span class="code-predefined">ASL_TYPE_MSG</span> );</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-predefined">asl_set</span>( msg, <span class="code-predefined">ASL_KEY_FACILITY</span>, <span class="code-string">"com.apple.console"</span> );</code><br />
<code class="source">    <span class="code-predefined">asl_vlog</span>( __clog_client, msg, level, fmt, ap );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-comment">/*******************************************************************************</span></code><br />
<code class="source"><span class="code-comment"> * Public functions</span></code><br />
<code class="source"><span class="code-comment"> ******************************************************************************/</span></code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">#pragma</span> mark - Public functions -</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLog( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_WARNING</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogEmergency( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_EMERG</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogAlert( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_ALERT</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogCritical( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_CRIT</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogError( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_ERR</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogWarning( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_WARNING</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogNotice( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_NOTICE</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogInfo( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_INFO</span> );</code><br />
<code class="source">}</code><br />
<code class="source"></code><br />
<code class="source"><span class="code-keyword">void</span> CLogDebug( <span class="code-keyword">char</span> * fmt, ... )</code><br />
<code class="source">{</code><br />
<code class="source">    __CLOG_VARGS_LOG( <span class="code-predefined">ASL_LEVEL_DEBUG</code> );</code><br />
<code class="source">}</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/31/nslog-ansi-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xeos: memory allocator &amp; LLVM</title>
		<link>http://www.noxeos.com/2011/01/30/xeos-memory-allocator-llvm/</link>
		<comments>http://www.noxeos.com/2011/01/30/xeos-memory-allocator-llvm/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 20:08:15 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=61</guid>
		<description><![CDATA[Today I&#8217;ve written the first lines of code for the Xeos memory allocator. For now, I won&#8217;t implement the malloc() set of functions in the C library, because I haven&#8217;t implemented the brk and mmap system calls. Doing this would surely be fun, but right now I need to code some other kernel stuff. So [...]]]></description>
				<content:encoded><![CDATA[<p>Today I&#8217;ve written the first lines of code for the Xeos memory allocator.</p>
<p>For now, I won&#8217;t implement the <code>malloc()</code> set of functions in the C library, because I haven&#8217;t implemented the <code>brk</code> and <code>mmap</code> system calls.<br />
Doing this would surely be fun, but right now I need to code some other kernel stuff.</p>
<p>So I decided to write a specific allocator for the Xeos kernel. This way, it will have it&#8217;s own allocator, managing it&#8217;s own memory region.<br />
I guess it&#8217;s the best solution for now, to get things correctly done.</p>
<p>No surprise, this will be <code>kmalloc()</code>.<br />
This will save me a lot of time, and make the code more maintainable for later.</p>
<p>I&#8217;m also going to see if I can build LLVM for Xeos&#8230; I&#8217;m a bit tired of GCC, since Apple&#8217;s XCode 4&#8230; ; )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/30/xeos-memory-allocator-llvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPS switch</title>
		<link>http://www.noxeos.com/2011/01/30/vps-switch/</link>
		<comments>http://www.noxeos.com/2011/01/30/vps-switch/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 18:50:03 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.noxeos.com/?p=56</guid>
		<description><![CDATA[A few days ago, I received a mail from the swiss hosting company I usually work with. They told me the eosgarden&#8217;s website used too much resources on the shared server. O_o The traffic has indeed increased. About 300% more, based on Google analytics stats. A few apps on MacUpdate, a few tweets about the [...]]]></description>
				<content:encoded><![CDATA[<p>A few days ago, I received a mail from the swiss hosting company I usually work with.<br />
They told me the eosgarden&#8217;s website used too much resources on the shared server. O_o</p>
<p>The traffic has indeed increased. About 300% more, based on Google analytics stats.<br />
A few apps on MacUpdate, a few tweets about the apps, and badaboum&#8230; The server crashed.</p>
<p>So they told me (rudely) I had to switch to a VPS.<br />
50 bucks more. Mmmm, swiss providers&#8230;</p>
<p>So I moved to a provider in France. Now I got a VPS, with Debian 5, for the same price as the shared server!<br />
The provider is LWS. I have to say the service is great!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/30/vps-switch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Job opportunity at Apple</title>
		<link>http://www.noxeos.com/2011/01/30/job-opportunity-apple/</link>
		<comments>http://www.noxeos.com/2011/01/30/job-opportunity-apple/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 15:43:00 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://noxeos.localhost/?p=15</guid>
		<description><![CDATA[Just woke up with a great news today! I&#8217;ve been contacted by a recruiter from Apple, asking me to send my resume. Maybe California is not so far away after all! It would be a great experience, both at the technical and human level. Hope to be able to give more news on the next [...]]]></description>
				<content:encoded><![CDATA[<p>Just woke up with a great news today!</p>
<p>I&#8217;ve been contacted by a recruiter from Apple, asking me to send my resume.<br />
Maybe California is not so far away after all!</p>
<p>It would be a great experience, both at the technical and human level.<br />
Hope to be able to give more news on the next weeks&#8230;</p>
<p>By the way, the temperature is 19°c in Cupertino. Here, in Switzerland, it&#8217;s -2°c!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/30/job-opportunity-apple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking for a job</title>
		<link>http://www.noxeos.com/2011/01/30/job/</link>
		<comments>http://www.noxeos.com/2011/01/30/job/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 10:12:12 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://noxeos.localhost/?p=17</guid>
		<description><![CDATA[I&#8217;ve now officially quitted my job as a mobile &#038; web CTO. So I&#8217;m now looking for a new job, in Mac &#038; iOS development, C / C++ development. If you&#8217;re interested, here&#8217;s a link to my full resume. Simply send me an email to get in touch!]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve now officially quitted my job as a mobile &#038; web CTO.<br />
So I&#8217;m now looking for a new job, in Mac &#038; iOS development, C / C++ development.</p>
<p>If you&#8217;re interested, here&#8217;s a <a href="http://www.eosgarden.com/en/contact/">link to my full resume</a>.<br />
Simply send me an email to get in touch!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/30/job/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Process Renicer</title>
		<link>http://www.noxeos.com/2011/01/29/process-renicer/</link>
		<comments>http://www.noxeos.com/2011/01/29/process-renicer/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 21:42:37 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Mac OS & iOS]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://noxeos.localhost/?p=9</guid>
		<description><![CDATA[Here&#8217;s a little preview of eosgarden&#8217;s next freeware: ProcessRenicer. Basically, it shows up the active processes, and adds the possibility to change to process nice value. For those who don&#8217;t know what the nice value is, here&#8217;s the description from Wikipedia: The name &#8220;nice&#8221; comes from the fact that the program&#8217;s purpose is to modify [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a little preview of eosgarden&#8217;s next freeware: ProcessRenicer.</p>
<p>Basically, it shows up the active processes, and adds the possibility to change to process nice value.<br />
For those who don&#8217;t know what the nice value is, here&#8217;s the description from Wikipedia:</p>
<blockquote><p>The name &#8220;nice&#8221; comes from the fact that the program&#8217;s purpose is to modify a process niceness value. The true priority, used to decide how much cpu time to concede to each process, is calculated by the kernel process scheduler from a combination of the different processes niceness values and other data, such as the amount of I/O done by each process.</p>
<p>The name &#8220;niceness&#8221; originates from the idea that a process with a higher niceness value is &#8220;nicer&#8221; to other processes in the system, as it allows the other processes more cpu time, by having a lower priority (and therefore a higher niceness) itself.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/29/process-renicer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C &#8211; Reverse string search</title>
		<link>http://www.noxeos.com/2011/01/29/reverse-string-search/</link>
		<comments>http://www.noxeos.com/2011/01/29/reverse-string-search/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 15:42:28 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://noxeos.localhost/?p=11</guid>
		<description><![CDATA[I just noticed that there is no strrstr() function in the standard C library. I needed that for a project, using ANSI-C. So I wrote it. Here&#8217;s the code, maybe it can be helpfull for someone else&#8230; : ) char * strrstr( char * s1, char * s2 ); char * strrstr( char * s1, [...]]]></description>
				<content:encoded><![CDATA[<p>I just noticed that there is no <code>strrstr()</code> function in the standard C library.</p>
<p>I needed that for a project, using ANSI-C. So I wrote it.</p>
<p>Here&#8217;s the code, maybe it can be helpfull for someone else&#8230; : )</p>
<div class="code">
<code class="source"><span class="code-keyword">char</span> * strrstr( <span class="code-keyword">char</span> * s1, <span class="code-keyword">char</span> * s2 );</code><br />
<code class="source"><span class="code-keyword">char</span> * strrstr( <span class="code-keyword">char</span> * s1, <span class="code-keyword">char</span> * s2 )</code><br />
<code class="source">{</code><br />
<code class="source">    <span class="code-keyword">char</span> * ss1;</code><br />
<code class="source">    <span class="code-keyword">char</span> * sss1;</code><br />
<code class="source">    <span class="code-keyword">char</span> * sss2;</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">if</span>( *( s2 ) == <span class="code-string">'\0'</span> )</code><br />
<code class="source">    {</code><br />
<code class="source">        <span class="code-keyword">return s1;</code><br />
<code class="source">    }</code><br />
<code class="source">    </code><br />
<code class="source">    ss1 = s1 + <span class="code-ctag">strlen</span>( s1 );</code><br />
<code class="source">    </code><br />
<code class="source">    <span class="code-keyword">while</span>( ss1 != s1 )</code><br />
<code class="source">    {</code><br />
<code class="source">        --ss1;</code><br />
<code class="source">        </code><br />
<code class="source">        <span class="code-keyword">for</span>( sss1 = ss1, sss2 = s2; ; )</code><br />
<code class="source">        {</code><br />
<code class="source">            <span class="code-keyword">if</span>( *( sss1++ ) != *( sss2++ ) )</code><br />
<code class="source">            {</code><br />
<code class="source">                <span class="code-keyword">break</span>;</code><br />
<code class="source">            }</code><br />
<code class="source">            <span class="code-keyword">else if</span> ( * sss2 == <span class="code-string">'\0'</span> )</code><br />
<code class="source">            {</code><br />
<code class="source">                <span class="code-keyword">return</span> ss1;</code><br />
<code class="source">            }</code><br />
<code class="source">        }</code><br />
<code class="source">    }</code><br />
<code class="source">    </code><br />
<code class="source">    return <span class="code-keyword">NULL</span>;</code><br />
<code class="source">}</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/29/reverse-string-search/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hello world: introducing eosgarden&#8217;s blog</title>
		<link>http://www.noxeos.com/2011/01/29/hello-world/</link>
		<comments>http://www.noxeos.com/2011/01/29/hello-world/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 09:04:42 +0000</pubDate>
		<dc:creator>Jean-David Gadina</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://noxeos.com/?p=1</guid>
		<description><![CDATA[Welcome to noxeos, the new eosgarden&#8217;s blog! I&#8217;ll write down here stuff related to the eosgarden&#8217;s activities, software development and releases, miscellaneous code related stuff, Mac &#38; iOS development tips, etc. For the curious, the name noxeos comes from the latin word for night (nox) and the greek word for dawn (eos). I choosed it [...]]]></description>
				<content:encoded><![CDATA[<p>Welcome to <strong>noxeos</strong>, the new eosgarden&#8217;s blog!</p>
<p>I&#8217;ll write down here stuff related to the eosgarden&#8217;s activities, software development and releases, miscellaneous code related stuff, Mac &amp; iOS development tips, etc.</p>
<p>For the curious, the name noxeos comes from the latin word for night (nox) and the greek word for dawn (eos).<br />
I choosed it so it can represent the reverse face of the eosgarden website.</p>
<p>Anyway, thanx for reading this! : )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noxeos.com/2011/01/29/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
