<?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>The Axamblis Blog</title>
	<atom:link href="http://blog.axamblis.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.axamblis.com</link>
	<description>Developing Software is an Art.</description>
	<lastBuildDate>Thu, 19 Nov 2009 14:22:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>F-Script: The Ultimate Debugging Console</title>
		<link>http://blog.axamblis.com/?p=87</link>
		<comments>http://blog.axamblis.com/?p=87#comments</comments>
		<pubDate>Wed, 11 Nov 2009 02:27:37 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Artifica]]></category>
		<category><![CDATA[F-Script]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=87</guid>
		<description><![CDATA[Have you ever heard of F-Script? If you are a Cocoa developer I honestly hope you do. For those of you who haven&#8217;t, F-Script is supposed to be &#8220;A set of open source tools that complement Xcode and Interface Builder&#8221; that provide &#8220;Interactive introspection, manipulation and scripting of Cocoa objects&#8221;. So its a bunch of [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever heard of F-Script? If you are a Cocoa developer I honestly hope you do. For those of you who haven&#8217;t, F-Script is supposed to be <em>&#8220;A set of open source tools that complement Xcode and Interface Builder&#8221;</em> that provide <em>&#8220;Interactive introspection, manipulation and scripting of Cocoa objects&#8221;</em>. So its a bunch of tools that allow you to interact with Objective-C and Cocoa during runtime through its own scripting mechanism, whose syntax differs significantly from the Objective-C language. So the line of source code…</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc">MyClass <span style="color: #002200;">*</span> var <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>MyClass alloc<span style="color: #002200;">&#93;</span> initWithName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;John&quot;</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>is written like the following in F-Script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc">var <span style="color: #002200;">:=</span> MyClass alloc initWithName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">'John'</span></pre></td></tr></table></div>

<p>If you download F-Script from <a href="http://www.fscript.org" target="_blank">www.fscript.org</a> you end up with a bundle full of source code, executables and useful information. The most important are <em>F-Script.app</em>, <em>FScript.framework</em> and <em>Extras/F-Script Anywhere</em>.</p>
<h3>Exploring Cocoa</h3>
<p>The first file I mentioned — <em>F-Script.app</em> — is the toolchain in its simplest form: A script interpreter console. So what you can do is write your script lines to the console which will then be executed by the F-Script interpreter. For example: Writing the script line</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc"><span style="color: #400080;">NSApplication</span> sharedApplication terminate<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span></pre></td></tr></table></div>

<p><em> </em>will make the application quit. But more interestingly, it gives you access to everything that is currently loaded into the Objective-C runtime. So you may create a window and populate it with UI through the F-Script console. Everything you can do from code in Xcode, you can do in F-Script through the console.</p>
<p style="text-align: center;"><a href="http://pmougin.files.wordpress.com/2009/10/fsfinder12.png?w=513&amp;h=459"><img class="aligncenter" title="F-Script used to inspect the Finder" src="http://pmougin.files.wordpress.com/2009/10/fsfinder12.png?w=513&amp;h=459" alt="" width="513" height="459" /></a></p>
<h3>Debug Your Application</h3>
<p>The second file — <em>FScript.framework</em> — is the most important one for developers. As you might guess, it is a framework that bundles all the F-Script functionality. If you&#8217;re writing a Cocoa application, add FScript.framework to your project and link against it. Somewhere in your loading code, insert the line</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc"><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>NSApp mainMenu<span style="color: #002200;">&#93;</span> addItem<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>FScriptMenuItem alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>to add the F-Script menu to your main menu bar. What this gives you is a complete and immensly powerful scripting environment that is available to you at runtime. When you launch your app, go to the <em>&#8220;F-Script&#8221;</em> menu and choose <em>&#8220;Show Console&#8221;</em>. A new script interpreter will pop up ready to execute input from you through which you have access to all your objects: If your app has a controller object assigned as the app&#8217;s delegate, enter</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc">controller <span style="color: #002200;">:=</span> <span style="color: #400080;">NSApplication</span> sharedApplication delegate</pre></td></tr></table></div>

<p>to assign the object to the <em>controller</em> script variable. So if your controller features the method <em>-makeNoise</em>, you can go ahead and hack</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc">controller makeNoise</pre></td></tr></table></div>

<p>into the script console and BOOM, your method gets called. What can you use this for? Obviously there&#8217;s no point in calling methods from the console that can also be executed through the press of a UI button. But if you&#8217;re developing a huge application that has some very complex functionality at its core, you&#8217;re very likely to end up with the situation that your core functionality is written and needs debugging, but lacking a user interface your app is not ready to take advantage of its core. Nevertheless you would like to debug the core you&#8217;ve written without having to go through the hassle of UI design yet. This is where F-Script comes in really handy. Launch the app, open the F-Script console and start debuggin your core! It&#8217;s all there right at your fingertips, ready to be thoroughly tested and evaluated, checked for bugs and all the other nasty app-killers.</p>
<p>That&#8217;s exactly what I did with Artifica today. Obviously writing a user interface for an application with the complexity of an image editor is no easy task and introduces a completely new source of bugs to your application. Therefore, I wrote the layer architecture from A to Z with the only testing UI available being a NSView that draws the final result of the layer rendering. As usually, after finishing the layering mechanism and launching the app for a try, everything stayed gray and empty. Bug. So I thought about the best way of debuggin the app. Writing some debugging code that created layers somewhere in the launch code of the app? Nah… that&#8217;s kind of lame and not very efficient. That was when I remembered F-Script. So I went to the website, grabbed my copy of it and added the framework and menu item to my app. And suddenly I was able to conduct the most thorough testing of my layers without having to create some testing UI for doing so. But not only does F-Script serve as a replacement for UI, it is also very useful for debugging. If you set one of your layer&#8217;s properties for example and nothing changes on the final result, you can use F-Script to inspect the layer object and look for where your updating mechanism broke down.</p>
<p>F-Script adds an invaluable means of debugging to your application. Things that were very uncomfortable to do beforehand, now are easy and fast. And if you have some frequently used object, for example your controller object, all you have to do is simply call</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="objc">FSInterpreter <span style="color: #002200;">*</span> interpreter <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>fscriptMenuItem interpreterView<span style="color: #002200;">&#93;</span> interpreter<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>interpreter setObject<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>NSApp delegate<span style="color: #002200;">&#93;</span> forIdentifier<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;controller&quot;</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>with <em>fscriptMenuItem</em> being the FScriptMenuItem you added to the main menu before. This line will assign your app&#8217;s delegate to the <em>&#8220;controller&#8221;</em> script variable which you may then use during debugging to directly access your controller object.</p>
<h3>Code Injection</h3>
<p>The third important part of the tools is the <em>F-Script Anywhere</em> application. What this application does is that it allows you to inject F-Script into running Cocoa applications. When you do that, the running application gets a <em>&#8220;F-Script&#8221;</em> menu item which gives you a means to inspect and experiment with that app through the console and object browser. This technique is very useful if you want to know how some of the private APIs work or just want to know how another application is structured.</p>
<h3>F-Script saves the Day</h3>
<p>Being very robust and extremely powerful, F-Script is <em>the ultimate tool </em>for debuggin, inspecting or hacking other applications. As a developer, the most valuable thing you can do with F-Script is to include the framework into your application and use the console and object browser for debugging. It saves you hours of debugging hassle since you don&#8217;t have to return to your source code and recompile everytime you want to check whether some operation returned a valid value. But most of all, you don&#8217;t have to write any specific debuggin code to your app except the creation of the menu item and maybe the declaration of the most important objects in the F-Script namespace for easy access.</p>
<p>If it weren&#8217;t for F-Script, I would have spent 5 hours today writing debugging code and creating some testing UI for Artifica which would have been another source for bugs which increases complexity of the debugging process again. <em>F-Script gives you the possibility to completely split up the development of your object model and your view model</em>, which not only saves you a lot of time and is more productive, but is also less frustrating since you never have to go figure whether your app&#8217;s functionality is broken due to a bug in the UI, the object model or even worse, somewhere in between.</p>
<p style="text-align: center;">— — —</p>
<p>Thanks for reading and enjoy coding with F-Script! It really is worth the 20 minutes of getting used to the scripting syntax!<br />
Cheers</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=87</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Accessibility for Noobs* and Pros**</title>
		<link>http://blog.axamblis.com/?p=83</link>
		<comments>http://blog.axamblis.com/?p=83#comments</comments>
		<pubDate>Tue, 10 Nov 2009 14:01:31 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Artifica]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=83</guid>
		<description><![CDATA[* short for &#8220;Newbies&#8221; — ** short for &#8220;Professionals&#8221; 
Depending on what kind of application you write you end up having to deal with the more or less complex task of making the software attractive to a wide range of users. If you develop a Twitter client, there&#8217;s literally only one group of users: those who [...]]]></description>
			<content:encoded><![CDATA[<p><em>* short for &#8220;Newbies&#8221; — ** short for &#8220;Professionals&#8221; </em></p>
<p>Depending on what kind of application you write you end up having to deal with the more or less complex task of making the software attractive to a wide range of users. If you develop a Twitter client, there&#8217;s literally only one group of users: those who want to Twitter. Every user wants to be able to write a Tweet, read those of others and maybe view the Tweets where he was mentioned. There&#8217;s no feature that would overburdern the average user&#8217;s computer skills.</p>
<h3>The Problem</h3>
<p>Unfortunately, the genre of image editing software is probably the one featuring the widest range of users: There is the average user that knows what an aperture is and how a camera takes a picture, which wants to retouch his pictures exposure and color tones. Then there&#8217;s the user whose only concern is the size and weight of the camera when he&#8217;s buying one. He wants to have one button in his image editor which adjusts exposure and color tones automatically. And last but not least, there&#8217;s the professional ultra-skilled über-user which has a thorough understanding of everything from the architecture of the camera&#8217;s CCD sensor up to the background layer architecture and image data processing of his image editor. How do you make the app attractive to all these types of users?</p>
<p>Solving this problem is like <strong>designing an aircraft which a child can fly from Zürich to New York and a fighter pilot can do the wildest air acrobatics with</strong>, yet both immediately feel comfortable and in control when sitting in its cockpit. So how do you prevent the child from turning off the autopilot accidently but not have the pilot to go through 20 layers of security before granting him full control over the bird?</p>
<p>This is exactly the problem I&#8217;m working on at the moment. The layer architecture of Artifica (yes, the app has been named) as intend to engineer it is of a complexity never seen before. Drawing one layer incorporates the evaluation of 5 filters and about 10 intermediate drawing steps, user filters <em>not</em> included. The newbie might probably not even want to get in touch with layers in general. On the other hand, the professional user might not only want to use layers, but also access and adjust certain steps of the layer rendering process. Take filters for example. There are three points in the layer rendering process where a user might want to add a filter to the color channel: At the beginning on the color information of the layer, in the middle after the sublayers have been rendered onto the color information, and at the end when the layer is through the masking process. Adding a blur filter yields to different results at each of these points.</p>
<h3>The possible Solution</h3>
<p>Fortunately, almost all users have one thing in common: They like tidy and functional user interfaces. A professional user will probably not complain about having to click a button to bring up the powerful controls he might want to use on an image. He&#8217;s thankful if that control doesn&#8217;t pop up everytime he opens an image: He might only want to look at the image, crop it, or just hit the &#8220;auto-adjust exposer and lighting (noobs only)&#8221; button!</p>
<p>So there goes the partial solution: Making only a very small part of the functionality available through the interface that is presented to the user whenever an image is opened. So there might be a window for color controls which actually adds an image filter in the background and provides an opaque way of modifying it. No layer lists, no complicated tools, nothing. But the more advanced user mustn&#8217;t have to click more than one button, one menu item to bring up the layer list and advanced tools. Maybe the app should try to guess the user&#8217;s intentions. And by that, I <em>don&#8217;t mean the Microsoft way of guessing what the user wants</em> (because they&#8217;re in 99% of the cases completely wrong about it). If the user opens an image, the layering and everything is deactivated. As soon as the user chooses anything from &#8220;Add Layer…&#8221; in the menu down to the &#8220;Select Layer&#8221; tool, the layering should automatically be enabled.</p>
<p>Of course, as always when doing this kind of automated censorship, you should give your more advanced users the opportunity to get rid of it. So if a user knows, in two out of three images I open with Artifica I intend to do some layer work, he should be able to set a &#8220;Always Enable Layering&#8221; option globally for the app.</p>
<h3>The clue here is…</h3>
<p>…to make your app attractive to all user groups. A newbie should not be discouraged by unnecessary buttons or complicated lists when he opens an image. The advanced user should be pleased by the apps simplicity but must have access to the full functionality just one (or with some good guesswork of the app, zero) clicks away. The app should hide everything complicated from the first glance of a newbie at the app, but should <em>not</em> exclude him from the higher functionality. As soon as he starts to tamper around with the &#8220;Layers&#8221; menu, he also has to face the consequences of the layering mechanism being enabled and adding some complexity to the usage of the app.</p>
<p>These are my thoughts on complexity and accessibility of applications. Unfortunately, not all other application developers go through this kind of process, planning their UI. In Photoshop or Word, you&#8217;re pretty much confronted with a ton of functionality that you either don&#8217;t need or don&#8217;t understand as a beginner. There should be no fixed complexity, but a very dynamic system of reveiling functionality to your users depending on his needs. Start simple, with the option of exploring the app yourself and eventually ticking the &#8220;immediately start on complexity level 2&#8243; preference if the user feels like he always needs to be presented with a certain basic functionality and usage complexity.</p>
<p style="text-align: center;">— — —</p>
<p>Thanks for reading, as always, comments are very welcome <img src='http://blog.axamblis.com/wp-includes/images/smilies/smile.png' alt=':)' class='wp-smiley' /> </p>
<p><em>Take care.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=83</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s reinvent Image Editing and Design</title>
		<link>http://blog.axamblis.com/?p=77</link>
		<comments>http://blog.axamblis.com/?p=77#comments</comments>
		<pubDate>Sat, 07 Nov 2009 04:08:32 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Artifica]]></category>
		<category><![CDATA[Axamblis]]></category>
		<category><![CDATA[Photoshop]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=77</guid>
		<description><![CDATA[Sit back for a minute and try to name an image editor that is user-friendly, simple yet powerful and productive. I&#8217;m having a hard time figuring out just one piece of software that matches this description. &#8220;What about Photshop?&#8221; you might ask. To be honest, Photoshop is a lightyear off of what I would call [...]]]></description>
			<content:encoded><![CDATA[<p>Sit back for a minute and try to name an image editor that is user-friendly, simple yet powerful and productive. I&#8217;m having a hard time figuring out just one piece of software that matches this description. &#8220;What about Photshop?&#8221; you might ask. To be honest, Photoshop is a lightyear off of what I would call user-friendly and simple to use, and speaking of power and productivity: when I design something in Photoshop, e.g. website graphics and the like, I usually spend 10 to 20% of the time managing the different image files, keeping them in an editable state, pushing the files through the compressor and messing around with hundreds of backup layers and files.</p>
<h3>Backup Layers? Why on earth…</h3>
<p>…would someone need backup layers and files in Photoshop? The answer is simple: <em>Errare humanum est </em>— I make mistakes. Sometimes I need to intersect two selections very precisely, so I create two fill layers with each of them stored in the mask, and do my selection logic with them. So there goes the third layer which has the intersection of the two layers stored in it. Why not throwing the other layers away, why keeping backup layers? Well, usually I realize half an hour later that the mask I created is misplaced, has a bad shape, looks dull, etc.. And because <em>Photoshop is one of the most destructive and unforgiving applications</em> out there, there&#8217;s no way of efficiently going back half an hour to change something and then returning to the present with the changes applied immediately.</p>
<h3>Destructibility and Unforgivingness — Vice or Virtue?</h3>
<p>Why are there applications so user-friendly they let you undo every click you made, forgiving you about any mistake you could have possibly made, and other pieces of software that feel more like a big block of cheese you try to talk into helping you retouch your holiday snaphsots?</p>
<p>The answer to this question lies in the past. In the early days of computers, when Photoshop and Microsoft Office appeared for the first time, a computer running on 1 MB of system memory was considered the ultimate supercomputer. Unlike today, memory footprint and efficiency were the ultimate and exclusive concern of most software engineers back then. <em>User-friendliness is a luxury that has popped up on the computer only a few years ago</em>. Operating system suppliers like Apple and Microsoft have started to include more and more functionality into their systems which make the usage of applications across the platform more uniform to the user. Writing an application like TextEdit on today&#8217;s Mac OS is a matter of a few hours and perfectly illustrates the luxury and power built into today&#8217;s operating systems: Compared to TextEdit, the first Microsoft Word looks more like a toy and had <em>by far</em> less features, even if it did cost quite a bunch of money (which TextEdit doesn&#8217;t).</p>
<p>So, if you write a new program from scratch on Snow Leopard, you get all the nice features and gems of the operating system for free (spell checking, file handling, text input, undo management, networking, drag&#8217;n'drop, etc. … you could fill dozens of lines with features). If you want to load an image from disk, instead of writing all the image decompression and loading algorithms yourself, you just say &#8220;system, read that image!&#8221;. The system won&#8217;t even complain you didn&#8217;t say the magic word! There are parts in Photoshop and Office that probably date back way into the last century. Migrating a program which has millions over millions of lines of source code to new technologies is a pain and not realistic. So what do companies like Adobe and Microsoft do? They adopt some of the new features of the operating systems by writing them themselves. <em>Have you never wondered why Photoshop and Office just don&#8217;t feel at home on Mac OS X and Windows XP, but more like a stranger having difficulties adopting to the local rules and culture?</em></p>
<p>I&#8217;m sure that Adobe and Microsoft are doing their very best to keep up with the growing demands and standards on modern computer platforms. Vice or virtue? Maybe it&#8217;s both. Sometimes you just have to choose the least painful way of doing something.</p>
<h3>Are you trying to say it&#8217;s time to reinvent Photoshop?</h3>
<p>Yes and no. There&#8217;s <em>absolutely no</em> point in trying to clone Photoshop because…</p>
<ol>
<li>it&#8217;s probably illegal due to patents and copyrights held by Adobe</li>
<li>trying to run against Photoshop with your own PS-clone is just ridiculous.</li>
</ol>
<p>So it is <em>definitely not</em> the time to duplicate Photoshop and add some user-friendliness-shickymicky to it to get it sell on the market. Photoshop is <em>the</em> best image editor out there in terms of functionality and power. So where&#8217;s the yes?</p>
<p>I think it&#8217;s time for a <em>new approach</em> on how we edit and design images. Some things have proven very powerful in the past, take layers for example: People got used to the idea behind layers and many other types of applications have adopted the scheme. This is something you have to keep and evolve in order to make for a good image editor. On the other hand, there&#8217;s the thing about destructive filters: In 2009 it shouldn&#8217;t be necessary to worry about the contents of a layer being messed up because a filter changes them irreversibly.</p>
<h3>Indestructibility and Forgivingness — The Goal for a new Editor</h3>
<p>These two words should be the ultimate goal for a new image editor.</p>
<p>Everything the user does should be undoable in an easy way. If the user feels safe in the editor, if he knows he can click anywhere in the app and try everything without having to worry about not being able to return to the original state, that&#8217;s when we suceeded creating an image editor for the new century. If the user can apply any filter to any of his layers without having to keep a backup of them, then we have succeeded.</p>
<p>&#8220;You&#8217;re really trying to reinvent the leading image editor with a robust undo system and an automatic backup-keeping so that filters can be undone from layers?&#8221; — Not at all. This was just a simple description of how things should work. The true power behind the filters is that they should be dynamically calculated. With today&#8217;s high performance graphics cards and CPUs, image filters can be calculated on-the-fly. The user can create a stack of 50 filters on his layer and see the result immediately. Don&#8217;t like the sepia tone of filter 29? Just change it, and filters 29 to 50 get recalculated – superfast.</p>
<p>This sounds nice but doesn&#8217;t reinvent the wheel of design and image editing. There&#8217;s more to it than just a few filters. We should radically change the way people input data like images, colors, pixels and the like into the application. Everything should be vector-based from the very beginning to the end. And with on-the-fly filters, you wouldn&#8217;t even have to rasterize your vector shape to blur it. All an application needs from the user is a clear indication of what he wants to do. So if he wants apply a blur to a vector, there&#8217;s no doubt the vector should be rasterized in the background and have the filter applied to it. It should <em>not be about what the application can</em> do, but <em>what the user wants it to do</em>.</p>
<p>If the user wants to create a reflection effect, he shouldn&#8217;t have to think about <em>how to update the mirrored and faded reflection when the original changes</em>. He should be able to create an <em>instance layer</em> which duplicates another, and apply a mirroring and fading filter to it. And since the filters are computed on-the-fly, he can change the original layer with the reflection updating in real time. <em>This</em> is how things should work.</p>
<h3>And that&#8217;s just the beginning…</h3>
<p>Those were only a few ideas and concepts one should try to follow and implement when creating the next big image editor. There are many, many more important things: how fast can you get your updated image exported again, how easy can you handle the user interface, how versatile are the tools the editor gives you at hand, etc..</p>
<p>Maybe creating such an application is a bit unrealistic, but maybe the time has come when finally someone should try to do it and establish new standards in image editing.</p>
<p><strong>If you happen to have any ideas for such a new image editor, write a comment!</strong></p>
<p>Thanks for reading the article.<br />
Until my next revolutionary plan to world domination: Take care!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=77</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Fresh Design</title>
		<link>http://blog.axamblis.com/?p=70</link>
		<comments>http://blog.axamblis.com/?p=70#comments</comments>
		<pubDate>Sun, 20 Sep 2009 12:49:00 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Axamblis Stuff]]></category>
		<category><![CDATA[Axamblis]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Photoshop]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=70</guid>
		<description><![CDATA[The Axamblis Blog has been around for about 1 1/2 years now. Unfortunately I ended up not having as much time to write posts as I had hoped the day I installed the WordPress webapp. That was mostly due to the fact that I was in my last year of school and therefore hadn&#8217;t much [...]]]></description>
			<content:encoded><![CDATA[<p>The Axamblis Blog has been around for about 1 1/2 years now. Unfortunately I ended up not having as much time to write posts as I had hoped the day I installed the <a href="http://wordpress.org" target="_blank">WordPress</a> webapp. That was mostly due to the fact that I was in my last year of school and therefore hadn&#8217;t much time for blogging. But now that I&#8217;ve passed my exams and graduated, I&#8217;m taking a year off to dedicate myself more to software development and to get Axamblis ready again. This change in life also brings me some time to write regular blog entries which I will try to do as good as possible.</p>
<h3>Refurbished Look</h3>
<p>But do I want to write blog entries in this WordPress theme of mine, this rather dark and shabby looking enclosure? Hell no. So I sat down and started to design an all-new theme for WordPress which integrates itself into the rest of the Axamblis website. This makes the blog feel like it really belongs there, and not as it were some completely isolated place hidden behind a subdomain on my server. So the new design looks a bit like a newspaper and is way more lightweight than the old one. The comments look nicer, the blog is a bit better arranged and the overall reading experience is more relaxing due to the lighter color palette.</p>
<p>One thing I realized once again when I was drawing the graphics for the blog in Photoshop: <em>Someone</em> really should write a replacement for Photoshop which…</p>
<ol>
<li>is easier and more efficient to use</li>
<li>looks better and is faster</li>
<li>and doesn&#8217;t drain your bank account that much.</li>
</ol>
<p>Maybe I&#8217;ll take a look at that if I&#8217;ve got enough time this year.</p>
<h3>Anyway…</h3>
<p>…enjoy your stay at the Axamblis blog. I&#8217;d be happy to receive comments or emails on stuff you didn&#8217;t like, you especially like, or you would like if it was there.</p>
<p><em>P.S.: I&#8217;m serious about that Photoshop thing, someone really has to write a replacement… Cheers <img src='http://blog.axamblis.com/wp-includes/images/smilies/smile.png' alt=':)' class='wp-smiley' />  !</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=70</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Episode 1: SplitView-aligned Toolbar</title>
		<link>http://blog.axamblis.com/?p=37</link>
		<comments>http://blog.axamblis.com/?p=37#comments</comments>
		<pubDate>Fri, 18 Sep 2009 17:48:57 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Axamblis Developer Podcast]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Interface Builder]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=37</guid>
		<description><![CDATA[This is the very first episode of the Axamblis Developer Podcast. We&#8217;re looking at how to create a custom NSToolbar which aligns a subset of its items along the right side of a split view divider in the same window. This behaviour which makes the items feel like they stick to the divider can also [...]]]></description>
			<content:encoded><![CDATA[<p>This is the very first episode of the Axamblis Developer Podcast. We&#8217;re looking at how to create a custom NSToolbar which aligns a subset of its items along the right side of a split view divider in the same window. This behaviour which makes the items feel like they stick to the divider can also be found in other apps like Apple Mail or <a href="http://macrabbit.com/espresso/" target="_blank">Espresso</a> (my favourite web editor, by the way).</p>
<p><a href="http://blog.axamblis.com/wp-content/uploads/ADPE1_screenshot11.png"><img class="alignnone size-full wp-image-50" title="SplitView-aligned Toolbar" src="http://blog.axamblis.com/wp-content/uploads/ADPE1_screenshot11.png" alt="SplitView-aligned Toolbar" width="564" height="206" /></a></p>
<p>In order to get the desired bevaviour we make use of some undocumented API in the NSToolbar class, and we use method swizzling to inject some custom code into the NSToolbarFlexibleSpaceItem class.</p>
<p>The category used for swizzling methods:</p>
<ul>
<li><a href="http://blog.axamblis.com/wp-content/uploads/NSObject-MethodSwizzling.zip">NSObject-MethodSwizzling</a></li>
</ul>
<p>The project file (Xcode 3.1 and higher) as well as the .h and .m files:</p>
<ul>
<li><a href="http://blog.axamblis.com/wp-content/uploads/SplitViewAlignedToolbar-Project.zip">SplitViewAlignedToolbar Project</a></li>
<li><a href="http://blog.axamblis.com/wp-content/uploads/SplitViewAlignedToolbar-Header+Implementation.zip">SplitViewAlignedToolbar Header+Implementation</a></li>
</ul>
<p>Enjoy the show and drop me a line if you have any comments or questions or other feedback!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=37</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.axamblis.com/media/adp/ADP%20Episode%201.mov" length="94757702" type="video/quicktime" />
		</item>
		<item>
		<title>Digging into Computers — The other Approach</title>
		<link>http://blog.axamblis.com/?p=11</link>
		<comments>http://blog.axamblis.com/?p=11#comments</comments>
		<pubDate>Fri, 05 Jun 2009 23:33:39 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[EyeDisplay]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=11</guid>
		<description><![CDATA[It has been a long time since my last post here on The Axamblis Blog. This is mostly due to the fact that I am in my last high school year preparing myself for the big end-of-term exams this summer. As high school ends this summer, I will suspend my &#8220;educational career&#8221; for one year [...]]]></description>
			<content:encoded><![CDATA[<p>It has been a long time since my last post here on The Axamblis Blog. This is mostly due to the fact that I am in my last high school year preparing myself for the big end-of-term exams this summer. As high school ends this summer, I will suspend my &#8220;educational career&#8221; for one year in order to get away from the academic everyday life. Instead I will commit myself in writing software for Axamblis, writing blog posts, doing some podcasts, and everything else that comes to my mind.</p>
<h3>The Frontal Approach</h3>
<p>How do you approach a computer as a developer? Well the first thing you see when you buy one is the screen with all the windows popping up around it. You start to wonder how that all is organized and how it works, so you get in touch with some basic and general programming languages like BASIC to write your first programs. As soon as you realize you didn&#8217;t want the user to enter data through a command line or console, you start to bother with higher languages like C and Objective-C as well as the system&#8217;s APIs in order to get windows and UI on the screen. Your skills keep improving and your knowledge and understanding of the OS&#8217;s functionality and architecture increases. Soon you get in touch with very low level and basic system calls, you learn about the kernel architectures, the scheduler and threading, memory management and everything else that forms the &#8220;personality&#8221; of a 21st century operating system.</p>
<p>Well, that was the way I experienced the whole software engineering thing evolve in my case. But as soon as I got down to the kernel and system level (which I am not very expertise at) I realized that I was pretty much stuck there. Getting deeper and deeper insights into the system is not that difficult but is simply a matter of time and interest. But what if I wanted to learn how a computer is built, how it is made doing what it does, what the magic is behind the bits? That is where microelectronics comes into play…</p>
<h3>The Hellenic Electrician</h3>
<p>I have always been fascinated by electricity. Everything that could glow and emit light was the ultimate attention-catcher for me, not speaking of the automatic self-opening sliding doors at the malls&#8230; <img src='http://blog.axamblis.com/wp-includes/images/smilies/smile.png' alt=':-)' class='wp-smiley' />  . So when I was 12 I wired every single door in my parent&#8217;s apartment. I attached a sensor to the closing and locking mechanism laid wires back to my room. In there I built a huge black board showing the blueprint of our apartment with tiny lamps — LEDs, light emitting diodes — at every door&#8217;s location on the plan. This way I could see which doors were open.</p>
<p>So there it was, my first electronics project. But it was simple, a battery, a few resistors and the LEDs. One day I decided to update the sensor network, so I searched the web for a way of reducing the dozens of cables with just a few. On some homebrew electronics websites I came across something that was called an IC, short for integrated circuit. As I found out a few hours of research later, ICs are what you generally refer to as &#8220;chips&#8221;; these small black things that look like bugs with all their shiny legs attached to them. Inside these chips, there was a complex wiring of transistors, resistors, capacitors and other electronic components which fulfilled a certain purpose and function. So there was actually a small electronics circuit inside these things, hence the name IC.</p>
<p>So what is the big deal about these ICs, I mean they have been around for quite some years now? Well the big deal for me was that I started to realize and understand how these things worked together. Before that, I only knew that there are these strange black things inside electronic devices, but never had an idea what they did. Curious as I was, I started to experiment with different ICs and circuits&#8230;</p>
<p>Long story short, I never finished my new sensors network, as a matter of fact the cables are still there — out of use. Nevertheless I got better at these things. I started to deal with microcontrollers which are some sort of CPU, or actually a whole computer compressed into one chip. The thing about microcontrollers is that they are programmable. So you write your code in Xcode, compile it and download it into the controller&#8217;s flash memory, where it gets executed. I attached displays, keys, LEDs, and all sort of weird stuff and made up fancy devices that did exactly the stuff I told them to.</p>
<p>I became very skilled at this new area of electricity which I found out to be called microelectronics. I am sure old Plato or Hippocrate did not know their beloved mother tongue would even make it into the name of the 21st century&#8217;s most advanced technology areas. What I ended up with was me building a &#8220;pocket&#8221; calculator from scratch for my high school&#8217;s senior project, pocket between inverted commas since the device itself was too big to be called handy <img src='http://blog.axamblis.com/wp-includes/images/smilies/smile.png' alt=':-)' class='wp-smiley' />  . I taught the calculator all the basic stuff: adding, subtracting, multiplying, dividing, as well as raising powers, calculating roots, exponents, logarithms and more. But moreover, I built a small API that I could use in my programs that ran on the calculator in order to create UIs and handle user inputs.</p>
<h3>The Other Approach</h3>
<p>A few months ago a friend of mine and I decided to take this whole microelectronics thing a step further. Inspired by the iPhone, we decided to build our own device from scratch. What we are actually heading for is a device that has a processor, a color display with touch panel, a USB connector, a microSDHC card for data storage, as well as a Lithium-Polymer battery as well as a headphones output. As you can see from the feature lineup, we are trying to create a mobile device that strictly speaking consists of only a display for the user to interact with, having a battery for best flexibility and an SD card for up to 16 GB of storage.</p>
<p>Why this kind of device? Well, it is actually a playground for software developers and hardware engineers. And that exactly is the point: we want to build a mobile device from scratch up, get the hardware to work, and then write the appropriate software for it. For developers the most interesting part is of course the software. So what we will have to do is write a small firmware which gets stored in the processor&#8217;s flash memory. Being executed first, this piece of firmware loads a specific executable file from the SD card and runs it. This way we can store whatever executable we want on the SD and it gets run at device startup. Of course this will not be just some executable but actually an operating system which loads code into the RAM, provides standard built-in functions and system calls, a scheduler for multithreading, etc..</p>
<p>That is what I call the &#8220;Other Approach&#8221;: Not starting to write software for the computer and get to know the computer from top to bottom, user to electronics, but exactly vice versa. I want to get in touch with the computer from bottom to top, grass-grown so to say, from electronics to user. And the easiest way to do that is to build hardware by yourself, then writing all the layers of code necessary to synthesize an operating system based on which you can write your own &#8220;desktop&#8221; applications to run on. I know the computer from the users point of view down to the system, now I get to know it from the bottom electronics to the system.</p>
<p>And since we are creating a new device, it needs a name. And there fore, thou shalt be named…</p>
<h3>EyeDisplay</h3>
<p>Pathetic? Yes maybe, but we thought it was kind of cool since the device itself is inspired by the iPhone. And as it has no other purpose than having a display to draw on we call it EyeDisplay. We even made up a logo which I personally find kind of cool:</p>
<p><img class="size-full wp-image-16 alignnone" title="EyeDisplay logo artwork." src="http://blog.axamblis.com/wp-content/uploads/eyedisplay-logo-250.png" alt="EyeDisplay logo artwork." width="250" height="47" /></p>
<p>I mean what could be more exciting than firing up your own device and seeing your own logo shining across the sparkling display.</p>
<p>Since this project has been running for about three months now, I decided to post updates about it on the blog featuring the concepts, hardware, PCB layouts and source code it is made of in order to keep you up-to-date on it. Another thing is that there is quite few information out there concerning this kind of microelectronics. There are of course all the hobbyists that build their devices based on very simple chips. But as soon as it gets more complicated and especially faster, there are not many more people out there really documenting their work. So expect to hear about this project again.</p>
<p>So thank you very much for reading this very long article. Hopefully there is someone out there who finds the information to come useful, so feel free to drop a line of comment. See you next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=11</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Blog Kick-Off</title>
		<link>http://blog.axamblis.com/?p=9</link>
		<comments>http://blog.axamblis.com/?p=9#comments</comments>
		<pubDate>Sat, 10 May 2008 21:16:21 +0000</pubDate>
		<dc:creator>Fabian Schuiki</dc:creator>
				<category><![CDATA[Axamblis Stuff]]></category>
		<category><![CDATA[Axamblis]]></category>
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://blog.axamblis.com/?p=9</guid>
		<description><![CDATA[I&#8217;ve seen so many developer blogs around these days, I started to feel like &#8220;Why don&#8217;t I have one too?&#8221;. After having read Andy Matuschak&#8217;s blog regularly and sneaking into various other Mac OS X Developer blogs from time to time, I eventually decided to put up one myself.
A few words on myself
Well, when I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen so many developer blogs around these days, I started to feel like &#8220;Why don&#8217;t I have one too?&#8221;. After having read Andy Matuschak&#8217;s blog regularly and sneaking into various other Mac OS X Developer blogs from time to time, I eventually decided to put up one myself.</p>
<h3>A few words on myself</h3>
<p><span style="font-weight: normal; ">Well, when I was 9 years old I began to program. Starting with BASIC and switching to REALbasic later on I made my first steps and learned some of the principles of software engineering. When Mac OS X 10.0 finally came out and old Project Builder started to become stable and reliable, I decided to move on — leave REALbasic and give the new Objective-C as well as the new Cocoa API a try. I have to admit it was hard work learning Objective-C, not having had any C or C++ background, just BASIC in my mind.</span></p>
<p><span style="font-weight: normal; ">Since my first steps in BASIC, 9 years have passed which makes me 18 years old, having 9 years of experience in software development, as well as probably 7 years of Cocoa experience.</span></p>
<h3>So why launching a Weblog anyway?</h3>
<p>A few years ago, when Apple started this whole Podcast-thing in iTunes, I came across this great Podcast by Blake Burris, <a title="CocoaRadio" href="http://www.cocoaradio.com/" target="_blank">&#8220;CocoaRadio&#8221;</a>, which I felt was just great to listen to — hearing all those other developers talk about their problems and experiences, as well as their software.</p>
<p>Two years later, Steve Scott started his gorgeous &#8220;Late Night Cocoa&#8221; podcast which is now part of the <a href="http://www.macdevnet.com/" target="_blank">Mac Developer Network</a>. The show was great, having software engineers speaking about basic as well as more advanced topics concerning Mac development, directly addressing development issues.</p>
<p>In what I remember was the fourth episode, Scotty interviewed Scott Stevenson — who I haven&#8217;t known back then — about new Leopard features. At the end of the show I picked up his blog address (<a href="http://www.theocacao.com/" target="_blank">Theocacao.com</a>) and started to read it. Later on, Andy Matuschak joined the show talking about his updating framework Sparkle, also leaving his blog address (<a href="http://andymatuschak.org/" target="_blank">andymatuschak.org</a>) at the end.</p>
<p>That somehow pushed me into reading weblogs, which I now do on a fairly regular basis. I was overwhelmed by the quality and beauty of some of the programming blogs I&#8217;ve read. The Mac OS X developer community is just great, and growing rapidly as well, therefore I thought about trying to &#8220;give something back to the community&#8221;, publishing my developing experiences.</p>
<h3>What &#8220;The Axamblis Blog&#8221; is all about</h3>
<p>In order to publish my software projects, I started <a href="http://www.axamblis.com/" target="_blank">&#8220;Axamblis&#8221;</a> which now acts as some kind of pseudonym. Some of the topics that I will deal with are</p>
<ul>
<li>thoughts on Axamblis and the projects I have</li>
<li>articles on Cocoa</li>
<li>Xcode and Interface Builder</li>
<li>the Developer Tools</li>
<li>general Mac OS X development topics</li>
<li>as well as sometimes personal stuff regarding the blog or the chaos I call my life <img src='http://blog.axamblis.com/wp-includes/images/smilies/smile.png' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>I won&#8217;t write articles on a regular basis, but I&#8217;ll try to keep the blog alive, full of intersting stuff such as tutorials or articles and hopefully also full of comments and responses written by readers. If you have any thoughts, ideas, pros and cons, e-mail me at <a href="mailto:fabianschuiki@axamblis.com">fabianschuiki@axamblis.com</a> (I know I <em>must</em> be nuts publishing this one here, ready to be found by &#8220;scan bots &amp; friends&#8221;).</p>
<p>Thank you for reading the blog, so I close my very first article with the words…</p>
<h3>Welcome to The Axamblis Blog!</h3>
]]></content:encoded>
			<wfw:commentRss>http://blog.axamblis.com/?feed=rss2&amp;p=9</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
