<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-31847778</atom:id><lastBuildDate>Thu, 07 Aug 2008 11:21:28 +0000</lastBuildDate><title>Nifty Box News</title><description/><link>http://nifty-box.com/blog/</link><managingEditor>noreply@blogger.com (Tim Scheffler)</managingEditor><generator>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-1521437363582444383</guid><pubDate>Thu, 07 Aug 2008 11:08:00 +0000</pubDate><atom:updated>2008-08-07T13:15:57.148+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><category domain='http://www.blogger.com/atom/ns#'>Objective-C</category><title>Bug-Fix 1.2.1</title><description>There has been a nasty bug in version 1.2 that would sometimes cause Nifty Box on Leopard to use 100% CPU time after closing a window, but leaving Nifty Box running. This has been due to a bug in a NSObject category I implemented for dealing with delayed messages (I've written about this &lt;a href="http://nifty-box.com/blog/2006/12/nsinvocation-cleans-code.html"&gt;here&lt;/a&gt; and gave a brief explanation for those interested in Objective-C).&lt;br /&gt;For all those not interested in the details: The bug has been fixed and using the new version is recommended.</description><link>http://nifty-box.com/blog/2008/08/bug-fix-121.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-4908378957475880157</guid><pubDate>Fri, 01 Aug 2008 08:02:00 +0000</pubDate><atom:updated>2008-08-01T10:10:33.073+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><category domain='http://www.blogger.com/atom/ns#'>AppleScript</category><title>Nifty Box 1.2</title><description>Nifty Box version 1.2 is ready for download!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This release adds AppleScript support to Nifty Box. Now you can access your Nifty Box tagging database through AppleScript or tag new items automatically. You can find some examples &lt;a href="http://www.nifty-box.com/applescript_an.html"&gt;here&lt;/a&gt;.&lt;/div&gt;</description><link>http://nifty-box.com/blog/2008/08/nifty-box-12.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-5652518058736959283</guid><pubDate>Thu, 15 May 2008 14:08:00 +0000</pubDate><atom:updated>2008-05-15T18:24:40.822+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><category domain='http://www.blogger.com/atom/ns#'>AppleScript</category><title>AppleScript for Nifty Box</title><description>&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;There is a new beta version of Nifty Box available for testing.&lt;br /&gt;&lt;br /&gt;This version introduces AppleScript support for Nifty Box. Now you can tag files and web bookmarks automatically via AppleScript and much more. Just take a quick look at &lt;a href="http://www.nifty-box.com/applescript_an.html"&gt;brief tour&lt;/a&gt; of the Nifty Box AppleScript interface!&lt;br /&gt;&lt;br /&gt;If you are interested in testing the new beta version: download the beta from &lt;a href="http://www.nifty-box.com/apps/Nifty_Box_1.1.7BETA.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Please bear in mind that this version is beta quality&lt;/span&gt;!&lt;br /&gt;So please make a backup copy of your Nifty Box database located in ~/Library/Application Support/Nifty Box/NiftyBoxDB.sqlite before running the beta version.&lt;br /&gt;&lt;br /&gt;If you have any questions please do not hesitate to use the &lt;a href="http://nifty-box.com/contact/"&gt;contact page&lt;/a&gt;.</description><link>http://nifty-box.com/blog/2008/05/applescript-for-nifty-box.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-4332063608321307703</guid><pubDate>Mon, 05 Nov 2007 13:00:00 +0000</pubDate><atom:updated>2007-11-08T21:14:51.661+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Switching Hoster</title><description>In the next days I will be switching the hoster for nifty-box.com.&lt;br /&gt;&lt;br /&gt;Update Nov. 8: Now the migration is finished. Everthing seems to be running alright.</description><link>http://nifty-box.com/blog/2007/11/switching-hoster.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-1717942661428502343</guid><pubDate>Fri, 26 Oct 2007 11:05:00 +0000</pubDate><atom:updated>2007-11-05T14:34:05.957+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>New Nifty Box version for Leopard</title><description>Today is the day of the Leopard.&lt;br /&gt;&lt;br /&gt;I made some small fixes so that Nifty Box plays well with the new Mac OS X release. There are no new features in this release (sorry for that), only one small added choice in the "View Options" for triggering what to display in the item table tool tips.</description><link>http://nifty-box.com/blog/2007/10/new-nifty-box-version-for-leopard.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-2486469514968147134</guid><pubDate>Sat, 25 Aug 2007 10:37:00 +0000</pubDate><atom:updated>2007-08-25T12:43:51.241+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Lost Mail</title><description>I am very sorry, but it looks like I lost messages sent through the web contact formular. If you've sent some inquiry using the web formular and did not receive a response it's because of that. I am very, very sorry for that. Now everything should be fixed again.&lt;br /&gt;&lt;br /&gt;In the meantime I did move to a new flat in Düsseldorf, Germany. Now I will have to set up everything and start working again on Nifty Box, especially making NB ready for Leopard. More about that later...</description><link>http://nifty-box.com/blog/2007/08/lost-mail.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-8539763305014853544</guid><pubDate>Mon, 02 Jul 2007 17:34:00 +0000</pubDate><atom:updated>2007-07-02T19:46:56.975+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Killing bugs...</title><description>Yesterday I released a new bug fix for Nifty Box 1.1.2. Details can be found &lt;a href="http://www.nifty-box.com/changes/whatsnew.html"&gt;here&lt;/a&gt;. A big thanks to all who reported bugs and helped with the beta testing for this release!&lt;br /&gt;&lt;br /&gt;Currently I am not making as much progress with NB 1.2 as I wish. This is mainly due to a new consulting job I've been working on since April, which takes up most of my time. Additionally I am looking for a new flat, so things are a bit chaotic right now. I hope that I will be able to work more constantly on NB 1.2 soon.&lt;br /&gt;&lt;br /&gt;The feature set for 1.2 has not been decided yet, but I think the two most important features will be Spotlight import and AppleScript support. Spotlight import will help you to more-or-less automatically import new files into NB if they were tagged via the Spotlight comment field. This way you can import files, tagged by other tagging application as long as they also use the Spotlight comment field.&lt;br /&gt;&lt;br /&gt;Making NB AppleScript-able is something I've always wanted to do, but I somehow did not find the time for it. Now I am going to do my homework and make NB a good mac citizen. This way you can use NB for an even better organization of your documents.&lt;br /&gt;&lt;br /&gt;The 1.2 release is planned for autumn this year. I know, I've been quite lazy updating this blog for some time. In the future I will write more frequently and let you know how the development of NB 1.2 is getting on.</description><link>http://nifty-box.com/blog/2007/07/killing-bugs.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-7149067612708921539</guid><pubDate>Mon, 19 Mar 2007 18:08:00 +0000</pubDate><atom:updated>2007-03-19T19:20:24.492+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Nifty Box update</title><description>Today I released I small update for Nifty Box, now version 1.1.1.&lt;br /&gt;&lt;br /&gt;Nothing much has changed: You now can choose the "&amp;amp;" symbol as a prefix in the Spotlight comments, which should be more convient when using the Spotlight quick search (at least in Tiger).&lt;br /&gt;&lt;br /&gt;As a second addition you are now free to choose the side for the tag index drawer: left or right (adjustable in "View options").</description><link>http://nifty-box.com/blog/2007/03/nifty-box-update.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-4701696200505619300</guid><pubDate>Tue, 13 Mar 2007 14:29:00 +0000</pubDate><atom:updated>2007-03-13T15:34:50.130+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Nifty Box 1.1 is here</title><description>Finally Nifty Box 1.1 is ready for &lt;a href="http://www.nifty-box.com/downloads/Nifty_Box_1_1.dmg"&gt;download&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are some couple of new things, most of all &lt;a href="http://nifty-box.com/blog/2007/02/tag-clouds-everywhere-nifty-box-11.html"&gt;tag clouds&lt;/a&gt; and &lt;a href="http://nifty-box.com/blog/2006/12/new-feature-for-11-spotlight-export.html"&gt;Spotlight export&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As you might notice I've also changed the design of the homepage. I hope you like it.</description><link>http://nifty-box.com/blog/2007/03/nifty-box-11-is-here.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-205315393780933674</guid><pubDate>Sat, 24 Feb 2007 17:20:00 +0000</pubDate><atom:updated>2007-03-13T15:25:01.200+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Tag Clouds everywhere (Nifty Box 1.1)</title><description>I am proud to announce, that finally Nifty Box 1.1 is ready and will be released next week (if all goes to plan). Version 1.1 will not only feature &lt;a href="http://nifty-box.com/blog/2006/12/new-feature-for-11-spotlight-export.html"&gt;Spotlight export&lt;/a&gt;, but it will also include tag clouds and a hierarchical tag organisation.&lt;br /&gt;&lt;br /&gt;One reason I wrote Nifty Box was, that I thought a hierarchical file structure, where every file has to be put into a tree-like folder/directory path, should be a thing of the past. Tags could be a good way to "put" a file into more than one category. But a pure &lt;span style="font-style: italic;"&gt;flat&lt;/span&gt; tag organization might throw away useful information about the relationship between the tags/categories. So now NB 1.1 will feature tag folders: you put the tags into a hierarchical tree (if you want to), but not the files.  So you can construct a tree like "Science -&gt; Space -&gt; Mars", where "Science" and "Space" are folders and "Mars" is the actual tag. If you then select for example "Science" Nifty Box will show you all items, that have a tag from the "Science" tree. More or less this works like folders and playlists in iTunes.&lt;br /&gt;&lt;br /&gt;But this is just &lt;span style="font-style: italic;"&gt;organization&lt;/span&gt;, now the &lt;span style="font-style: italic;"&gt;visualization&lt;/span&gt;: Everyone who uses tags knows that after some time the number of tags grows quite fast and browsing them in a list can be quite confusing. Therefore some wise people have created the so called tag clouds, which were one ingredient of web 2.0 right from the beginning. Now - to help you managing your tags - Nifty Box will also feature tag clouds in the tag tree. This is how it will look like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nifty-box.com/blog/uploaded_images/screenshot-788113.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 355px; height: 229px;" src="http://nifty-box.com/blog/uploaded_images/screenshot-785670.jpg" alt="" border="0" /&gt;&lt;/a&gt;But if you are confused by all these clouds and don't like modern things, you can still use the traditional list view for the tags:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nifty-box.com/blog/uploaded_images/screenshot_list-737796.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://nifty-box.com/blog/uploaded_images/screenshot_list-735598.jpg" alt="" border="0" /&gt;&lt;/a&gt;I still have to do some final adjustments, but I hope Nifty Box 1.1 will be ready by the end of next week.</description><link>http://nifty-box.com/blog/2007/02/tag-clouds-everywhere-nifty-box-11.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-6839126762799635542</guid><pubDate>Sat, 03 Feb 2007 11:41:00 +0000</pubDate><atom:updated>2007-02-03T19:35:21.371+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Sorry for the delay...</title><description>I know, I am really behind schedule for the 1.1 release of Nifty Box. The two main new features took much more time than I thought, but I think most of 1.1 will be ready in the next days for the beta testers. After that I only have to update my web-site (the current design really sucks) and adjust the help file.&lt;br /&gt;&lt;br /&gt;I am looking forward to releasing 1.1 later in February, because I think this release will be a huge step forward. In the next days I will write a bit more about the new tag organization feature of Nifty Box 1.1.</description><link>http://nifty-box.com/blog/2007/02/sorry-for-delay.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-3913523964064524749</guid><pubDate>Wed, 27 Dec 2006 16:34:00 +0000</pubDate><atom:updated>2006-12-27T17:45:42.438+01:00</atom:updated><title>MacSanta is over</title><description>A huge THANKS to the guys at &lt;a href="http://www.rogueamoeba.com/"&gt;Rogue Amoeba&lt;/a&gt; for organizing the  &lt;a href="http://www.macsanta.com/"&gt;MacSanta&lt;/a&gt; sales! It's been a great opportunity for me and  other small developers out there. When you start as a new developer it's kind of hard to get the word out and make people notice your app.&lt;br /&gt;&lt;br/&gt;</description><link>http://nifty-box.com/blog/2006/12/macsanta-is-over.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-244910919621373490</guid><pubDate>Thu, 21 Dec 2006 11:24:00 +0000</pubDate><atom:updated>2006-12-21T12:29:37.920+01:00</atom:updated><title>My Own Head</title><description>How about getting your self-named Cocoa notepad application with your own icon? Then visit this new site &lt;a href="http://www.myownhead.com/"&gt;myownhead&lt;/a&gt;!&lt;br /&gt;And yes, you can win a copy of Nifty Box!&lt;br /&gt;&lt;br/&gt;</description><link>http://nifty-box.com/blog/2006/12/my-own-head.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-9099323828428587472</guid><pubDate>Wed, 20 Dec 2006 11:55:00 +0000</pubDate><atom:updated>2006-12-20T13:10:48.664+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><category domain='http://www.blogger.com/atom/ns#'>Objective-C</category><category domain='http://www.blogger.com/atom/ns#'>Cocoa</category><title>Worker Thread - NSInvocation Part 2</title><description>NSInvocation is not only nice to &lt;a href="http://nifty-box.com/blog/2006/12/nsinvocation-cleans-code.html"&gt;post delayed multi-argument messages&lt;/a&gt;, you can also use it for constructing a lightweight worker thread implementation.&lt;br /&gt;&lt;br /&gt;Sometimes it happens that your app has to do lot of work, that you would like to do it in the background as you think it would be a nice thing if the gui would stay responsive to the user actions. Sometimes invoking a NSThread is a valid solution, but if you want to schedule many tiny tasks to the background creating a new thread for each of them might not be the best idea.&lt;br /&gt;&lt;br /&gt;Another possibility is using &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/DistrObjects/index.html?http://developer.apple.com/documentation/Cocoa/Conceptual/DistrObjects/DistrObjects.html"&gt;Distributed Objects (DO)&lt;/a&gt;. But DO for intra-application communication might be a bit of an overkill and during my experimenting I experienced, that outsourcing a working thread via DO and using the NSRunLoop is not the ideal solution: if the runloop of the worker thread is currently busy working on a past message you have to wait on the main thread if you want to post a new DO message until the worker thread's runloop is free again.&lt;br /&gt;&lt;br /&gt;So a solution I am using for the background &lt;a href="http://nifty-box.com/blog/2006/12/new-feature-for-11-spotlight-export.html"&gt;Spotlight export&lt;/a&gt; of my app is based on the &lt;a href="http://www.cocoadev.com/index.pl?ProducersAndConsumerModel"&gt;producers and consumer model&lt;/a&gt;: I create a thread safe queue in which the producer (main) thread posts new tasks and a consumer thread performs these tasks. This is very lightweight and the main thread does not block during the posting of the tasks.&lt;br /&gt;&lt;br /&gt;How does it work? Again using NSInvocations. The tasks, that are written to the queue are just NSInvocations, so you can post any message the target object understands.&lt;br /&gt;&lt;br /&gt;So here's an example:&lt;br /&gt;&lt;br /&gt;In the main thread you initialize NBInvocationQueue and start the worker thread&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;NBInvocationQueue *finderEventQueue = [[NBInvocationQueue alloc] init];&lt;br /&gt;[NSThread detachNewThreadSelector:@selector(runQueueThread) toTarget:finderEventQueue withObject:nil];&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now the NBInvocationQueue is ready to take messages. You post them like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[[finderEventQueue performThreadedWithTarget:spotlightExporter]&lt;br /&gt;    exportFinderCommentAtPath:path&lt;br /&gt;                         tags:tagArray&lt;br /&gt;                      comment:comment]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will invoke [spotlightExporter exportFinderCommentAtPath:...] on the worker thread.&lt;br /&gt;&lt;br /&gt;The methods to queue messages are:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;-(id)performThreadedWithTarget:(id)target;&lt;br /&gt;-(id)performThreadedWithTarget:(id)target afterDelay:(NSTimeInterval)delay;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you want to stop the worker thread you can use the method:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;-(void)stopThreadWaitUntil:(BOOL)wait;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which waits until all open tasks have been de-queued if the flag "wait" is set.&lt;br /&gt;&lt;br /&gt;The source code is here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nifty-box.com/source/NBInvocationQueue.h"&gt;NBInvocationQueue.h&lt;/a&gt; and &lt;a href="http://www.nifty-box.com/source/NBInvocationQueue.m"&gt;NBInvocationQueue.m&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feel free to use this class as you like, NO WARRANTY!&lt;br /&gt;&lt;br /&gt;Inspiration for this class has been &lt;a href="http://www.cocoadev.com/index.pl?ProducersAndConsumerModel"&gt;producers and consumer model&lt;/a&gt; and &lt;a href="http://toxicsoftware.com/blog/grab-that-invocation/"&gt;CInvocationGrabber&lt;/a&gt; from ToxicSoftware.</description><link>http://nifty-box.com/blog/2006/12/worker-thread-nsinvocation-part-2.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-3255033047466128352</guid><pubDate>Tue, 19 Dec 2006 20:38:00 +0000</pubDate><atom:updated>2006-12-20T00:03:33.375+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>MacSanta</title><description>Maybe you've already heard about the latest Mac software promotion &lt;a href="http://www.macsanta.com/"&gt;MacSanta&lt;/a&gt; organised by &lt;a href="http://www.rogueamoeba.com/"&gt;Rogue Amoeba&lt;/a&gt;. This is a great idea and I am happy to join the crowd with Nifty Box.&lt;br /&gt;&lt;br /&gt;Purchase Nifty Box with a 20% discount through December 25: just enter the promotion code "MACSANTA" in the purchase process.</description><link>http://nifty-box.com/blog/2006/12/macsanta.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-7874358197756969066</guid><pubDate>Tue, 12 Dec 2006 10:27:00 +0000</pubDate><atom:updated>2008-08-07T13:21:28.360+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Programming</category><category domain='http://www.blogger.com/atom/ns#'>Objective-C</category><category domain='http://www.blogger.com/atom/ns#'>Cocoa</category><title>NSInvocation cleans code</title><description>&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Update: (2008-08-07)&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;There's been a small (but potent) bug in the given implementation. I somehow move the release of the invocation:&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;[myInvocation release]; myInvocation = nil;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;into the dealloc method of the _UFLatePerformer class. This is bollocks, because the invocation contains _UFLatePerformer as target itself. Therefore I have to release the invocation as soon as it has been invoked. Otherwise there is a retain-cycle and the dealloc-method of _UFLatePerformer is never called.&lt;br /&gt;The code below has been updated accordingly.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;During the development of Nifty Box I've grown to use NSInvocations more and more. One thing I am using this class especially for is a wrapper for NSObject's &lt;code&gt;performSelector:withObject:afterDelay:&lt;/code&gt;. This method invokes the selector with &lt;b&gt;one&lt;/b&gt; argument after a specified delay. My problem was that I can only pass one argument for the selector, but it often happens that I want to invoke a method with more than one argument. So I had to pack all the arguments into a NSDictionary, write a proxy method, inside this proxy function unpack the arguments from the dictionary and invoke the original method. This is messy.&lt;br /&gt;&lt;br /&gt;For this I have written a small category add-on for NSObject:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@interface _UFLatePerformer : NSObject {&lt;br /&gt;NSInvocation *myInvocation;&lt;br /&gt;id target;&lt;br /&gt;}&lt;br /&gt;-(id)initWithTarget:(id)theTarget;&lt;br /&gt;-(void)performLate;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;@interface NSObject (NSObject_laterInvocation)&lt;br /&gt;-(id)performAfterDelay:(NSTimeInterval)delay;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;@implementation _UFLatePerformer&lt;br /&gt;&lt;br /&gt;- (id) initWithTarget:(id)theTarget {&lt;br /&gt;[super init];&lt;br /&gt;if (self != nil) {&lt;br /&gt;   target = theTarget;&lt;br /&gt;   [target retain];&lt;br /&gt;}&lt;br /&gt;return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void) dealloc {&lt;br /&gt;[target release]; target = nil;&lt;br /&gt;&lt;br /&gt;[super dealloc];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-(void)forwardInvocation:(NSInvocation *)invocation;&lt;br /&gt;{&lt;br /&gt;myInvocation = invocation;&lt;br /&gt;[myInvocation retain];&lt;br /&gt;[myInvocation retainArguments];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(BOOL)respondsToSelector:(SEL)aSelector;&lt;br /&gt;{&lt;br /&gt;BOOL result = [super respondsToSelector:aSelector];&lt;br /&gt;if (result == NO)&lt;br /&gt;   result = [target respondsToSelector:aSelector];&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector;&lt;br /&gt;{&lt;br /&gt;NSMethodSignature *result = [super methodSignatureForSelector:aSelector];&lt;br /&gt;if (!result)&lt;br /&gt;   result = [target methodSignatureForSelector:aSelector];&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-(void)performLate;&lt;br /&gt;{&lt;br /&gt;[myInvocation invokeWithTarget:target];&lt;br /&gt;[myInvocation release]; myInvocation = nil;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@implementation NSObject (NSObject_laterInvocation)&lt;br /&gt;&lt;br /&gt;-(id)performAfterDelay:(NSTimeInterval)delay;&lt;br /&gt;{&lt;br /&gt;_UFLatePerformer *latePerformer = [[_UFLatePerformer alloc]&lt;br /&gt;       initWithTarget:self];&lt;br /&gt;[latePerformer performSelector:@selector(performLate)&lt;br /&gt;       withObject:nil afterDelay:delay];&lt;br /&gt;[latePerformer release];&lt;br /&gt;return latePerformer;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This basically works like the NSUndoManager's &lt;code&gt;[[undoManager prepareWithInvocationTarget:self] myMethod:someArgument anotherArgument:secondArgument]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You use this new method like that:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[[myObject performAfterDelay:0.0] someMehodWithArgument1:argument1 argument2:argument2]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is an implementation of the &lt;a href="http://www.cocoadev.com/index.pl?TrampolineObject"&gt;Trampoline Object&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Feel free to use this snippet as you wish. No warranty however.</description><link>http://nifty-box.com/blog/2006/12/nsinvocation-cleans-code.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-8192816983833919730</guid><pubDate>Sun, 10 Dec 2006 11:56:00 +0000</pubDate><atom:updated>2006-12-10T14:37:14.087+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>New feature for 1.1: Spotlight export</title><description>The last couple of weeks I've working on the export of tags and comments to Spotlight. This has been much more complicated than I expected. Nifty Box now writes the tags or comments to the Spotlight Comment field in the Finder's "Get Info..." window (for file items). This is a bit tricky.&lt;br /&gt;&lt;br /&gt;First of all only the Finder can edit this field, which means one has to use AppleScript or AppleEvents. This is ok, there exists some source code from Apple (MoreFinderEvents) to do this. But during the testing sometimes strange things happened: for long comments written to this field it seems, that the Finder looses information about all the comments and icon positions in the folder of the changed item. After some experimenting I found, that the Spotlight Finder comment is written to the hidden .DS_Store file in the folder of the specific file. The .DS_Store contains all specific Finder information (like icon position and Spotlight comments) of all the files in the folder. But this information is somehow coded in blocks, which means that there is a maximum length set implicitly for the Spotlight comments. If you try to save a longer comment, the .DS_Store gets corrupted. By trial-and-error I concluded, that the combined length of the comment plus the length of the filename must not be greater than 1012 UTF-16 characters. Nifty Box will deal with this. For web bookmarks I dont use the Spotlight comment field, but provide an own Spotlight importer, which is much more convenient.&lt;br /&gt;&lt;br /&gt;The way the Spotlight finder comments are used by Nifty Box is as follows: first all tags are written into the field, whereby these can be prefixed by a special character like "|" or "&amp;". If you choose to use such a prefix, the Spotlight search can be narrowed down only to the Nifty Box items. An example: if you like to search in Spotlight for items tagged with "Apple" you would get a zillion hits if you just type in "Apple" in the search field, because - as you might guess - the word "Apple" can be found quite a lot on the mac. But if you only want to view the Nifty Box items, tagged with "Apple", you can define just a tag prefix like "|" and search in Spotlight for "|Apple" which should only give you the Nifty Box items.&lt;br /&gt;&lt;br /&gt;After the tags you can choose to export your notes too. At the end a marker "_nybx_" is inserted into the comment field. After this marker the original comment from the Spotlight comment field is preserved. If the complete string (Nifty Box additions plus original comment) gets too long for the .DS_Store file, the Nifty Box additions will be shortened leaving the original comment complete.&lt;br /&gt;&lt;br /&gt;Just to give you an impression, here is the new preferences tab for the Spotlight Export settings:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nifty-box.com/blog/uploaded_images/preferences-734231.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://nifty-box.com/blog/uploaded_images/preferences-726963.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will export a Spotlight Finder comment like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nifty-box.com/blog/uploaded_images/get_info-727860.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://nifty-box.com/blog/uploaded_images/get_info-723658.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And here is an example Spotlight search for the tag "Mars": (please note the prefix "|")&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nifty-box.com/blog/uploaded_images/spotlight_mars-704489.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://nifty-box.com/blog/uploaded_images/spotlight_mars-700935.png" alt="" border="0" /&gt;&lt;/a&gt;In the screenshot you can also see the tagged web bookmarks at the top, which are provided by an Spotlight importer and not via the Finder's Spotlight comment field.&lt;br /&gt;&lt;br /&gt;Using the Finder's Spotlight comment field for the file items also gives you information directly in the Finder if a file is tagged by Nifty Box: you can activate the "Comments" table column in the Finder window, which will show you the tag information for all files in a given folder:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://nifty-box.com/blog/uploaded_images/finder-701824.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://nifty-box.com/blog/uploaded_images/finder-798564.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So this export functionality is now implemented and in beta test. I am now working on the second new feature for version 1.1. I hope I will finish the development in December such that the new version can be released at the beginning of the new year.</description><link>http://nifty-box.com/blog/2006/12/new-feature-for-11-spotlight-export.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-116281816673369335</guid><pubDate>Mon, 06 Nov 2006 12:57:00 +0000</pubDate><atom:updated>2006-11-06T14:02:46.750+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Just a small bug fix release</title><description>This (1.0.1) is just a small bug fix release. Nothing new has been introduced. The bugs have not been severe: a couple of annoyances in the main menu, some problems with icon display in the item table, and strange behaviour with the toolbar. &lt;br /&gt;Now I can focus on new features for 1.1. One thing I will definitely do is an export of the Nifty Box tags to the Spotlight comment field. This should make smart Finder folders even smarter. What other things will go into 1.1 I have not decided yet. I'll keep you informed on this blog.</description><link>http://nifty-box.com/blog/2006/11/just-small-bug-fix-release.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-116194461805612951</guid><pubDate>Fri, 27 Oct 2006 10:08:00 +0000</pubDate><atom:updated>2006-10-27T16:49:00.186+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Nifty Box 1.0</title><description>Ok, this is 1.0. &lt;br /&gt;It was hard to stay away from implementing new features and just to work on the payment and licensing stuff. I have some nice ideas for improvement of Nifty Box but these will all go into version 1.1 (at least some of them), which should be ready in December, I think.&lt;br /&gt;&lt;br /&gt;That's all for now.&lt;br /&gt;Have fun with NB 1.0!</description><link>http://nifty-box.com/blog/2006/10/nifty-box-10.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-116135176184399155</guid><pubDate>Fri, 20 Oct 2006 13:42:00 +0000</pubDate><atom:updated>2006-10-20T16:02:24.646+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>Preparing 1.0</title><description>I've finished most of the stuff for the first commercial release of Nifty Box right now. If all goes to plan it will be released by the end of next week. Although I said that I wont change the design I made some slight changes (rounded rects!) that should make the look of NB nicer - at least I think so.&lt;br /&gt;&lt;br /&gt;For the registration stuff I included Lucas Newman's nice &lt;a href=" http://www.aquaticmac.com/"&gt;AquaticPrime&lt;/a&gt; framework and the auto update &lt;a href="http://andymatuschak.org/pages/sparkle"&gt;Sparkle&lt;/a&gt; from Andy Matuschak. Thanks!&lt;br /&gt;&lt;br /&gt;All this was quite simple and fun. But right now I am reluctant to start the worst part of the job: updating the help file! I've always been a bad writer. Especially if you do not write in your native language it is quite a slow process.</description><link>http://nifty-box.com/blog/2006/10/preparing-10.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-115961453797396198</guid><pubDate>Sat, 30 Sep 2006 10:49:00 +0000</pubDate><atom:updated>2006-09-30T15:27:21.803+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>The last beta</title><description>Today I released version 0.999 of Nifty Box. I hope this will be the last beta version and that I can ship the first commercial 1.0 version in October. &lt;br /&gt;&lt;br /&gt;This whole process has taken much longer than I thought. More than half of September I've been working on improving the old import window with nice animations and stuff. But in the end I threw it all away, because an import window makes things only more complicated than necessary. I put the whole import functionality into the main window, which makes much more sense now. &lt;br /&gt;&lt;br /&gt;If you are experimenting with the design of an application it's a lot of trial and error. In the end you look at your product and say: "Man, I could have coded that in a couple of weeks - not months!", because all these wrong ways and bad ideas in the design process cost much more time than the pure coding. But that's common knowledge for everyone being creative in one way or the other.&lt;br /&gt;&lt;br /&gt;That said, I will stick to the current design until version 1.0. So for the first commercial release I will only do slight changes (if at all) and bug fixes. Version 0.999 is now pretty much, what v 1.0 will be. In the next weeks I will be quite busy setting up the payment process and license mechanism.&lt;br /&gt;&lt;br /&gt;So, that's it. Please try out the &lt;a href=http://www.nifty-box.com/downloads/Nifty_Box_Public_Beta_0.999.dmg&gt;last beta version&lt;/a&gt; and have fun!</description><link>http://nifty-box.com/blog/2006/09/last-beta.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-115893169775096001</guid><pubDate>Fri, 22 Sep 2006 13:20:00 +0000</pubDate><atom:updated>2006-09-22T15:31:23.866+02:00</atom:updated><title>They found me!</title><description>Ok, they found my  &lt;a href="http://www.nifty-box.com/contact/index.html")&gt;contact CGI form&lt;/a&gt;: Today somebody used my python cgi contact script for a &lt;a href="http://www.anders.com/projects/sysadmin/formPostHijacking/"&gt;Form Post Hijacking&lt;/a&gt; attack and sent spam using nifty-box.com. I changed my script to handle that and I hope not too much harm has been done by the unknown attackers.</description><link>http://nifty-box.com/blog/2006/09/they-found-me.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-115644139301163287</guid><pubDate>Thu, 24 Aug 2006 17:39:00 +0000</pubDate><atom:updated>2006-09-30T16:48:40.680+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>New Version of Nifty Box</title><description>Nifty Box is slowly approaching 1.0...&lt;br /&gt;&lt;br /&gt;As the expiry date of the 0.9 version is near, I released a new version 0.99, that will work until 1st of October. The only new thing is the change of the UI theme: leaving the pre-Leopard Finder look for a more iTunes-like skin. I've written about that &lt;a href="http://nifty-box.com/blog/2006/08/new-design.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am currently working hard on some features for the 1.0 version of Nifty Box, but they are not ready for release yet. The handling of the tags in the detail view will become much better and it should be easier to tag items using the dock icon.&lt;br /&gt;&lt;br /&gt;At the moment I am planning to release version 1.0 some time in September, but that could change.&lt;br /&gt;&lt;br /&gt;Have fun with the new version of NB!</description><link>http://nifty-box.com/blog/2006/08/new-version-of-nifty-box.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-115548336173204584</guid><pubDate>Sun, 13 Aug 2006 15:27:00 +0000</pubDate><atom:updated>2006-08-13T18:51:52.153+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NiftyBox</category><title>New Design</title><description>Apple's World Wide Developer Conference (WWDC) in San Francisco is over. I have not attented and so I could only get the information, that has been made available to the general public. Judging from the keynote I think Leopard could be great: "time machine" can solve some issues I am facing all the time. It is not a simple "backup" utility, but a backup utility and version control system combined. All that with nice animation magic!&lt;br /&gt;&lt;br /&gt;Unfortunately not much has been said about the future of Spotlight nor of the Finder. I was very curious to see the UI design of the new Finder, because I want Nifty Box to have basically the same look &amp; feel as the Finder. The sad thing is, that the current Finder is not loved by many Mac users, especially the metal skin. As much as I used the current Finder as a blueprint for the UI design of Nifty Box I always wanted to get rid of the metal look as soon as possible.&lt;br /&gt;&lt;br /&gt;For the first commercial release of Nifty Box I will now implement a design which is based on iTunes. This is one thing I have been working on the last couple of days and it is not yet finished, but I like to post a screenshot of how it looks like right now:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nifty-box.com/blog/uploaded_images/newdesign-753538.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://nifty-box.com/blog/uploaded_images/newdesign-742862.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dropping the metal skin and the wide borders makes the look more "light". In addition I also used a smaller font,  so I can show the same amount of information by using less space without making the window too crowded. I hope you like the new design.&lt;br /&gt;&lt;br /&gt;(The iTunes window was done by using the nice PolishedWindow code from &lt;a href="http://mattgemmell.com/"&gt;Matt Gemmel&lt;/a&gt;. Thanks!)</description><link>http://nifty-box.com/blog/2006/08/new-design.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31847778.post-115468434428239654</guid><pubDate>Fri, 04 Aug 2006 09:24:00 +0000</pubDate><atom:updated>2006-08-04T13:59:14.270+02:00</atom:updated><title>My wish for Leopard: a better Spotlight</title><description>Now that Apple's World Wide Developer Conference (WWDC) is about to begin it might be a good time to write down, what I would like for Leopard:&lt;br /&gt;&lt;br /&gt;A better Spotlight!&lt;br /&gt;&lt;br /&gt;One reason I have written &lt;a href="http://nifty-box.com/"&gt;Nifty Box&lt;/a&gt; is, that spotlight currently is only &lt;em&gt;search&lt;/em&gt;. There is no easy way for a user to add own keywords or tags to a file. All metadata, that spotlight uses, is given by the specific application, which is responsible for the specific file (done by application specific spotlight importers).&lt;br /&gt;&lt;br /&gt;On the other hand Tiger not only introduced spotlight but also extended file attributes (xattr). That is great: you can store any metadata you like, for example tags and keywords. But the sad thing is that spotlight in Tiger does not use these metadata! &lt;br /&gt;&lt;br /&gt;If spotlight would read xattr metadata, tags and keywords could be used for all kinds of things, like for example "smart folders". And of course I could improve Nifty Box to export all the tags to xattr for direct use in spotlight.&lt;br /&gt;&lt;br /&gt;Ah, would that be nice!</description><link>http://nifty-box.com/blog/2006/08/my-wish-for-leopard-better-spotlight.html</link><author>noreply@blogger.com (Tim Scheffler)</author></item></channel></rss>