<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.loghound.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.loghound.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2775442515901929510</id><updated>2024-08-31T18:39:56.311+02:00</updated><category term="Houdah"/><category term="Mac"/><category term="Development"/><category term="Cocoa"/><category term="iPhone"/><category term="OffTopic"/><category term="Apple"/><category term="Blog"/><category term="Cocoa-Touch"/><category term="WWDC"/><category term="WebObjects"/><category term="Xcode"/><category term="locr"/><title type='text'>C-OO-ffeine: Get the OO kick!</title><subtitle type='html'>Personal blog of Pierre Bernard, founder of Houdah Software.&#xa;Read here about Cocoa, WebObjects, OO design, ... and of course Houdah Software.</subtitle><link rel='http://schemas.loghound.com/g/2005#feed' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.phpfeeds/posts/default'/><link rel='self' type='application/atom+xml' href='http:///www.bernard-web.com/pierre/blog/index_files/blogRSS.php'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php'/><link rel='hub' href='http://www.bernard-web.com/pierre/blog/index.php'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2775442515901929510/posts/default?start-index=26&amp;max-results=25&amp;orderby=published'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>81</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-5251357275626991146</id><published>2010-05-21T16:36:00.000+02:00</published><updated>2010-05-21T17:26:40.684+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>Key-Value Observing Done Right. Again.</title><content type='html'>I love using KVO for all sorts of things: side-effect, flagging UI as dirty, resetting caches, &amp;hellip;&lt;br /&gt;&lt;br /&gt;Writing the observeValueForKeyPath:ofObject:change:context: method has long since become tedious. So I created a &lt;a href=&quot;http://www.smileonmymac.com/TextExpander/&quot; rel=&quot;external&quot;&gt;TextExpander&lt;/a&gt; snippet to write it for me.&lt;br /&gt;&lt;br /&gt;Still, I don&#39;t quite like it relying of string comparisons (which I use for context). And I regularly find myself forgetting to unregister observers.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.mikeash.com/pyblog/key-value-observing-done-right.html&quot; rel=&quot;external&quot;&gt;Mike Ash wrote a interesting blog post&lt;/a&gt; where he makes a couple of good points against the current KVO API. The most important of which, I think, is the fact unregistering an observer might actually break behavior upon which the superclass relies.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.andymatuschak.org/post/156229939/kvo-blocks-block-callbacks-for-cocoa-observers&quot; rel=&quot;external&quot;&gt;Andy Matuschak has proposed a very convenient API&lt;/a&gt; which uses blocks to handle observation callbacks. While I love this solution, I found it to still have a couple of drawbacks:&lt;br /&gt;&lt;br /&gt;&lt;ul class=&quot;disc&quot;&gt;&lt;li&gt;Andy&#39;s KVO+Blocks requires Mac OS X Snow Leopard. It relies not only on blocks, but also on associated objects and Grand Central Dispatch.&lt;/li&gt;&lt;li&gt;Code is not always easer to read when the callback block is written where it is registered. At times, I would prefer a traget+action setup&lt;/li&gt;&lt;li&gt;KVO+Blocks make it all too easy to create retain cycles: referencing an instance variable from within the block retains the owning object. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Inspired by Mike&#39;s and Andy&#39;s writings and work, I have come up with my own implementation: &lt;a href=&quot;http://www.bernard-web.com/pierre/blog/../code.html&quot; rel=&quot;self&quot; title=&quot;Code&quot;&gt;HHKeyValueObserver&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ul class=&quot;disc&quot;&gt;&lt;li&gt;Works on both Leopard and Snow Leopard. Relies on HHAssociatedObjects&lt;/li&gt;&lt;li&gt;Target action mechanism with the following signatures: actionWithInfo:change: or actionWithInfo:&lt;/li&gt;&lt;li&gt;Uses blocks where available&lt;/li&gt;&lt;li&gt;Unregisters automatically on dealloc of the observer&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Retain cycles may be avoided by referring to the observed object  by the way of observationInfo.observee.&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5251357275626991146' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=5251357275626991146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5251357275626991146'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5251357275626991146'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=5251357275626991146' title='Key-Value Observing Done Right. Again.'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-3048010303190140890</id><published>2010-05-19T10:20:00.000+02:00</published><updated>2010-05-21T16:21:28.183+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HHAssociatedObjects</title><content type='html'>Mac OS X 10.6 introduced associated objects by the means of objc_getAssociatedObject and objc_setAssociatedObject. These provide a very convenient method for attaching object values to random objects. Associated objects can conveniently share the lifespan of the object they are associated with.&lt;br /&gt;&lt;br /&gt;One situation where associated objects come in especially handy is when writing categories. Associated objets may be used be category methods to store state. It&#39;s the closest thing we got to adding instance variables.&lt;br /&gt;&lt;br /&gt;The catch being that many projects still need to support Leopard. HHAssociatedObjects implements the concept of associated objects to support Leopard and Snow Leopard. Where available, the objc_getAssociatedObject and objc_setAssociatedObject methods are used. Elsewhere a NSMapTable is used to store associate objects.&lt;br /&gt;&lt;br /&gt;HHAssociatedObjects are made available as a category on NSObject. I settled on the same API as &lt;a href=&quot;http://github.com/andymatuschak/NSObject-AssociatedObjects&quot; rel=&quot;self&quot;&gt;Andy Matuschak&lt;/a&gt;. On Snow Leopard the implementation is actually the same as Andy&#39;s. &lt;a href=&quot;http://www.bernard-web.com/pierre/blog/../code.html&quot; rel=&quot;self&quot; title=&quot;Code&quot;&gt;HHAssociatedObjects&lt;/a&gt; adds a Leopard compatible implementation.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3048010303190140890' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=3048010303190140890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3048010303190140890'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3048010303190140890'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=3048010303190140890' title='HHAssociatedObjects'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-5461791817760794100</id><published>2010-05-05T22:06:00.000+02:00</published><updated>2010-05-05T22:10:33.101+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HHAutoHidingWindow</title><content type='html'>For the next version of HoudahSpot, I am implementing a window which docks to the side of the screen where it shows and hides as needed. After looking into several implementations, I came up with my own. Seeing this may come in handy to some, I&#39;d like to &lt;a href=&quot;http://www.bernard-web.com/pierre/blog/../code.html&quot; rel=&quot;self&quot; title=&quot;Code&quot;&gt;share this bit of code with you&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;HHSlidingWindow allows for docking a window at an edge of the main screen. From there it may slide in and out of visibility. Its subclass HHAutoHidingWindow&lt;br /&gt;provides automatic showing of the window as the mouse hits the screen edge where the window is hiding. The implementation is actually pretty straightforward.&lt;br /&gt;It relies solely on tracking areas. No polling is done.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5461791817760794100' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=5461791817760794100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5461791817760794100'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5461791817760794100'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=5461791817760794100' title='HHAutoHidingWindow'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-2624434753771423706</id><published>2010-01-12T16:03:00.000+01:00</published><updated>2010-01-12T17:26:10.275+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>Automatically releasing retained @property values</title><content type='html'>I subscribe to the opinion, that setters should not be called in constructors nor in destructors. This negates some of the benefits of @synthesize accessors. Indeed, one needs to keep the dealloc method in sync with the setter semantics. Our dealloc methods thus look like this:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)dealloc&lt;br /&gt;{&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#007400;&quot;&gt;// Retained properties&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;&lt;br /&gt;    [_firstProperty &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;], _firstProperty = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;;&lt;br /&gt;    [_thirdProperty &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;], _thirdProperty = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;;&lt;br /&gt;&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#007400;&quot;&gt;// Assigned properties&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;&lt;br /&gt;    secondProperty = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;;&lt;br /&gt;	&lt;br /&gt;    [&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;dealloc&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This is repetitive and error-prone. Luckily, &lt;a href=&quot;http://www.bernard-web.com/pierre/blog/index_files/../index.php?id=4149840537190438608&quot; rel=&quot;self&quot; title=&quot;Blog:Xcode user script: PropertyFromInstanceVariable&quot;&gt;we may generate&lt;/a&gt; @synthesize instructions as well as destructors.&lt;br /&gt;&lt;br /&gt;The alternative, is to use introspection to dynamically determine how the various properties need to be freed. For this, I suggest a category on NSObject:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@implementation&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; NSObject (PropertyDealloc)&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)deallocProperties&lt;br /&gt;{&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;Class&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; class = [&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; pCount;&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;objc_property_t&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *properties = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;class_copyPropertyList&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(class, &amp;pCount);&lt;br /&gt;	&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; i = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#1C00CF;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;; i &lt; pCount; i++) {&lt;br /&gt;		&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;objc_property_t&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; property = properties[i];&lt;br /&gt;		&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *propertyAttributes = [[[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;alloc&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;] &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;initWithUTF8String&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;property_getAttributes&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(property)] &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;autorelease&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;		&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSArray&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *propertyAttributeArray = [propertyAttributes &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;componentsSeparatedByString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#C41A16;&quot;&gt;@&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;		&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;BOOL&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; isRetained = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;;&lt;br /&gt;		&lt;br /&gt;		&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *string &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; propertyAttributeArray) {&lt;br /&gt;			isRetained = isRetained || [string &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;isEqual&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#C41A16;&quot;&gt;@&quot;&amp;&quot;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;] || [string &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;isEqual&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#C41A16;&quot;&gt;@&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; (isRetained) {&lt;br /&gt;			&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *variableName = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;;&lt;br /&gt;			&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *lastProperty = (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;*)[propertyAttributeArray lastObject];&lt;br /&gt;			&lt;br /&gt;			&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; ([lastProperty &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;hasPrefix&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#C41A16;&quot;&gt;@&quot;V&quot;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;]) {&lt;br /&gt;				variableName = [lastProperty &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;substringFromIndex&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#1C00CF;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;			}&lt;br /&gt;			&lt;br /&gt;			&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; (variableName != &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;) {&lt;br /&gt;				&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;Ivar&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; ivar = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;class_getInstanceVariable&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(class, [variableName &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;UTF8String&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;]);&lt;br /&gt;				&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; value = &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;object_getIvar&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;, ivar);&lt;br /&gt;				&lt;br /&gt;				&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;object_setIvar&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;, ivar, &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;);&lt;br /&gt;				[value &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;free&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(properties);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@end&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Usage is extremely simple:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)dealloc&lt;br /&gt;{&lt;br /&gt;	[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;deallocProperties&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;&lt;br /&gt;    [&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;dealloc&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;This post was inspired by &lt;a href=&quot;http://vgable.com/blog/2008/12/20/automatically-freeing-every-property/&quot; rel=&quot;external&quot;&gt;Vincent Gable&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2624434753771423706' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=2624434753771423706' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2624434753771423706'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2624434753771423706'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=2624434753771423706' title='Automatically releasing retained @property values'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-3060376796429731834</id><published>2009-12-28T22:13:00.000+01:00</published><updated>2009-12-28T22:17:58.423+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>Elephant Back Ride</title><content type='html'>Houdah Software now has an &lt;a href=&quot;http://www.houdah.com/blog&quot; rel=&quot;external&quot;&gt;official blog&lt;/a&gt;. We will discuss news, tips &amp; tricks regarding our Mac &amp; iPhone products: HoudahSpot, HoudahGeo, HoudahGPS, ACTCurrency, ACTPrinter, ACTSudoku, &amp;hellip;&lt;br /&gt;&lt;br /&gt;My personal blog will no longer include product or sale announcements for Houdah Software. It will instead focus on subjects related to software development. I will continue to announce open source code provided by Houdah Software. I may also publish the occasional movie review.&lt;br /&gt;&lt;br /&gt;BTW, you owe it to yourself to go see Avatar. It is spectacular. Though the story may be somewhat predictable, this movie combines spectacular images with some excellent story telling.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3060376796429731834' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=3060376796429731834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3060376796429731834'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3060376796429731834'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=3060376796429731834' title='Elephant Back Ride'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-5916123643580489588</id><published>2009-12-28T12:31:00.000+01:00</published><updated>2009-12-28T12:38:04.936+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>HoudahSpot 2.6</title><content type='html'>&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;HoudahSpot 2.6 improves integration with other applications by the way of Mac OS X services. HoudahSpot itself provides a &quot;BlitzSearch&quot; and a &quot;Search Location&quot; service.&lt;br /&gt;&lt;br /&gt;HoudahSpot 2.6 brings many more enhancements:&lt;br /&gt;&lt;br /&gt;	▪	HoudahSpot 2.6 adds toolbar buttons for &quot;Add ALL Group&quot;, &quot;Add ANY Group&quot; and &quot;Add NONE Group&quot;. &lt;br /&gt;	▪	A &quot;Search Location in HoudahSpot&quot; service is now provided in the Finder as well as in other applications working with files. &lt;br /&gt;	▪	Users may narrow down a search by command-clicking folders in the path control at the bottom of the window. &lt;br /&gt;	▪	The grid view now has a slider to adjust icon size. &lt;br /&gt;	▪	The grid view now provides the same contextual menu as the list view. &lt;br /&gt;	▪	One may now see the MDQuery string passed to Spotlight. &lt;br /&gt;	▪	Clicking a &quot;+&quot; button on a criterion row duplicates the current row. This makes it easier than ever to refine a search. &lt;br /&gt;	▪	HoudahSpot 2.6 improves integration with other applications through Mac OS X services. Services are also available for the contextual menus. &lt;br /&gt;	▪	The BlitzSearch service is now enabled by default under Snow Leopard. &lt;br /&gt;	▪	Result list font size is adjustable and preference is persisted. &lt;br /&gt;	▪	HoudahSpot 2.6 features new toolbar and preferences icons by Lars Herrmann. &lt;br /&gt;	▪	The keyboard shortcut for item deletion has been changed to match other applications. &lt;br /&gt;&lt;br /&gt;For details, have a look at the &lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;&lt;a href=&quot;http://houdah.com/houdahSpot/screencasts.html&quot; rel=&quot;self&quot;&gt;screencast&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5916123643580489588' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=5916123643580489588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5916123643580489588'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=5916123643580489588'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=5916123643580489588' title='HoudahSpot 2.6'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-413418205547513284</id><published>2009-11-18T14:29:00.000+01:00</published><updated>2009-11-18T14:33:40.018+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>MacGraPhoto - A Graphics Applications Bundle</title><content type='html'>&lt;strong&gt;Get 7 great graphics applications for the price of one: $39.99 instead of $251&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;http://www.macgraphoto.com/a/2357&quot; rel=&quot;external&quot;&gt;The MacGraPhoto bundle&lt;/a&gt; allows Mac users to get 7 premium graphics applications for the price of one or even for free. Applications in MacGraPhoto bundle will satisfy most of imaging needs of any Mac user: image editing, applying effects, format conversion, batch processing, vector drawing, geo-tagging photos, framing them or even creating posters and postcards.&lt;br /&gt;&lt;br /&gt;Most Mac bundles lack focus - they collect unrelated applications, and many Mac users usually need only a couple of them. MacGraPhoto bundle is focused exclusively on graphics: it is a hand-picked selection of 7 premium applications from 7 different companies. Most of these applications received Apple &quot;Staff Pick&quot; or Apple Design Award.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=413418205547513284' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=413418205547513284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=413418205547513284'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=413418205547513284'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=413418205547513284' title='MacGraPhoto - A Graphics Applications Bundle'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-4158543115568698374</id><published>2009-11-09T17:43:00.000+01:00</published><updated>2009-11-09T17:47:30.429+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>One Finger Discount</title><content type='html'>&lt;a href=&quot;http://www.onefingerdiscount.com/&quot; rel=&quot;external&quot;&gt;One Finger Discount&lt;/a&gt; is a promotion inspired by the current MacHeist nanoBundle that is running for the rest of the week, offering a discount of 20%, or one fifth, the full price of the software. It is being run by Daniel Jalkut of &lt;a href=&quot;http://www.red-sweater.com/store/&quot; rel=&quot;external&quot;&gt;Red Sweater Software&lt;/a&gt;, developer of MarsEdit and more.&lt;br /&gt;&lt;img class=&quot;imageStyle&quot; alt=&quot;One_Finger_Discount!-20091109-133640&quot; src=&quot;http://www.bernard-web.com/pierre/blog/index_files/one_finger_discount0021-20091109-133640.jpg&quot; width=&quot;465&quot; height=&quot;167&quot;/&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4158543115568698374' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4158543115568698374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4158543115568698374'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4158543115568698374'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4158543115568698374' title='One Finger Discount'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-6575295706567609355</id><published>2009-11-09T11:46:00.000+01:00</published><updated>2009-11-09T11:48:23.449+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>TheMacSale 2 features HoudahGeo</title><content type='html'>Get 10 great Mac applications for only $49.99 at &lt;a href=&quot;http://www.themacsale.com/&quot; rel=&quot;external&quot;&gt;themacsale.com&lt;/a&gt;. The bundle includes HoudahGeo (regular single-user license).</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6575295706567609355' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6575295706567609355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6575295706567609355'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6575295706567609355'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6575295706567609355' title='TheMacSale 2 features HoudahGeo'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-4459210161410272583</id><published>2009-10-10T12:39:00.000+02:00</published><updated>2009-10-10T12:40:53.527+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HHDualShortcutButton updated</title><content type='html'>&lt;a href=&quot;http://www.bernard-web.com/pierre/blog/../code.html&quot; rel=&quot;self&quot; title=&quot;Code&quot;&gt;HHDualShortcutButton&lt;/a&gt; has been updated to be Cocoa only. No more Carbon code!&lt;br /&gt;&lt;br /&gt;This makes it require Mac OS X 10.6 Snow Leopard.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4459210161410272583' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4459210161410272583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4459210161410272583'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4459210161410272583'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4459210161410272583' title='HHDualShortcutButton updated'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-411398312562151389</id><published>2009-10-09T22:25:00.000+02:00</published><updated>2009-10-09T22:26:56.204+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>Sample use of HHBlockPerform</title><content type='html'>&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;HHPerformBlock SetterBlock(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; inValue, &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSString&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; *inKey)&lt;br /&gt;{&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; block = ^(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; owner) {&lt;br /&gt;		[owner &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;willChangeValueForKey&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:inKey];&lt;br /&gt;		[owner &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;associateValue&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:inValue &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;withKey&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:inKey];&lt;br /&gt;		[owner &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;didChangeValueForKey&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:inKey];&lt;br /&gt;	};&lt;br /&gt;	&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; [[block &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;] &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;autorelease&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ... */&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSNumber&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;*)progressMinValue&lt;br /&gt;{&lt;br /&gt;	&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; [&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;associatedValueForKey&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#C41A16;&quot;&gt;@&quot;progressMinValue&quot;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)setProgressMinValue:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSNumber&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;*)inValue&lt;br /&gt;{&lt;br /&gt;	[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;performOnMainThreadWait&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;SetterBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(inValue, &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#C41A16;&quot;&gt;@&quot;progressMinValue&quot;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)];&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=411398312562151389' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=411398312562151389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=411398312562151389'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=411398312562151389'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=411398312562151389' title='Sample use of HHBlockPerform'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-6060765346500617336</id><published>2009-10-09T00:14:00.000+02:00</published><updated>2009-10-09T22:26:55.521+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HHBlockPerform revisited</title><content type='html'>The first post on the subject prompted &lt;a href=&quot;http://www.blogger.com/profile/03207242334355510477&quot; rel=&quot;external&quot;&gt;Ben&lt;/a&gt; to comment: &quot;&lt;span style=&quot;font:12px HelveticaNeue; &quot;&gt;Helpful tip: Just capture the object being messaged using the block&#39;s scope. No need for the extra &quot;owner&quot; parameters and whatnot.&quot; Right he is.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; (^&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@interface&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; NSObject (HHBlockPerform)&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)performAfterDelay:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSTimeInterval&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)delay block:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)performOnMainThreadWait:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;BOOL&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)wait block:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@end&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@implementation&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; NSObject (HHBlockPerform)&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)performAfterDelay:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSTimeInterval&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)delay block:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block&lt;br /&gt;{&lt;br /&gt;	[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;performSelector&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;runBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:) &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;withObject&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:[block &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;] &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;afterDelay&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:delay];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)performOnMainThreadWait:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;BOOL&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)wait block:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block&lt;br /&gt;{&lt;br /&gt;	[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;performSelectorOnMainThread&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;runBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:) &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;withObject&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:[block &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;] &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;waitUntilDone&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:wait];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)runBlock:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block&lt;br /&gt;{&lt;br /&gt;	block();&lt;br /&gt;	&lt;br /&gt;	[block &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;It does not get any simpler than this:&lt;br /&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;	[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;performAfterDelay&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#1C00CF;&quot;&gt;0.2f&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:^ {&lt;br /&gt;		[containerView &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;replaceSubview&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:currentNavigationBarView &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:navigationBarView];&lt;br /&gt;	}];&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;[UPDATE October9, 2009]&lt;/strong&gt; While I agree that the (id owner) argument is not strictly necessary&lt;span style=&quot;font:12px HelveticaNeue; &quot;&gt;, I do prefer that API and will keep using it. Indeed, it allows for reusable blocks which refer to owner much like you would refer to self in the delyed method call.&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6060765346500617336' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6060765346500617336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6060765346500617336'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6060765346500617336'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6060765346500617336' title='HHBlockPerform revisited'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-4149840537190438608</id><published>2009-09-20T21:14:00.000+02:00</published><updated>2009-10-09T00:32:37.383+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><title type='text'>Xcode user script: PropertyFromInstanceVariable</title><content type='html'>Wrote some Perl today. No, I don&#39;t know Perl. Turns out it is good at handling strings.&lt;br /&gt;&lt;br /&gt;I stumbled upon a &lt;a href=&quot;http://cocoawithlove.com/2008/12/instance-variable-to-synthesized.html&quot; rel=&quot;external&quot;&gt;blog post on Cocoa with Love&lt;/a&gt;. Matt Gallagher has devised this excellent Xcode user script to generate @property declarations and @synthesize statements from variable declarations. This is triple great:&lt;br /&gt;&lt;br /&gt;1. The script will save me quite some typing&lt;br /&gt;2. I had never noticed the Xcode script menu&lt;br /&gt;3. Matt found a nifty way around limitations of those user scripts&lt;br /&gt;&lt;br /&gt;So I grabbed the script. Installed it. Then I figured, I could improve upon the existing script. My changes include:&lt;br /&gt;&lt;br /&gt;1. Generates the necessary statements in the dealloc method&lt;br /&gt;2. Detects variable types and tries to be smart about setter semantics&lt;br /&gt;3. Supports underbar variable names&lt;br /&gt;&lt;br /&gt;Shortly after I had published my version of the code to &lt;a href=&quot;http://www.bernard-web.com/pierre/blog/../code.html&quot; rel=&quot;self&quot; title=&quot;Code&quot;&gt;my own Code page&lt;/a&gt;, Mike Schrag pointed me to &lt;a href=&quot;http://github.com/mschrag/xcode_property_from_ivar&quot; rel=&quot;external&quot;&gt;his forked version&lt;/a&gt; of Matt&#39;s script. He had made many of the same enhancements. Moreover he had taught the script to handle multiple varaibles in one pass.&lt;br /&gt;&lt;br /&gt;Merging my version and Mike&#39;s I created my &lt;a href=&quot;http://github.com/gloubibou/xcode_property_from_ivar&quot; rel=&quot;external&quot;&gt;very first project on github&lt;/a&gt;. The new version improves on Mike&#39;s by reducing the number of calls to AppleScript. It retains all my previous enhancements. And hopefully also retains Mike&#39;s changes. It is available on &lt;a href=&quot;http://github.com/gloubibou/xcode_property_from_ivar&quot; rel=&quot;external&quot;&gt;github&lt;/a&gt;, as well as on &lt;a href=&quot;http://www.bernard-web.com/pierre/blog/../code.html&quot; rel=&quot;self&quot; title=&quot;Code&quot;&gt;my own Code page&lt;/a&gt;. Enjoy!</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4149840537190438608' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4149840537190438608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4149840537190438608'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4149840537190438608'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4149840537190438608' title='Xcode user script: PropertyFromInstanceVariable'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-6823819694274854233</id><published>2009-09-15T16:53:00.000+02:00</published><updated>2009-10-09T00:32:36.605+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>NSObject (HHBlockPerform): delayed block executions</title><content type='html'>&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; (^&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; owner);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@interface&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; NSObject (HHBlockPerform)&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)performAfterDelay:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSTimeInterval&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)delay block:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@end&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;&lt;br /&gt;&lt;br /&gt;@implementation&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; NSObject (HHBlockPerform)&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)performAfterDelay:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#5C2699;&quot;&gt;NSTimeInterval&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)delay block:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block&lt;br /&gt;{&lt;br /&gt;	[&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt; &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;performSelector&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#26474B;&quot;&gt;runBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:) &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;withObject&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:[block &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;] &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;afterDelay&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;:delay];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)runBlock:(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#3F6E74;&quot;&gt;HHPerformBlock&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;)block&lt;br /&gt;{&lt;br /&gt;	block(&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;);&lt;br /&gt;	&lt;br /&gt;	[block &lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#2E0D6E;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; &quot;&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:11px Menlo-Regular; color:#AA0D91;&quot;&gt;@end&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6823819694274854233' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6823819694274854233' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6823819694274854233'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6823819694274854233'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6823819694274854233' title='NSObject (HHBlockPerform): delayed block executions'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-6542976061063123843</id><published>2009-08-23T12:21:00.000+02:00</published><updated>2009-10-09T00:32:35.561+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HHValidatedButton: User interface validation for NSButton</title><content type='html'>According to the &lt;a href=&quot;http://developer.apple.com/documentation/Cocoa/Conceptual/UIValidation/UIValidation.html&quot; rel=&quot;external&quot;&gt;Cocoa User Interface Validation documentation&lt;/a&gt;: &quot;The protocols NSUserInterfaceValidations and NSValidatedUserInterfaceItem provide a standard way to validate user interface items&amp;mdash;that is, to set their state as appropriate for the current application context&quot;.&lt;br /&gt;&lt;br /&gt;Unfortunately, automatic user intreface validation is provided only for menu items and toolbar items. Wouldn&#39;t it be great if NSButton could also benefit from this set-up?&lt;br /&gt;&lt;br /&gt;That&#39;s what &lt;a href=&quot;http://www.bernard-web.com/pierre/code_assets/HHValidatedButton.zip&quot; rel=&quot;self&quot;&gt;HHValidatedButton&lt;/a&gt; implements. It is a drop-in subclass of NSButton. It channels validation through &lt;em&gt;validateButton:&lt;/em&gt; and &lt;em&gt;validateUserInterfaceItem:&lt;/em&gt;.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6542976061063123843' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6542976061063123843' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6542976061063123843'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=6542976061063123843'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=6542976061063123843' title='HHValidatedButton: User interface validation for NSButton'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-8041619064683967192</id><published>2009-08-23T12:19:00.000+02:00</published><updated>2009-10-09T00:32:34.970+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>theMacSale is coming to an end</title><content type='html'>Only two more days left to get HoudahSpot in a bundle of excellent applications valued at $450. Get them for only $49.99 at &lt;a href=&quot;http://www.themacsale.com/&quot; rel=&quot;external&quot;&gt;themacsale.com&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=8041619064683967192' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=8041619064683967192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=8041619064683967192'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=8041619064683967192'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=8041619064683967192' title='theMacSale is coming to an end'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-733689823592497212</id><published>2009-05-29T23:31:00.000+02:00</published><updated>2009-10-09T00:32:33.923+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa-Touch"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="locr"/><title type='text'>ObjectiveLocr 2.0 released</title><content type='html'>&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;&lt;a href=&quot;http://code.google.com/p/objectivelocr&quot; rel=&quot;self&quot;&gt;This project&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt; is based off the &lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;&lt;a href=&quot;http://code.google.com/p/objectiveflickr/&quot; rel=&quot;external&quot;&gt;objectiveflickr&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt; project by Lukhnos D. Liu. Most of the credit goes to him!&lt;br /&gt;&lt;br /&gt;Please refer to the objectiveflickr for framework documentation and to the locr.com web site for API documentation.&lt;br /&gt;&lt;br /&gt;ObjectiveLocr is used by &lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;&lt;a href=&quot;http://www.houdah.com/houdahGeo&quot; rel=&quot;self&quot;&gt;HoudahGeo (Mac photo geotagging)&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;&lt;a href=&quot;http://www.houdah.com/iPhone&quot; rel=&quot;self&quot;&gt;locrUpload (locr upload client for iPhone)&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt; and &lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;&lt;a href=&quot;http://www.houdah.com/iPhone&quot; rel=&quot;self&quot;&gt;locrExplorer (full-featured locr client for iPhone)&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=733689823592497212' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=733689823592497212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=733689823592497212'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=733689823592497212'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=733689823592497212' title='ObjectiveLocr 2.0 released'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-2698007074774128889</id><published>2009-04-22T22:40:00.000+02:00</published><updated>2009-10-09T00:32:33.020+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>Extensive HoudahGeo review</title><content type='html'>Klaus Me&amp;szlig;linger has written an &lt;a href=&quot;http://studio.messlinger.com/2009/04/22/geotagging-and-the-mac-4-houdahgeo/&quot; rel=&quot;external&quot;&gt;extensive review and walkthrough&lt;/a&gt; of HoudahGeo on his Mac photography web site.</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2698007074774128889' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=2698007074774128889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2698007074774128889'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2698007074774128889'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=2698007074774128889' title='Extensive HoudahGeo review'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-4250627212487819882</id><published>2009-03-26T00:43:00.000+01:00</published><updated>2009-10-09T00:32:32.368+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa-Touch"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><title type='text'>Houdah iPhone Properties</title><content type='html'>&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;I just &lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;&lt;a href=&quot;http://code.google.com/p/houdah-iphone-properties/&quot; rel=&quot;external&quot;&gt;open-sourced&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt; a couple of classes to simplify working with UITableViewControllers to create property editing interfaces.&lt;br /&gt;The controllers and views of this project may be used to easily create interfaces much like Apple&#39;s Settings applications. They make up most of the UI of the free &lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; color:#0013C6;&quot;&gt;&lt;u&gt;&lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=307805480&amp;mt=8&quot;&gt;LocrUpload application&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;font:13px Arial, Verdana, Helvetica, sans-serif; &quot;&gt;.&lt;br /&gt;The PropertiesViewController may be used to modify attributes of any key-value-coding compliant container. Typically a container would be a NSMutableDictionary or a NSUserDefaults instance.&lt;br /&gt;The controller is typically configured in a subclass by providing a set of descriptors. Descriptors are immutable objects describe the properties to expose and the UI elements (text field, switch, ...) to use. Seeing that descriptors are immutable, it should be easy to store them in a file rather than building them in code.&lt;br /&gt;The SelectionViewController is used by the PropertiesViewController for multiple choice values.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4250627212487819882' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4250627212487819882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4250627212487819882'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4250627212487819882'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4250627212487819882' title='Houdah iPhone Properties'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-2993039541528680663</id><published>2009-03-24T16:58:00.000+01:00</published><updated>2009-10-09T00:32:31.439+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HoudahGeo 2.2 BETA 1</title><content type='html'>&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; &quot;&gt;HoudahGeo 2.2 shapes up to by another major release for HoudahGeo. Indeed HoudahGeo 2.2 will revolutionize the geocoding workflow for iPhoto &#39;09 users.&lt;br /&gt;&lt;br /&gt;HoudahGeo 2.2 tightens the integration with iPhoto &#39;09 by being able to write metadata back to the iPhoto database. (Obviously it is recommended to have a current backup of the database.) Integration with iPhoto is now completely seamless: HoudahGeo offers a view of the iPhoto database to start off the workflow. At the end of the workflow iPhoto&#39;s Places will feature the freshly geocoded images.&lt;br /&gt;&lt;br /&gt;HoudahGeo 2.2 also fixes all outstanding bugs related to manual geocoding using Google Earth.&lt;br /&gt;&lt;br /&gt;Moreover the current beta already includes various fixes for minor bugs. As the development progresses, more features are expected to make the cut for the final release of HoudahGeo 2.2. Watch this thread for announcements of further beta releases.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0016E7;&quot;&gt;&lt;u&gt;&lt;a href=&quot;http://www.houdah.com/houdahGeo/download_assets/HoudahGeo%2022b1.zip&quot;&gt;Download HoudahGeo 2.2 beta 1.&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2993039541528680663' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=2993039541528680663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2993039541528680663'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=2993039541528680663'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=2993039541528680663' title='HoudahGeo 2.2 BETA 1'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-4144410509307095533</id><published>2009-03-23T19:50:00.000+01:00</published><updated>2009-10-09T00:32:30.632+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><title type='text'>LocrUpload for iPhone</title><content type='html'>Apple has finally given LocrUpload for iPhone its blessing.&lt;br /&gt;&lt;br /&gt;LocrUpload allows you to share your iPhoto photos on the locr.com community. locr is more than a photo sharing community. In addition to a free account, innovative software and an international community, locr.com makes it possible to tag your photos with location information and geodata anywhere in the world.&lt;br /&gt;&lt;br /&gt;I discovered locr when I was asked to add locr upload capabilities to HoudahGeo. locr integration is now available in HoudahGeo 2.1 or later as well as in the freeware HoudahGeo LE (Locr Edition).&lt;br /&gt;&lt;br /&gt;While HoudahGeo is a commercial product, LocrUpload for iPhone is ad-free freeware. I don&#39;t make any money of it. It is simply a product I wanted to exist. Combined the iPhone and locr make a great set-up to share geocoded photos while on the go. I foresee myself frequently sharing the occasional snapshot.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=307805480&amp;mt=8&quot; rel=&quot;self&quot;&gt;Get LocrUpload for FREE&lt;/a&gt; from the iTunes AppStore.&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4144410509307095533' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4144410509307095533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4144410509307095533'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=4144410509307095533'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=4144410509307095533' title='LocrUpload for iPhone'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-3893154946196327850</id><published>2009-02-20T21:44:00.000+01:00</published><updated>2009-10-09T00:32:29.743+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HoudahGeo updates</title><content type='html'>&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;Seems like I forgot to blog the recent updates to HoudahGeo.&lt;br /&gt;HoudahGeo indeed saw two major updates. HoudahGeo 2.0 was a big step taken just in time for a Macworld Expo release. It brought a truckload of enhancements:&lt;br /&gt;	▪	Enhanced time zone support&lt;br /&gt;	▪	Extended GPS device support&lt;br /&gt;	▪	Access to Aperture masters&lt;br /&gt;	▪	Access to iPhoto originals&lt;br /&gt;	▪	Lightroom 2 integration&lt;br /&gt;	▪	Waypoint geocoding&lt;br /&gt;	▪	Improved reverse geocoding&lt;br /&gt;	▪	Map inspector panel&lt;br /&gt;	▪	Track log inspector panel&lt;br /&gt;	▪	Flickr sets support&lt;br /&gt;	▪	...&lt;br /&gt;&lt;br /&gt;HoudahGeo 2.1 brings integration with &lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;&lt;a href=&quot;http://www.locr.com&quot; rel=&quot;external&quot;&gt;locr.com&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt; and &lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;&lt;a href=&quot;http://www.cdfinder.de&quot; rel=&quot;self&quot;&gt;CDFinder&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;. It is now possible to upload photos directly from HoudahGeo to locr. There photos may be viewed in context with location descriptions and similar photos.&lt;br /&gt;HoudahGeo 2.1 also added a number of smaller refinements including a contextual menu.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3893154946196327850' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=3893154946196327850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3893154946196327850'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=3893154946196327850'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=3893154946196327850' title='HoudahGeo updates'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-7320758719329671564</id><published>2009-02-20T21:43:00.001+01:00</published><updated>2009-10-09T00:32:29.132+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>Geotagging via the iPhone 3G</title><content type='html'>&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt;Don McAllister of shows how to combine &lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#AA441C;&quot;&gt;&lt;u&gt;&lt;a href=&quot;http://trails.lamouroux.de//&quot;&gt;Trails on iPhone&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt; with HoudahGeo to create a low budget geotagging solution to make the most of iPhoto&#39;s Places feature.&lt;br /&gt;Don went out on a mini ScreenCastsOnline roadrip to take some photos of two famous Liverpool landmarks. In &lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#AA441C;&quot;&gt;&lt;u&gt;&lt;a href=&quot;http://www.screencastsonline.com/index_files/SCO0186-iphonegeo.php&quot;&gt;episode SCO0186&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; color:#0F0532;&quot;&gt; he takes you through the complete process from start to finish demonstrating Trails, HoudahGeo and iPhoto &#39;09.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=7320758719329671564' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=7320758719329671564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=7320758719329671564'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=7320758719329671564'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=7320758719329671564' title='Geotagging via the iPhone 3G'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-8539927081134115040</id><published>2009-02-03T19:22:00.000+01:00</published><updated>2009-02-03T19:26:09.930+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>Best month ever for Houdah Software</title><content type='html'>Houdah Software just had its best month ever in Mac software sales. iPhone sales were not too shabby either.&lt;br /&gt;&lt;br /&gt;The HoudahGeo/HoudahSpot mix is a reversal from the previous trend with HoudahGeo taking the lead. This is most likely due to the release of HoudahGeo 2.0, as well as the renewed interest in geocoding spurred by iPhoto &#39;09&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=8539927081134115040' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=8539927081134115040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=8539927081134115040'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=8539927081134115040'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=8539927081134115040' title='Best month ever for Houdah Software'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2775442515901929510.post-1262691217588153454</id><published>2009-01-02T13:43:00.000+01:00</published><updated>2009-10-09T00:32:28.564+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Houdah"/><title type='text'>See you at Macworld San Francisco</title><content type='html'>&lt;p style=&quot;text-align:justify;&quot;&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; &quot;&gt;Drop by and pay us a visit at booth 3526-A at the Special Interest Pavilion in North Hall. The first 100 visitors to visit the &lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; &quot;&gt;&lt;a href=&quot;http://rcsreg.com/macworld/RFC31180&quot; rel=&quot;external&quot;&gt;Macworld Attendee Registration page&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font:12px &amp;#39;Lucida Grande&amp;#39;, LucidaGrande, Verdana, sans-serif; &quot;&gt; may claim FREE (a $25 value) show floor passes on us.&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=1262691217588153454' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=1262691217588153454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=1262691217588153454'/><link rel='self' type='application/atom+xml' href='http://www.bernard-web.com/pierre/blog/index.php?id=1262691217588153454'/><link rel='alternate' type='text/html' href='http://www.bernard-web.com/pierre/blog/index.php?id=1262691217588153454' title='See you at Macworld San Francisco'/><author><name>Pierre Bernard</name><uri>http://www.blogger.com/profile/13131344793591803790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.loghound.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>