<?xml version="1.0" encoding="UTF-8"?>


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://earthlingsoft.net/ssp/blog/">
<title>Quarter Life Crisis/earthlingsoft</title>
<link>http://earthlingsoft.net/ssp/blog/archives/earthlingsoft</link>
<image>
<title>Quarter Life Crisis</title>
<url>http://earthlingsoft.net/ssp/blog/includes/qlc.gif</url>
<link>http://earthlingsoft.net/ssp/blog/</link>
</image>
<description>earthlingsoft-related posts from Quarter Life Crisis</description>
<dc:language>en</dc:language>
<dc:creator>Sven-S. Porst (ssp-web@earthlingsoft.net)</dc:creator>
<dc:date>2010-01-05T12:16:54+01:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=5.01" />

<items>
<rdf:Seq>
<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2010/01/rechnungs_checker_114" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2009/10/bookmark_advertiser" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2009/10/unicodechecker_114" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2009/04/earth_addresser_23" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2009/03/earth_addresser_22" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_21" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_2" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2008/11/geburtstagschecker_172" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2008/09/symmetries_scripting" />

<rdf:li rdf:resource="http://earthlingsoft.net/ssp/blog/2008/08/symmetries" />
</rdf:Seq>
</items>

</channel>


<item rdf:about="http://earthlingsoft.net/ssp/blog/2010/01/rechnungs_checker_114">
<title>Rechnungs Checker 1.14</title>
<link>http://earthlingsoft.net/ssp/blog/2010/01/rechnungs_checker_114</link>
<description><![CDATA[<p> 
<img src="http://earthlingsoft.net/ssp/blog/graphics/Rechnungs%20Checker%20Icon2.png" style="width:128px;height:128px;" alt="Rechnungs Checker icon.">
After about two and a half years, another update for 
<a href="http://earthlingsoft.net/Rechnungs%20Checker/" title="Rechnungs Checker">Rechnungs Checker</a> has arrived. Most of the changes in the new version are tiny, so I never bothered to release a new version as the old one kept working just fine, but they do add up: a few UI tweaks here, a new file parser there, a 64bit binary, a new version numbering scheme there (I had to get rid of that idiotic zero in the middle) and an improved icon. Nothing earth shattering, but here it is.
</p><p>
I started Rechnungs Checker about seven years ago to learn Cocoa and simplify the mundane task of splitting up the phone bill because Deutsche Telekom&#8217;s website was (and still is) a monstrous mess which makes this task pretty much impossible if you like your sanity. Over time the application grew to support the online billing files created by other phone companies and Mac OS X matured a lot in the time: A lot of the code I had to write back then would be unnecessary for applications written today.
</p><p>
Many new APIs became available as well and Rechnungs Checker tried to keep up with those it could benefit from or be a better OS X &#8216;citizen&#8217;: Integration with the system-wide address book, Spotlight support or, in the latest version, support for &#8216;Sudden Termination&#8217; and 512px icons. Over time the application has also grown from a PowerPC only application in 2003, to a Universal Binary running natively on PowerPC as well as 32bit and 64bit Intel machines today.
</p><p>
As Rechnungs Checker is a fairly simple application using standard Cocoa techniques only, those seemingly big transitions were not very complicated. In fact, I don&#8217;t think that any of them was particularly difficult from a technical point-of-view. However, those weren&#8217;t completely pain-free either as Apple&#8217;s developer documentation tends to be far less specific and complete than one would like it to be and XCode&#8217;s behaviour remains somewhat incomprehensible. If they put some more effort into those details, which are probably &#8216;completely obvious&#8217; for the people who made up Cocoa and XCode, one&#8217;s sanity would benefit. None of these problems are terribly hard. But they may require a lot of fiddling to make the tools to just the right thing. 
</p><p class="aside">
Just to add some examples to illustrate this: Think about version numbers and Info.plists. I, and, judging from other people&#8217;s projects I downloaded, many other people&#8217;s projects have severe difficulties in getting XCode to copy a new Info.plist into the compiled application, leading to things like version number confusion all over; Sometimes only a time consuming Clean action will sort that out properly. Then there&#8217;s XCode&#8217;s habit of linking the wrong libraries (just think about the pain that is Sparkle which requires you to have loads of different versions of it around for different projects, each, possibly, with different set-ups for languages, architectures and garbage-collection) which I still find unpredictable. An interesting bit of documentation-difficulty I ran into for this release was the following: My document class&#8217; <code>-readFromURL:ofType:error:</code> received different type strings in the 64bit and 32bit versions, the UTI in the former and the name of the file type in the latter. Thanks to a helpful hint I learned that this is actually documented - but I would have to read the Mac OS X.5 Cocoa release notes to learn it. Definitely not the first place I&#8217;m looking at when making my application ready for X.6. Stronger cross referencing in Cocoa&#8217;s documentation or a non-useless search in the XCode documentation browser would help here.
</p>

<hr>

<p>
Bonus material: Let me express how much I loathe VersionTracker/cnet or whatever they are called these days. They provided a fine service a decade ago but seemed to focus <em>only</em> on selling their company over and over again since. The result is a messy site with poor results. And a site which <a href="http://upload.cnet.com/4370-21_5-499-136.html?tag=editProduct;addEditProduct">does not let me update my software listing unless I agree to them hosting my files</a>. Which I have no intention to agree to. As a consequence I&#8217;ll have to hope that they steal the updated listing from <a href="http://osx.iusethis.com/app/rechnungschecker">iusethis</a> or <a href="http://www.macupdate.com/info.php/id/16334/rechnungs-checker">macupdate</a> (let&#8217;s see whether macupdate manage updating the icon&#8230;) and I&#8217;ll be fairly sure that they&#8217;ll manage to only copy incomplete data or fuck things up otherwise when doing so. Because that&#8217;s the level of competence at which they operate. The same level of competence that turns &#8216;ä&#8217;s in my application description into &#8216;Ã&#8217;Â¤&#8217; - which looks a bit but not quite like a <a href="http://earthlingsoft.net/ssp/blog/2008/07/mysql_vs_utf8">double UTF-8 fuck-up</a>.
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2010-01-05T12:16:54+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2009/10/bookmark_advertiser">
<title>Bookmark Advertiser</title>
<link>http://earthlingsoft.net/ssp/blog/2009/10/bookmark_advertiser</link>
<description><![CDATA[<p>
One of my motivations for getting involved in <a href="http://earthlingsoft.net/ssp/blog/2009/10/flame">Flame</a> was the fact that Apple decided to make transferring a web page which you are viewing in Safari on your Mac to Safari on the iPod very difficult. I find I want to do just that from time to time when I discovered some interesting web page and want to show it to somebody else in the kitchen or so. All ways to achieve this goal require me to do clumsy things like e-mailing the page&#8217;s address to myself or using the iPod&#8217;s clumsy keyboard.
</p><p>
My idea would be that Safari lets you &#8216;share&#8217; the pages you are currently viewing and those bookmarks then appear in the iPod&#8217;s Safari via Bonjour. But things don&#8217;t work this way. As Safari on the Mac lacks such a sharing feature, the URLs of the currently open pages have to be advertised by an additional application. As Safari on the iPod lacks Bonjour support, you can&#8217;t possibly see any advertised services in the application itself anyway (and implementing the bookmark sharing in such a way would require a bit of cleverness and background work because the standard advertising of web servers via Bonjour only works for services with addresses on your own machine).
</p><p>
So the hackish workaround is the following: You launch the <a href="http://code.google.com/p/service-advertiser/downloads/list">Bookmark Advertiser</a> application, it grabs the addresses of the web pages you are currently viewing in Safari and advertises them via Bonjour as a service of type &#8216;urlbookmark&#8217;. Flame then just happens to recognise that service type and display it as an openable service which will display the web page in Safari on the iPod.
</p><p class="centred">
<a href="http://earthlingsoft.net/ssp/blog/graphics/Bookmark%20Advertiser%20Window.png" title="Click to enlarge."><img src="http://earthlingsoft.net/ssp/blog/graphics/Bookmark%20Advertiser%20Window.png" style="width:95%;max-width:554px;max-height:250px;" alt="Bookmark Advertiser Window"></a>
</p><p>
This is very lightweight, only supports Safari, doesn&#8217;t automatically refresh and fails for URLs which are too long. Yet it does the trick for the applications I had in mind.
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2009-10-31T20:12:19+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2009/10/unicodechecker_114">
<title>UnicodeChecker 1.14</title>
<link>http://earthlingsoft.net/ssp/blog/2009/10/unicodechecker_114</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/UnicodeCheckerLarge2.png" style="width:128px;height:128px;" alt="UnicodeChecker Icon">
<a href="http://earthlingsoft.net/UnicodeChecker/">
It has been quite a while since the <a href="http://earthlingsoft.net/ssp/blog/2007/08/unicodechecker_113">previous UnicodeChecker update</a>, a bit over two years in fact. Thus, people may have been left with the impression that the application is dead by now. That, however, would be quite far from the truth. The <span title="freshly vacuumed, mind you">truth</a>, according to earthlingsoft, is that UnicodeChecker did its job - or rather all of its many jobs - just fine all the time, thank you. We were tempted to release a new version when Unicode 5 was published, but bumping our version number just for including a bunch of new files from a third party seemed like cheating. In fact, bullying all our users into an update when the few of them who can really tell the difference between Unicode versions can easily download those data files and put them into UnicodeChecker&#8217;s Application Support subfolder would seem a little rude.
</p><p>
Today things change. <a href="http://www.unicode.org/versions/Unicode5.2.0/">Unicode 5.2</a> was published at the beginning of the month and the structure of its data files for Unihan data saw a major change. Hence UnicodeChecker had to be updated to work with that and the new version 1.14 is published today. 
</p><p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20Unihan%20Progress.png" style="width:50%;max-width:256px;max-height:86px;" alt="Unihan Loading Progress Indicator">
The <strong>updated Unihan data file format</strong> is a royal pain as it is is now delivered in a bunch of files instead of a single one which makes gathering the information much harder. To keep the a reasonably short launch time for the people who use Unihan, UnicodeChecker now reads those files in the background after launching. Which means that the application will be available right away but not provide Unihan information in the first few seconds after launching. And if you look carefully, you can watch a little progress bar as the loading progresses. The bad news is that this totally destroys the very clever and efficient scheme UnicodeChecker used previously which let it use Unihan without storing all of the data in memory. As a consequence memory consumption increases by an obscene amount (about 100MB) because of that.
</p><p>
While the Unihan file still isn&#8217;t part of UnicodeChecker due to its size, the <strong>Unicode 5.2</strong> data files are included. There are plenty of additions in this revision. They even introduced additional Snowman codepoints! Black Snowman (U+26C7) and Snowman without Snow (U+26C4) OMG ☃☃☃11!!!!!1☃☃☃11! Now I&#8217;ll just need a font with glyphs for these new codepoints.
</p><p class="centred">
<a href="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20Unicode%2052%20Snowmen.png" title="Click to enlarge."><img src="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20Unicode%2052%20Snowmen.png" style="width:95%;max-width:443px;max-height:236px;" alt="New Snowman codepoints"></a>
</p><p>
There are also new features: The first is the new <strong>Length Utility</strong>. It tells you the number of codepoints and bytes of a string in various Unicode encodings. Due to the various forms Unicode can take those numbers are interesting at times:
</p><p class="centred">
<a href="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20Length.png" title="Click to enlarge."><img src="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20Length.png" style="width:95%;max-width:365px;max-height:330px;" alt="UnicodeChecker Length Utility"></a>
</p><p>
The other new feature is the addition of a <strong>QuickLook</strong> plug-in to UnicodeChecker. <em>If</em> you have the UnicodeChecker Spotlight support set up (command in the File menu), the QuickLook previews will let you peek at the glyphs you found without needing to go into UnicodeChecker for each of them:
</p><p class="centred">
<a href="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20QuickLook.png" title="Click to enlarge."><img src="http://earthlingsoft.net/ssp/blog/graphics/UnicodeChecker%20114%20QuickLook.png" style="width:95%;max-width:781px;max-height:679px;" alt="QuickLook display of Spotlight Search for Unicode Characters"></a>
</p><p>
And there are plenty of additional details: You can now conveniently use <strong>drag and drop in the Split Up Utility</strong> to rearrange the characters in a string (handy when dealing with composed characters and wanting to shift an accent around, say); Users of the Escape Utility may be delighted that it now lets them escape the &#8216;standard&#8217; characters (e.g. a-z) as well; the submenus in the Character Blocks menu have been rearranged to accommodate all the added entries without scrolling on small screens; and if you have the slightest idea what Adobe&#8217;s Glyph List for New Fonts is, you may be delighted to work with the latest version of that.
</p><p>
There are also a few things this version doesn&#8217;t do. To begin with it&#8217;s not a 64bit application. Say thank you to our users who wanted Growl support for that. As UnicodeChecker is made to run on Mac OS X.4 (well, theoretically, it should even run on X.3, but we can neither test nor care too much) and the 64bit version of Growl doesn&#8217;t support that, we couldn&#8217;t have both.
</p><p class="aside"> 
I am sure that one could <em>in principle</em> find some terribly smart way of setting different versions up in the same application, but the reason one uses readymade frameworks is that one can be lazy and not smart; besides, if you have ever used XCode you&#8217;ll know that any attempt to do anything even slightly clever will immediately backfire and turn into hours and hours wasted to make the setup &#8216;just right&#8217;.
</p><p>
As this update is needed to read the current Unihan data, the choice we made was to stick to 32bit for the time being, so X.4 users aren&#8217;t left out. As most people probably still run 32bit applications on their X.6 systems anyway at this time, the difference should be hardly noticeable anyway. As they are independent from the main executable, the Spotlight and Quick Look plug-ins <em>are</em> 64bit, by the way.
</p><p>
UnicodeChecker can&#8217;t make coffee yet, either. A real shame.
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2009-10-12T00:58:28+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2009/04/earth_addresser_23">
<title>Earth Addresser 2.3</title>
<link>http://earthlingsoft.net/ssp/blog/2009/04/earth_addresser_23</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/Earth%20Addresser%20Icon2.png" style="width:128px;height:128px;" alt="New Earth Addresser Icon">
A few more ideas and fixes for <a href="http://earthlingsoft.net/Earth%20Addresser/">Earth Addresser</a> have been released in  version 2.3 that went online today. 
</p><p>
The most notable new feature, inspired by a user request, was to give users the option to not have all their addresses in a single placemarks folder in Google Earth, but to let Earth Addresser create a folder for each address label. For people on business travel this will make it easy to view only the home addresses of their friends or the businesses they have to visit for work, for example. 
</p><p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/GoogleEarthEarthAddresserFolders.png" style="width:137px;height:99px;" alt="Folders for Earth Addresser Placemarks in Google Earth">
Nice side effects of this new feature were two-fold. On a technical level it forced me to change the internal code a little, so it can take into account address labels and create groups for them. Which in turn finally made me re-structure (well, the &#8216;re&#8217; may be inadequate there) my atrocious KML file generation code into smaller pieces that are easier to handle. On a user level, this also let me implement a feature which I wanted for quite a while now: Earth Addresser can now deactivate certain addresses (those labelled &#8216;Old&#8217; in English, German or French) in the KML file it creates by default. As I tend to keep people&#8217;s old addresses in my Address Book, this ensures that the old addresses don&#8217;t clutter things up when displayed in Google Earth.
</p><p>
Small improvements in GUI word capitalisation, keyboard navigation, accessibility setup and error handling made it into the version as well. 
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2009-04-01T20:12:58+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2009/03/earth_addresser_22">
<title>Earth Addresser 2.2</title>
<link>http://earthlingsoft.net/ssp/blog/2009/03/earth_addresser_22</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/Earth%20Addresser%20Icon2.png" style="width:128px;height:128px;" alt="New Earth Addresser Icon">
We released a small update to <a href="http://earthlingsoft.net/Earth%20Addresser/">Earth Addresser</a> today. After releasing the <a href="http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_21">previous version</a>, I started being quite unhappy with the icon. It wasn&#8217;t supposed to be good, but I started finding that the overdone glow in there was just horrible. In addition to that Google released Google Earth 5 in the meantime - the icon of which is by far better than the one of the previous version. Hence I was keen to update our icon for that reason alone, thus looking for an excuse to re-release.
</p><p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/EarthAddresser22Icons.png" style="width:110px;height:97px;" alt="Home and Work icons on the map">
Said excuse came by one of our heavy Earth Addresser users suggesting we could display distinct icons for home and work addresses on the map. While I couldn&#8217;t figure out a way to make that look reasonable for contacts that are displayed with their address book photo instead of Google Earth&#8217;s standard drawing pin, it makes a good addition for all the other addresses, giving a bit of extra information right there on the map.
</p><p>
In addition to that, I figured out that Earth Addresser&#8217;s handling of situations without a network connection was rather poor. So instead of pretending to do the job and not getting anything done, Earth Addresser now stops trying immediately if there is an error and displays a message for that. I must say that the infrastructure <code>NSError</code> provides for that - complete with localised error messages - comes in handy here.
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2009-03-03T23:49:00+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_21">
<title>Earth Addresser 2.1</title>
<link>http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_21</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/Earth%20Addresser%20Icon.png" style="width:128px;height:128px;" alt="Earth Addresser Icon">
It&#8217;s always a bad sign when you offer an update for one of your applications within a few days of the previous release. But, alas, that&#8217;s just what&#8217;s happening for <a  href="http://earthlingsoft.net/Earth%20Addresser/">Earth Addresser</a> today to fix a memory problem which people with many addresses in their Address Book started to run into.
</p><p>
More technically, the problem was that I do create the necessary <code>NSAutoreleasePool</code> in the thread that looks up the addresses to make sure no objects are leaked. But I underestimated the amount of memory that gets autoreleased by running the web download. As I never noticed any memory related problems myself - not even unexpected swapping -  I never gave much thought to that, having in mind that each download I do only retrieves a very small file and even with the string processing I do before and after it, only a few kilobytes of RAM should be needed.
</p><p>
But I didn&#8217;t have in mind that doing the download may cause many other things to happen. One of them apparently being that a few megabytes of my (virtual) address space get eaten by each download. And I only recover those once my autorelease pool is released - after my loop has finished running, that is. Which means that after a small four digit number of address lookups Earth Addresser would hit the virtual memory ceiling and give a nice crash somewhere in Apple&#8217;s code (it appears that gracefully handling a lack of memory remains out of vogue even in the basic libraries).
</p><p>
Had the original bug reporter not pointed out that he observed high memory usage, I&#8217;m not sure I could have made sense of the crash reports, but with this in mind, creating a new autorelease pool for each iteration of my lookup loop was an easy way to solve the problem. Phew.
</p><p>
Another issue that cropped up - and which I fail to understand - is the following: Currently Earth Addresser is available in French for everything but the readme. My understanding of Cocoa&#8217;s localised resource loading is that in this case the code
</p><pre>
NSWorkspace * WORKSPACE = [NSWorkspace sharedWorkspace];
[WORKSPACE openFile:[[NSBundle mainBundle] pathForResource:@"readme" ofType:@"html"]];
</pre><p>
should open the readme.html file in the next best language  as the French version is not available. But somehow it doesn&#8217;t do anything as the path returned by the NSBundle is <code>nil</code>. Am I misunderstanding anything there? And how can I deal with such situations without needing to put a copy of the English file into the French localisation?
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2009-01-31T23:59:16+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_2">
<title>Earth Addresser 2</title>
<link>http://earthlingsoft.net/ssp/blog/2009/01/earth_addresser_2</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/Earth%20Addresser%20Icon.png" style="width:128px;height:128px;" alt="Earth Addresser Icon">
When I first came up with <a  href="http://earthlingsoft.net/Earth%20Addresser/">Earth Addresser</a> a <a href="http://earthlingsoft.net/ssp/blog/2007/03/earth_addresser">long time ago</a>, it kept nagging me that it only wrote addresses to the KML file rather than the coordinates associated to those addresses. A consequence of that shortcoming was that every single time you opened the Earth Addresser created KML file in Google Earth, each address had to be looked up again by the application. Which seemed like a waste of Google&#8217;s resources - for all the duplicate lookups - as well as overly keen on sending addresses around.
</p><p>
It turned out that doing the relevant lookups through Google&#8217;s Maps API isn&#8217;t too hard, and  I eventually even got my act together to give that a little testing, revamp the user interface, get to know about a few cool use cases for the application and add an ugly icon. And thus, today, I present the &#8216;all new&#8217; Earth Addresser 2 which will send your addresses around the internet - without name or other information attached to them - and create a KML file for them to use in Google Earth. A nice toy.
</p><hr><p>
Next up, I&#8217;d like Cocoa minded people to discuss whether or not Apple&#8217;s Address Book framework is somewhat half-assed in the way it handles country information. For automated lookups having country codes is extremely helpful as they avoid problems with the many ways you can write a country&#8217;s name (just think about the many ways one could designate the country information for someone living in London: England? U.K.? GB? Great Britain? United Kingdom? Vereinigtes Königreich? Großbritannien? Großbritannien und Nordirland (UK)? &#8230; and that&#8217;s just the start of it). 
</p><p>
Apple&#8217;s current Address Book framework does provide a &#8216;country code&#8217; which works reasonably well. Unfortunately said country code is only exposed via the slightly obscure address format setting in the Address Book and - even worse - the <a href="http://developer.apple.com/DOCUMENTATION/UserExperience/Reference/AddressBook/Classes/ABPerson_Class/Reference/Reference.html#//apple_ref/doc/c_ref/kABAddressCountryCodeKey">list of countries supported by the framework</a> is extremely incomplete. If you know people in poor countries, you lose. So there&#8217;s more room for improvement in this. Perhaps I&#8217;ll get to that at a later stage, perhaps I&#8217;ll just try to sit it out and hope that Apple improve their Address Book framework (haha!).
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2009-01-28T01:28:18+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2008/11/geburtstagschecker_172">
<title>GeburtstagsChecker 1.7.2</title>
<link>http://earthlingsoft.net/ssp/blog/2008/11/geburtstagschecker_172</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/GeburtstagsChecker%20Bang.png" style="width:128px;height:128px;" alt="GeburtstagsChecker Icon">
A little update to the wonderful <a href="http://earthlingsoft.net/GeburtstagsChecker/">GeburtstagsChecker</a> has just been released. It fixes a problem with the computation of people&#8217;s ages that was somehow related to time zone differences. A lesson one should probably learn from this: Testing should include the use of different time zones just as it should include characters beyond ASCII.
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2008-11-09T00:14:47+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2008/09/symmetries_scripting">
<title>Symmetries Scripting</title>
<link>http://earthlingsoft.net/ssp/blog/2008/09/symmetries_scripting</link>
<description><![CDATA[<p>
<img src="http://earthlingsoft.net/ssp/blog/graphics/Script%20Editor%20Icon.png" style="width:128px;height:128px;" alt="Script Editor Icon">
As a user I always like it when applications are scriptable as it makes applications more useful in the sense that you it lets you use them in ways the developer hasn&#8217;t anticipated. As a programmer I am thus happy that Cocoa makes it rather easy to add basic scriptability to your application. In fact, for accessing and setting data in documents all you need are <acronym title="Key Value Coding">KVC</a> complicant classes inside your documents and a scripting definition XML file.
</p><p>
That could be considered a trivial thing and I really wonder why so many applications ship without this kind of basic AppleScript support. I sometimes suspect that developers are just not aware of the possibility (which in turn makes me wonder how developers can <em>not</em> be aware of that). It is true that <a href="http://earthlingsoft.net/ssp/blog/2004/07/cocoa_and_applescript">Apple&#8217;s documentation for AppleScript support used to be rather bad</a> and that <em>figuring out</em> how to implement it was hard (probably harder than the code needed to support it), but since Mac OS X.4 and the introduction of <code>sdef</code> files things have been reasonably easy to do. In X.5 some of the remaining edges have been smoothened as well. And with tools like <a href="http://www.shadowlab.org/softwares/sdefeditor.php">Sdef Editor</a> even those technicalities are reasonably easy to handle.
</p><p>
<a href="http://earthlingsoft.net/Symmetries/"><img src="http://earthlingsoft.net/Symmetries/Icon128.png" style="width:128px;height:128px;" alt="Symmetries Icon"></a>
As a consequence I added basic AppleScript support to <a href="http://earthlingsoft.net/Symmetries/" title="Symmetries &ndash; Graphik & Geometrie &ndash; earthlingsoft">Symmetries</a> even though I didn&#8217;t see much use for it. But that&#8217;s exactly the point of scripting support: making it easy for people to do things I did not anticipate or consider worth the effort of implementing myself.
</p><p>
Recently  <a href="http://earthlingsoft.net/ssp/blog/2008/08/symmetries#359025">Arthur asked about being able to reverse the steps of an animation</a> which Symmetries plays. Symmetries totally isn&#8217;t made to do that. It&#8217;s a marginal feature which would make Symmetries&#8217; &#8216;fun&#8217; animation mode slightly useful. But implementing it with a nice GUI and everything would be a lot of effort. Yet, it&#8217;s a good idea: You see a nice shape in an animation which you want to keep, but due to its continuous movement it will be lost by the time you stop the animation. Hence, having a bit of history would be good.
</p><p>
As Symmetries&#8217; files are quite small and quickly written, I started wondering whether I can write a simple script which records the steps of the animation reasonably smoothly by saving the current state to a file. It turned out that a few lines of script:
</p><pre>
  <style type="text/css">
    p.p1 {margin: 0.0px 0.0px 0.0px 26.6px; text-indent: -26.7px; font: 10.0px Geneva; color: #0000ff}
    p.p2 {margin: 0.0px 0.0px 0.0px 26.6px; text-indent: -26.7px; font: 12.0px Helvetica; min-height: 14.0px}
    p.p3 {margin: 0.0px 0.0px 0.0px 53.3px; text-indent: -53.3px; font: 10.0px Geneva; color: #0000ff}
    p.p4 {margin: 0.0px 0.0px 0.0px 53.3px; text-indent: -53.3px; font: 10.0px Geneva}
    p.p5 {margin: 0.0px 0.0px 0.0px 79.9px; text-indent: -80.0px; font: 10.0px Geneva; color: #0000ff}
    p.p6 {margin: 0.0px 0.0px 0.0px 79.9px; text-indent: -80.0px; font: 10.0px Geneva}
    span.s1 {font: 12.0px Helvetica; color: #000000}
    span.s2 {color: #408000}
    span.s3 {color: #000000}
    span.s4 {font: 12.0px Helvetica}
    span.s5 {color: #0000ff}
    span.Apple-tab-span {white-space:pre}
  </style>
<p class="p1">set<span class="s1"> </span><span class="s2">f</span><span class="s1"> </span>to<span class="s1"> </span>choose folder</p>
<p class="p1">set<span class="s1"> </span><span class="s2">outputfolder</span><span class="s1"> </span>to<span class="s1"> </span>POSIX path<span class="s1"> </span>of<span class="s1"> </span><span class="s2">f</span></p>
<p class="p1">tell<span class="s1"> </span>application<span class="s1"> </span><span class="s3">"Finder"</span><span class="s1"> </span>to<span class="s1"> </span>open<span class="s1"> </span><span class="s2">f</span></p>
<p class="p1">tell<span class="s1"> </span>application<span class="s1"> </span><span class="s3">"Symmetries"</span></p>
<p class="p3"><span class="s1"><span class="Apple-tab-span">    </span></span>activate</p>
<p class="p4"><span class="s4"><span class="Apple-tab-span">    </span></span><span class="s5">set</span><span class="s4"> </span><span class="s2">n</span><span class="s4"> </span><span class="s5">to</span><span class="s4"> </span>1</p>
<p class="p3"><span class="s1"><span class="Apple-tab-span">    </span></span>repeat</p>
<p class="p5"><span class="s1"><span class="Apple-tab-span">    </span><span class="Apple-tab-span">    </span></span>save<span class="s1"> </span>first<span class="s1"> </span>document<span class="s1"> </span>in<span class="s1"> </span><span class="s2">outputfolder</span><span class="s1"> </span><span class="s3">&amp;</span><span class="s1"> </span><span class="s3">(</span>time<span class="s1"> </span>of<span class="s1"> </span><span class="s3">(</span>current date<span class="s3">)</span><span class="s1"> </span>as<span class="s1"> </span>string<span class="s3">)</span><span class="s1"> </span><span class="s3">&amp;</span><span class="s1"> </span><span class="s3">"-"</span><span class="s1"> </span><span class="s3">&amp;</span><span class="s1"> </span><span class="s3">(</span><span class="s2">n</span><span class="s1"> </span>as<span class="s1"> </span>string<span class="s3">)</span><span class="s1"> </span><span class="s3">&amp;</span><span class="s1"> </span><span class="s3">".symmetricpath"</span></p>
<p class="p6"><span class="s4"><span class="Apple-tab-span">    </span><span class="Apple-tab-span">    </span></span><span class="s5">set</span><span class="s4"> </span><span class="s2">n</span><span class="s4"> </span><span class="s5">to</span><span class="s4"> </span><span class="s2">n</span><span class="s4"> </span>+<span class="s4"> </span>1</p>
<p class="p3"><span class="s1"><span class="Apple-tab-span">    </span></span>end<span class="s1"> </span>repeat</p>
<p class="p1">end<span class="s1"> </span>tell</p>
</pre><p>
</p>

<p><a href="http://earthlingsoft.net/Symmetries/Symmetries%20Animation%20Saver.scpt">[download]</a>
</p><p>
&#8230; do the trick. Open the script in Script Editor, run it, select the folder the files should be stored into and then start the animation in Symmetries. The script will store the current state to the folder as quickly as it can and you can easily see the images in the Finder later on thanks to <a href="http://earthlingsoft.net/ssp/blog/2007/12/x5_quick_look">Quick Look</a>. 
</p><p class="centred">
<a href="http://earthlingsoft.net/ssp/blog/graphics/Symmetries%20Animation%20Script%20QL.png" title="Click to enlarge."><img src="http://earthlingsoft.net/ssp/blog/graphics/Symmetries%20Animation%20Script%20QL.png" style="width:95%;max-width:581px;max-height:512px;" alt="Finder window with thumbnail icons for the saved symmetries"></a>
</p><p>
You&#8217;ll have to hit ⌘-. in Script Editor to stop the script. And I wouldn&#8217;t let the script run too long because it creates loads of files somewhat rapidly.
</p><p>
It&#8217;s not particularly pretty but it may give a reasonable approximation to the desired feature with just a little effort. That&#8217;s what scripting is for.
</p></p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2008-09-15T00:04:12+01:00</dc:date>
</item>

<item rdf:about="http://earthlingsoft.net/ssp/blog/2008/08/symmetries">
<title>Symmetries</title>
<link>http://earthlingsoft.net/ssp/blog/2008/08/symmetries</link>
<description><![CDATA[<p>
<a href="http://earthlingsoft.net/Symmetries/"><img src="http://earthlingsoft.net/Symmetries/Icon128.png" style="width:128px;height:128px;" alt="Symmetries Icon"></a>
I won&#8217;t get into the <em>why</em> of its existence right now and I am fairly sure I have discovered yet another sweet spot of global indifference. But here it is: <a href="http://earthlingsoft.net/Symmetries/">Symmetries</a>. 
</p><p>
It&#8217;s another wonderful earthlingsoft application, it lives in the intersection of mathematics and graphics, it seems likely that many won&#8217;t see what it&#8217;s good for - yet it creates wonderfully symmetric paths and even has a bit of entertainment up its sleeves.
</p><p>
It was an interesting journey getting here. As usual the main idea was sheer silliness and the essential implementation was quite easy. Then things got out of control and I wanted them to be a little nice as well. Which expanded the project from a Saturday afternoon to a few more of those.  As a consequence may have opinions to share on topics like paths, mouse tracking, Objective-C garbage collection, Core Animation, mouse cursors, file promise drags and a venture into software fascism at some point in the future.
</p><p>
To make things a little more challenging I also found a handful of great testers whose sharp eyes were quick to spot weaknesses. Special hat tip to <a href="http://jerakeen.org/">Tom</a> and <a href="http://njr.sabi.net/">Nicholas</a> for the extra share of work they brought my way and to <a href="http://www.blogography.com/">Dave</a> for offering advice on the graphics aspects.
</p><p>
Special thanks go to <a href="http://www.cortig.net/localisations/?cat=2" hreflang="fr">Ronald</a> for making Symmetries speak French and to <a href="http://henrikcederblad.com/">Henrik</a> for giving the icon the shine it has now.
</p><p class="centred">
<a href="http://earthlingsoft.net/ssp/blog/graphics/Symmetries%20Colour.jpeg" title="Click to enlarge."><img src="http://earthlingsoft.net/ssp/blog/graphics/Symmetries%20Colour.jpeg" style="width:95%;max-width:433px;max-height:425px;" alt="Symmetries example in mysterious colour"></a>
</p>
]]></description>
<dc:subject>earthlingsoft</dc:subject>
<dc:creator>ssp</dc:creator>
<dc:date>2008-08-19T00:51:14+01:00</dc:date>
</item>


</rdf:RDF>