<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>The ideas from BinaryAge</title>
    <link href="https://blog.binaryage.com/atom.xml" rel="self"/>
    <link href="https://blog.binaryage.com"/>
    <updated>2025-12-06T23:22:43+00:00</updated>
    <id>https://blog.binaryage.com/</id>
    
    <entry>
        <title><![CDATA[The future of TotalFinder and TotalSpaces]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-totalspaces-future/"/>
        <updated>2021-01-10T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-totalspaces-future</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" /></p>

<h4 id="from-snow-leopard-to-big-sur">From Snow Leopard to Big Sur</h4>

<p>An early version of TotalFinder was first released in November 2009 during the golden days of Snow Leopard. Although many still remember that operating system with fondness, the Finder implementation of the time was ripe for improvement. We think that TotalFinder was able to really make a difference in the usability of Finder, and we found there was a great deal of support for it.</p>

<p>In April 2012 we released TotalSpaces for macOS Lion, since the grid spaces functionality that we absolutely loved was removed by Apple after the Snow Leopard release. We were able to replace that functionality, and add some configurability and improvements of our own.</p>

<p>As time went by, we continued to develop these products and support them. Amazingly, TotalFinder has been available for over 11 years, and TotalSpaces for almost 9 years.</p>

<p>Over the years Apple has erected many obstacles, the most important of which was their “rootless” implementation, System Integrity Protection. This prevented modification of the system software, and had to be turned off for the installation or running of our products. Turning SIP off was uncomfortable to do (requiring two reboots), and uncomfortable for us to recommend.</p>

<p>Also notable was that Apple to some extent “Sherlocked” TotalFinder by implementing their own tabs implementation in Finder. We found that some people preferred the TotalFinder tabs, but this did reduce the relevance of TotalFinder to many people.</p>

<h3 id="what-now">What now?</h3>

<p>At the end of <a href="https://blog.binaryage.com/sip-and-mojave/">this post from 2018</a> we noted that TotalFinder and TotalSpaces2 have had a good run, but it is certainly becoming more difficult to support these products. This is due to the additional protections Apple are adding, the changing technology, and more generally the lack of Apple provided APIs to do the kind of system modifications that our customers want.</p>

<p>At that time we promised to support the products during the lifetime of Mojave. As it happened, we did better - we continued to make releases in 2019 and 2020, bringing support to Catalina and now to Big Sur.</p>

<p>However, the support in Big Sur is imperfect, and we are not able to support Apple Silicon macs at all.</p>

<p>So we have to admit that it’s the end of the road for TotalFinder and TotalSpaces2. <strong>We will not work on making TotalFinder or TotalSpaces2 work with the next version of macOS, and they will not be ported to Apple Silicon macs.</strong></p>

<p>We will continue to provide limited support TotalFinder and TotalSpaces2 until the end of 2021. We will cease selling new licenses in the summer.</p>

<p>It is unlikely we will make these apps open source. Interested persons may want to look at <a href="https://github.com/koekeishiya/yabai">Yabai</a> which uses some of the same APIs that TotalSpaces2 does (and I believe early on reversed some TotalSpaces2 code - we don’t mind!). It also uses a similar code injection mechanism to TotalFinder and TotalSpaces.</p>

<p>Also Aditya Vaidyam independently discovered some important APIs we use, <a href="https://avaidyam.github.io">documented here</a>.</p>

<p>Finally I’d like to mention and credit that the original reversing of the Core Graphics APIs was <a href="https://bitbucket.org/rjw57/desktopmanager/src/master/">done by Richard J Wareham</a>, and something may still be learned from this code.</p>

<h3 id="totalspaces3">TotalSpaces3</h3>

<p>It’s not all bad news! For a while now we have been working on a new version of TotalSpaces, TotalSpaces3.
This version will work without modifying the system, and works with SIP enabled. It is a significant challenge to achieve an equivalent experience without the level of access that code injection provided us, but we believe it will be more than usable.</p>

<p>It is intended for Apple Silicon macs only (at this time), and is currently in private alpha testing. We don’t have any release timetable set at the moment, but we will make announcements at the appropriate time.</p>

<h3 id="11-years-of-binaryage">11 years of BinaryAge</h3>

<p>We like to think that we have achieved much during the lifetime of BinaryAge, including the release of various free utilities as well as our paid apps, we have found ways around all kinds of macOS technical roadblocks, and we hope we have helped with the productivity of our users.</p>

<p>BinaryAge is not going anywhere. TotalSpaces3 is coming, and we may continue release new products and utilities in the future.</p>

<p>Although these days BinaryAge is a side project for Antonin and I, we hope we can continue to provide good products and service for our customers - and who knows what the future will bring.</p>

<p>Wishing you a safe and prosperous 2021.</p>

<p>Stephen (and Antonin)</p>
]]></content>
        <author>
            <name>Stephen</name>
            <uri>mailto:stephen@binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Running TotalFinder and TotalSpaces2 on Mojave]]></title>
        
        <link href="https://blog.binaryage.com//sip-and-mojave/"/>
        <updated>2018-09-23T00:00:00+00:00</updated>
        <id>jduff.github.com:/sip-and-mojave</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" /></p>

<h4 id="from-sierra-and-high-sierra-to-mojave">From Sierra and High Sierra to Mojave</h4>

<p>In <a href="https://blog.binaryage.com/sip-and-installing-total-apps/">this post from 2017</a> we talked about how we found a way to run our apps TotalFinder and TotalSpaces2 with System Integrity Protection (SIP) turned on. This was possible because the installation process would install our plugin components in trusted locations whilst SIP was turned off, allowing the user to turn SIP back on again after installation.</p>

<p>Unfortunately, with macOS 10.14 Mojave this is no longer the case - Apple have changed their verification code so that our plugin cannot possibly work with SIP turned on even if it is installed in the trusted locations that worked before.</p>

<p><strong>This means that in order to run our apps on macOS Mojave you have to keep SIP turned off.</strong></p>

<p>We know this is disappointing, and that some people will not want to do this.</p>

<p><strong>Your machine may be less secure when System Integrity Protection is not running. It is entirely your decision to modify or temporarily modify the settings.</strong></p>

<p>If you want more information about SIP, <a href="https://en.wikipedia.org/wiki/System_Integrity_Protection">see wikipedia</a>. Apple also provided <a href="https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/Introduction/Introduction.html">some information here</a>.</p>

<p>We provide updated instructions on how to install <a href="https://totalfinder.binaryage.com/sip">TotalFinder here</a> and <a href="https://totalspaces.binaryage.com/installing-mojave">TotalSpaces2 here</a>.</p>

<h4 id="technical-details">Technical details</h4>

<p>In Mojave Apple added additional signature checks for injected code. This means that our plugins won’t load unless we can sign them with an Apple certificate, and as we aren’t Apple we don’t have that certificate. There isn’t really any way around this, and we can only tell you how to get around the protection by disabling SIP.</p>

<p>In fact, TotalFinder and TotalSpaces2 can work with only the debug and file system protections turned off, and advanced users may want to use this command in the terminal in recovery mode:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>csrutil enable --without debug --without fs
</code></pre></div></div>

<p>The system will complain that this is an unsupported configuration though, and we cannot know if a future update will break it.</p>

<h4 id="what-next">What next?</h4>

<p>TotalFinder and TotalSpaces2 have had a good run, but it is certainly becoming more difficult to support these products. This is due to the additional protections Apple are adding, the changing technology (particularly increasing use of Swift which is harder to integrate with than Objective C), and more generally the lack of Apple provided APIs to do the kind of system modifications that our customers want.</p>

<p>We will keep supporting both products for the lifetime of macOS 10.14 Mojave, but there may well be a future release - perhaps 10.15 next year, perhaps later - that we cannot work with at all. But for now, if you wish to run TotalFinder or TotalSpaces2, we will do our best to make things work for you.</p>
]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>mailto:stephen@binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[SIP and installing BinaryAge apps]]></title>
        
        <link href="https://blog.binaryage.com//sip-and-installing-total-apps/"/>
        <updated>2017-03-19T00:00:00+00:00</updated>
        <id>jduff.github.com:/sip-and-installing-total-apps</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" /></p>

<h4 id="from-el-capitan-to-here">From El Capitan to here</h4>

<p>In 2015 we realised that System Integrity Protection would stop TotalFinder and TotalSpaces2 working on normally configured Macs. At the time, we felt that this would <a href="https://blog.binaryage.com/el-capitan-update/">mean the end of those products as general consumer products</a>.</p>

<p>However, it is clear that although we don’t see the sales we used to have, there is still strong support for these products. There remains a market for tools that improve the workflow and usability of your system.</p>

<h4 id="a-chink-of-light">A chink of light</h4>

<p>One request we often hear is to allow TotalFinder and TotalSpaces2 to be installed so that they can run with System Integrity Protection (SIP) turned on. And in fact we discovered that this is possibe - we have earlier advised anyone who asked to go through a complex process to <a href="https://totalfinder.binaryage.com/system-osax">install our plugin component in a special system location</a> so that the apps could run on a normally configured Mac.</p>

<p>Having realised we could do this, we wanted to give this option to everyone. We have made it simpler, and in fact, from now on it will be the default method of installation.</p>

<h4 id="totalfinder-and-totalspaces2-with-sip-turned-on">TotalFinder and TotalSpaces2 with SIP turned on</h4>

<p>The installation process for our apps will be as follows:</p>

<ol>
  <li>Reboot into recovery mode (hold cmd-R during reboot).</li>
  <li>Go to utilities-&gt;terminal, type csrutil disable, and reboot.</li>
  <li>Install TotalSpaces2 and/or TotalFinder and run the app(s),</li>
  <li>(Optional) Reboot into recovery mode (hold cmd-R during reboot).</li>
  <li>(Optional) Go to utilities-&gt;terminal, type csrutil enable, and reboot.</li>
</ol>

<p>So before installing our apps, turn SIP off, Then once the apps are installed you are free to turn SIP back on.</p>

<p>This new installation method is supported from <a href="https://totalfinder.binaryage.com/beta-changes">TotalFinder v1.9.0</a> and <a href="https://totalspaces.binaryage.com/changes-beta">TotalSpaces2 v2.5.4</a>.</p>

<p>If you are upgrading from a previous version, everything will continue to work normally. But in order to turn SIP fully on, you must go through the above process.</p>

<p>You can find more information <a href="https://totalfinder.binaryage.com/sip">here for TotalFinder</a>, and <a href="https://totalspaces.binaryage.com/sipsettings">here for TotalSpaces2.</a></p>

<h4 id="technical-details">Technical details</h4>

<p>Both TotalFinder and TotalSpaces2 have a plugin component that lives in /Library/ScriptingAdditions. As a normal user you can allow writing that component there if you allow adminstrator access.</p>

<p>However, plugins in that location cannot be loaded by OSX/MacOS with System Integrity Protection fully turned on.</p>

<p>It turns out there is another location, /System/Library/ScriptingAdditions from where the system <em>will</em> load plugins even with SIP turned on. However, SIP must be turned off in order to be able to write the plugin there in the first place.</p>

<p>We are changing to using this system location as our primary pluign location. So, for installation, turn SIP off, install and run the apps, then you may freely turn SIP back on.</p>

<h4 id="risks">Risks</h4>

<p>Apple “own” the system locations in your file system, and it is entirely possible that they could remove our plugin components during a software update. If this happens, you would need to turn SIP off again in order for the plugin to be re-installed. We don’t think this will happen, but you never know.</p>

<p>If we have to update our plugin component, this would also require SIP changes, but we are aiming to keep the component stable across many releases.</p>

<h4 id="final-words">Final words</h4>

<p>Both <a href="https://totalfinder.binaryage.com/beta-changes">TotalFinder</a> and <a href="https://totalspaces.binaryage.com/changes-beta">TotalSpaces2</a> have a number of other improvements in this release, so it should be worth upgrading. <strong>We are pushing the new binaries out to our pre-release testers today</strong>, and to all users soon if everything seems fine. Let us know if you have any problems!</p>

]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>mailto:stephen@binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[BinaryAge moves ahead in 2017]]></title>
        
        <link href="https://blog.binaryage.com//binaryage-moves-ahead/"/>
        <updated>2017-01-10T00:00:00+00:00</updated>
        <id>jduff.github.com:/binaryage-moves-ahead</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" style="clear: both" /></p>

<p>In 2016 <a href="/meet-steve-the-new-lead/">Steve joined the efforts on TotalFinder and TotalSpaces</a>. Alas Steve has now moved on to other projects, so Antonin and Stephen are returning to lead <a href="https://totalfinder.binaryage.com">TotalFinder</a> and <a href="https://totalspaces.binaryage.com">TotalSpaces2</a> respectively. Thanks to Steve for his efforts!</p>

<h4 id="the-future">The future</h4>
<p>Although Apple implemented <a href="https://en.wikipedia.org/wiki/System_Integrity_Protection">System Integrity Protection</a> making it difficult to install apps like TotalFinder and TotalSpaces, we have found that there is still a market for tools that improve the workflow and usability of your system.</p>

<p>It’s true that we don’t have as many users as earlier, but there are plenty of people who love what we do. So, as long as it is possible and makes sense to do so, we intend to support these apps.</p>

<p><br style="clear: both" /></p>

<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" style="clear: both" />
With <a href="https://totalfinder.binaryage.com">TotalFinder</a> providing desirable features to Finder such as chrome style tabs, colored labels, folders on top, dual mode, cut &amp; paste of files, and Visor functionality, there are still many good reasons to use it.</p>

<p><br style="clear: both" /></p>

<p><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" style="clear: both" />
And we think that <a href="https://totalspaces.binaryage.com">TotalSpaces2</a> allows great control of your spaces experience, including custom transitions and timing, user-configurable gestures, hotkeys, and hotcorners, app assignments and multi monitor support. We ourselves rely on it <em>totally</em>.</p>

<h4 id="2017">2017</h4>
<p>Although we didn’t make as much progress as we’d hoped in 2016, there is <a href="https://totalspaces.binaryage.com/changes-beta">a 2.5 release of TotalSpaces2 in the works</a> that has a bunch of new features, and <a href="https://totalfinder.binaryage.com/changes#1.8.2">TotalFinder 1.8.2 has just been released</a> with some fixes and improvements. More are coming, and we intend to support macOS 10.13 when it is released. We also hope to make some improvements in the installation and update processes.</p>

<p>So stay with us, and watch out for new releases. Happy 2017!</p>

]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>mailto:stephen@binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Meet Steve, the new lead of TotalFinder and TotalSpaces]]></title>
        
        <link href="https://blog.binaryage.com//meet-steve-the-new-lead/"/>
        <updated>2016-04-04T00:00:00+00:00</updated>
        <id>jduff.github.com:/meet-steve-the-new-lead</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" style="clear: both" /></p>

<p>We have some exciting news! Steve Audette has joined BinaryAge to lead development of TotalFinder and TotalSpaces. Don’t worry, Antonin and Stephen are still involved to make the transition as smooth as possible.</p>

<p>Help us celebrate and <a href="http://discuss.binaryage.com/t/meet-steve-whats-next-for-totalfinder-and-totalspaces">join the discussion</a> to welcome Steve and share your thoughts.</p>

<h4 id="who--what">Who &amp; What</h4>
<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" style="clear: both" />
As longtime fans and users may know, BinaryAge launched <a href="http://totalfinder.binaryage.com">TotalFinder</a> in 2010 under the leadership of <strong>Antonin Hildebrand</strong>.  Today, TotalFinder adds a cornucopia of features to Finder including tabs, colored labels, folders on top, dual mode, cut &amp; paste of files, Visor functionality, and much more</p>

<p><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" style="clear: both" />
BinaryAge’s second product released in 2012 when <strong>Stephen Sykes</strong> teamed with BinaryAge to bring <a href="http://totalspaces.binaryage.com">TotalSpaces</a> to market.  TotalSpaces restores the original grid-based Spaces layout that was removed in Mac OS X 10.7 <em>Lion</em>. TotalSpaces also gives a large degree of control and customization to your Spaces (a.k.a. Mission Control) experience, including custom transitions and timing, user-configurable gestures, hotkeys, and hotcorners, app assignments, grid circulation behaviors, and more.</p>

<p><img src="/images/irradiated-logo-512.png" class="intro-icon" style="clear: both" />
Going forward, development of TotalFinder and TotalSpaces will be in the capable hands of <strong>Steve Audette</strong>.  Steve is the founder and principal developer behind <a href="http://www.irradiatedsoftware.com">Irradiated Software</a>.  Founded in 2008, Irradiated Software has a broad portfolio of products ranging from OS X clipboard and window managers like <a href="http://www.irradiatedsoftware.com/iclip">iClip</a> and <a href="http://www.irradiatedsoftware.com/sizeup">SizeUp</a> (respectively) to iOS apps like <a href="http://www.irradiatedsoftware.com/dropvox">DropVox</a>, an Accessible voice-recorder for the blind and vision impaired.</p>

<h4 id="bright-future">Bright Future</h4>
<p>Over the years, Antonin and Stephen have poured their hearts into these apps.  Stephen comments that it will be hard to let our “babies” go, but “we have seen Steve’s work and are confident he will give TotalFinder and TotalSpaces the care and attention they deserve.”</p>

<p><a href="http://discuss.binaryage.com/t/meet-steve-whats-next-for-totalfinder-and-totalspaces">Join the discussion</a> to learn Steve’s plan for TotalFinder and TotalSpaces and to share your comments. Thanks.</p>

]]></content>
        <author>
            <name>Steve Audette</name>
            <uri>mailto:steve@binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Update on System Integrity Protection in El Capitan, OSX 10.11]]></title>
        
        <link href="https://blog.binaryage.com//el-capitan-update/"/>
        <updated>2015-06-27T00:00:00+00:00</updated>
        <id>jduff.github.com:/el-capitan-update</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" /></p>

<p>** TotalFinder and TotalSpaces2 will not run on El Capitan in its default configuration. **</p>

<p>In our <a href="http://blog.binaryage.com/on-el-capitan">previous post</a> we explained that the new security features of the forthcoming release of OSX may affect our apps.</p>

<h4 id="the-end-of-system-modifications-and-tweaks">The end of system modifications and tweaks</h4>

<p>Both TotalFinder and TotalSpaces2 work by injecting code into processes that are part of OSX. They change the way those processes work, but they don’t change the underlying system - they just add features whilst they are running. If you quit TotalFinder or TotalSpaces2, those processes restart and system returns to its original state.</p>

<p>However, in El Capitan OSX 10.11, this kind of modification will be disallowed by a new feature called “System Integrity Protection”. It is also known as “Rootless”. The feature prevents both modifications to your system files, and to system processes whilst they are running (even if you enter your password for administrator access).</p>

<p>So in a normally configured Mac, TotalFinder and TotalSpaces2 cannot run.</p>

<h4 id="binaryage-apps">BinaryAge apps</h4>

<p>In light of this, <strong>it’s clear that TotalFinder and TotalSpaces2 will cease to be consumer products</strong>. But they will continue to work as normal on OSX 10.9 and 10.10, so users who do not upgrade to 10.11 can continue to use them.</p>

<p><strong>We are announcing a 50% discount on the price of both TotalFinder and TotalSpaces2 from today in recognition of the situation.</strong></p>

<p>We have not yet decided how we will proceed once OSX 10.11 is released.</p>

<h4 id="the-silver-lining">The silver lining</h4>

<p>You can actually turn System Integrity Protection off. To do so, you must reboot into recovery mode (it is not meant as an operation a regular user would do).</p>

<p>Understandably, we do not feel we can ask our users to do that (it must be your own decision) as it affects all the new protections.</p>

<p>We do feel that it would have been possible for Apple to allow developer signed code to be injected, or have a more fine grained permission system, but as things stand the feature is either on or off at a global level.</p>

<h4 id="totalfinder-on-el-capitan">TotalFinder on El Capitan</h4>

<p>With System Integrity Protection turned off, the latest build of TotalFinder works with some features missing in the current beta El Capitan. It will require some effort to re-write the missing features (for example colored labels, and folders on top). <strong>We are not currently intending to do a full port for El Capitan.</strong></p>

<h4 id="totalspaces2-on-el-capitan">TotalSpaces2 on El Capitan</h4>

<p>With System Integrity Protection turned off, the latest build of TotalSpaces2 works well on the current beta of El Capitan. <strong>We intend to continue to support TotalSpaces2 if possible on El Capitan for those that wish to run it.</strong></p>

<h4 id="turning-off-system-integrity-protection">Turning off System Integrity Protection</h4>

<p>If you choose to change the System Integrity Protection setting, this feature is turned on or off by rebooting into recovery mode (hold CMD and R when rebooting), <del>and then choosing Utilities -&gt; Security Configuration and unchecking the Enforce System Integrity Protection checkbox.</del> <a href="http://totalspaces.binaryage.com/elcapitan">See new instructions here.</a></p>

<h4 id="discussion">Discussion</h4>

<p>While we are disappointed, we aren’t defeated - we will find other projects, and there may be more apps BinaryAge in the future.</p>

<p>For download links for the latest betas, and further discussion see the posts in our forum for <a href="http://discuss.binaryage.com/t/totalfinder-status-under-os-x-10-11-el-capitan/3858">TotalFinder</a> and <a href="http://discuss.binaryage.com/t/totalspaces2-status-under-os-x-10-11-el-capitan/3828">TotalSpaces2</a>.</p>

<strike>Finally, note that [TotalTerminal](http://totalterminal.binaryage.com) is not currently affected by System Integrity Protection.</strike>
]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>http://about.me/sdsykes</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[On System Integrity Protection in El Capitan, OSX 10.11]]></title>
        
        <link href="https://blog.binaryage.com//on-el-capitan/"/>
        <updated>2015-06-16T00:00:00+00:00</updated>
        <id>jduff.github.com:/on-el-capitan</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" /></p>

<p>** There is a significant risk that TotalFinder and TotalSpaces2 will not run on El Capitan. **</p>

<h4 id="system-integrity-protection">System Integrity Protection</h4>

<h5 id="the-bad-news">The bad news</h5>

<p>In the WWDC keynote last week Apple announced a feature called <strong>System Integrity Protection</strong> for OSX 10.11. This feature protects the system software against modification both on disk, and in memory.</p>

<p>Both TotalFinder and TotalSpaces2 work by injecting code into running system apps (Finder.app in the case of TotalFinder, and Dock.app in the case of TotalSpaces2). If Apple follow through with this measure, it is <strong>game over</strong> for these apps as consumer products. They simply won’t be able to run on your computer.</p>

<p>For us, and our many users this would be a great disappointment. But Apple’s goal is for greater system integrity, and that means blocking all modifications, whether from good and bad actors. We cannot blame them, but we wish there were some way of keeping our apps working, whether through new APIs or some additional verification, or whatever.</p>

<h5 id="the-good-news">The good news</h5>

<p>Firstly, the latest betas of both TotalFinder and TotalSpaces2 can be run on the first beta of OSX 10.11 El Capitan. They are not, at least for now, blocked.</p>

<p>Secondly, there will be a way to turn off System Integrity Protection. This possibility is aimed at developers. It involves booting your machine into recovery mode, and changing the setting there. Clearly it’s designed to not be something you would normally do, and we could not reasonably ask customers to turn off security protections. But if the worst comes to pass, you will likely be able to run our apps using this method. We will try to support those of you who wish to do this.</p>

<h4 id="the-bottom-line">The bottom line</h4>

<p>While the situation is unclear at the moment, <strong>there is a strong possibility that neither TotalFinder or TotalSpaces2 will work on a normally configured Mac running OSX 10.11 El Capitan</strong>. We think it’s fair to warn you now.</p>

<h4 id="discussion">Discussion</h4>

<p>For download links for the latest betas, and further discussion see the posts in our forum for <a href="http://discuss.binaryage.com/t/totalfinder-status-under-os-x-10-11-el-capitan/3858">TotalFinder</a> and <a href="http://discuss.binaryage.com/t/totalspaces2-status-under-os-x-10-11-el-capitan/3828">TotalSpaces2</a>.</p>

<p>Finally, note that <a href="http://totalterminal.binaryage.com">TotalTerminal</a> will very likely be affected too.</p>
]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>http://about.me/sdsykes</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder 1.6 with Colored Labels]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-with-colored-labels/"/>
        <updated>2014-05-08T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-with-colored-labels</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** Great news! Over last few months I’ve made great progress on TotalFinder. Today I’m happy to announce <a href="http://totalfinder.binaryage.com/changes#1.6">TotalFinder 1.6</a> with <a href="http://totalfinder.binaryage.com/colored-labels">Colored Labels</a>. **</p>

<h4 id="colored-labels">Colored Labels</h4>

<p>We all remember color labels from Mountain Lion, right? In Mavericks the labels were replaced with tags represented by smaller colored dots. Under Mavericks you can now apply multiple tags to selected items. In effect it is not clear what color should win, so Apple decided not to paint row backgrounds colors at all.</p>

<p>TotalFinder 1.6 offers you an option to render full-row color background using the color of the last tag applied to an item. If you keep this rule in mind, you can use tags in a way which emulates color labels in older OS versions.</p>

<p><img src="/images/full-clabels.png" class="blog-image" /></p>

<p>The implementation is solid and I’m really happy about the final outcome. Read more in <strong><a href="http://totalfinder.binaryage.com/colored-labels">the documentation</a></strong>.</p>

<h4 id="more-stability-and-fixes">More stability and fixes</h4>

<p>I did a lot of work on TotalFinder code base. It is now more flexible. It always has been a challenge to keep TotalFinder updated with system changes, but now I believe I will be able to react to Finder changes in new OS X more rapidly.</p>

<p>Notable improvements in version 1.6 are:</p>

<ul>
  <li>Finally fixed pretty bad <a href="http://discuss.binaryage.com/t/totalfinder-does-not-clear-selection-keyboard-shortcuts-dont-work/1611/5">Cut &amp; Paste glitch</a></li>
  <li>Resolved click-drag issue <a href="http://discuss.binaryage.com/t/mavericks-totalfinder-window-moves-position-on-screen-by-itself/1687">causing window jump</a></li>
  <li>DMGs now open as separate standard Finder windows - which should resolve confusion about missing sidebars</li>
</ul>

<p>As always, here is the full changelog: <a href="http://totalfinder.binaryage.com/changes">http://totalfinder.binaryage.com/changes</a></p>

<h4 id="it-is-time-to-say-goodbye-to-lion">It is time to say goodbye to Lion</h4>

<p>At this point I’m also officially dropping support for OS X 10.7. The last supported Lion version is <a href="http://totalfinder.binaryage.com/beta-changes#1.5.38">1.5.38</a>.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The guy with an armored suitcase]]></title>
        
        <link href="https://blog.binaryage.com//the-guy-with-armored-suitcase/"/>
        <updated>2014-04-25T00:00:00+00:00</updated>
        <id>jduff.github.com:/the-guy-with-armored-suitcase</id>
        <content type="html"><![CDATA[<h4 id="thats-how-people-see-me">That’s how people see me…</h4>

<p><a href="https://twitter.com/faborio">Peter Fabor</a> from <a href="http://www.thesurfoffice.com">The Surf Office</a> recently made an interview with me.</p>

<p>The photos of my armored briefcase are top secret, but I’ve described my unique portable multi-display setup:</p>

<p><img src="/images/multi-display.jpg" class="blog-image" /></p>

<h4 id="read-it-at-the-surf-offices-blog">Read it at The Surf Office’s blog:</h4>

<p><a href="http://www.thesurfoffice.com/blog/2014/4/25/meet-tony-macintosh-guy-with-armored-suitcase">http://www.thesurfoffice.com/blog/2014/4/25/meet-tony-macintosh-guy-with-armored-suitcase</a></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The fifth year of BinaryAge: Rationalization]]></title>
        
        <link href="https://blog.binaryage.com//the-fifth-year-of-binaryage/"/>
        <updated>2013-12-31T00:00:00+00:00</updated>
        <id>jduff.github.com:/the-fifth-year-of-binaryage</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p>** I got quite distracted at the end of the year 2013. Short answer: Mavericks release and Bitcoin fever. I didn’t write my usual yearly summary of BinaryAge story at the time. But here I am now and we should continue the tradition. Last year I wrote about <a href="http://blog.binaryage.com/the-fourth-year-of-binaryage">the fourth year of BinaryAge</a>.**</p>

<h4 id="mavericks-and-tabs-in-finder">Mavericks and tabs in Finder</h4>

<p>As you already know Apple has released OS X 10.9 with a new version of Finder introducing Safari-style tabs.</p>

<p><img src="/images/mavericks-finder-tabs.png" class="blog-image" /></p>

<p>The bad news was that in effect the TotalFinder sales dropped to 1/3 of previous numbers. It could have been worse. The good new is that TotalFinder still works well under Mavericks and still delivers other improvements (folders on top, dual mode, visor, etc).
I’m glad that existing TotalFinder users don’t have to switch workflows.</p>

<h4 id="totalspaces2">TotalSpaces2</h4>

<p>With the release of Mavericks, TotalSpaces required a substantial re-write to support the new “displays have separate spaces” mode. <a href="http://blog.binaryage.com/totalspaces2-better-spaces-in-mavericks/">TotalSpaces2</a> was born.</p>

<p><img src="/images/mavericks-ts2.png" class="blog-image" /></p>

<p>Together with other features and improvements, TotalSpaces2 for Mavericks was released just in time for the public release of OS X 10.9. I was surprised how quickly our users upgraded, Mavericks was clearly an instant hit.</p>

<h4 id="shrinking-the-team">Shrinking the team</h4>

<p>Maybe you remember that in April I <a href="http://blog.binaryage.com/meet-brian-and-mike">hired Mike and Brian</a>. By the end of the year I decided to let them go.</p>

<p>My original goal was to off-load support and some development to other people while I could focus on a new product development. They did a good job, but this plan didn’t come to fruition. I didn’t really have any promising product idea to work on, plus Apple announced tabs in new Finder which decreased my income and my willingness to pay salaries. And more importantly I felt like I still had to do baby sitting of TotalFinder in the first place. I was also traveling to different cities which didn’t help much. You know, that means time-zone differences, skype meetings and even more emails. Maybe I’m a control freak or I prefer to work alone, but it seemed to me like I’d added another layer of complexity without tangible benefits.</p>

<h4 id="san-francisco-talinn-and-las-palmas">San Francisco, Talinn and Las Palmas</h4>

<p>As <a href="http://blog.binaryage.com/the-fourth-year-of-binaryage">I wrote</a> I have commited to trying to “live” at different places. In March I left my place in Prague and since then I spent most of my year in these three cities:</p>

<ul>
  <li>San Francisco, U.S.A. in April - July</li>
  <li>Talinn, Estonia in August - September</li>
  <li>Las Palmas de Gran Canaria, Spain in October - December</li>
</ul>

<p>Las Palmas was the best thanks to <a href="http://www.thesurfoffice.com">The Surf Office</a>. Stephen came to visit - we had a great time surfing together.</p>

<p><img src="/images/tony-and-stephen.jpeg" class="blog-image" /></p>

<h4 id="whats-next-in-2014">What’s next in 2014?</h4>

<p>As of traveling, the plan is move to Bahamas and Panama for a few months. And then we will see.</p>

<p>TotalFinder is still generating a lot interest and support requests. As you can imagine I spend quite good chunk of my day helpinhg out on <a href="http://discuss.binaryage.com">binaryage forums</a> and in our support email. I want to keep TotalFinder development on track and maybe introduce some new features if time allows.</p>

<p>Also I’m still very much into Bitcoin, so I’m going to attend various conferences and hopefully I meet like-minded people and build something relevant.</p>

<div class="footnote">This post was written on May 7th, 2014 in Panama City. I promise the next report will be delivered on time :-)</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalSpaces2 - better spaces in Mavericks]]></title>
        
        <link href="https://blog.binaryage.com//totalspaces2-better-spaces-in-mavericks/"/>
        <updated>2013-10-22T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalspaces2-better-spaces-in-mavericks</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalspaces2-128.png" class="intro-icon" /></p>

<p>** OSX Mavericks public release is almost upon us. What of TotalSpaces? **</p>

<h4 id="the-new-operating-system-brings-many-changes">The new operating system brings many changes</h4>

<p>Ever since Apple introduced fullscreen apps, users with more than one display have been staring at a useless blank second monitor while working with a fullsceen app on the other one.
When OSX Mavericks was announced, Apple had done a great thing - they made it possible to keep something different on each of your displays. This was a fundamental change in the system, and one much welcomed by users.</p>

<p>However, I knew this meant a significant change for TotalSpaces. And it turns out there were many other changes under the hood also. In fact, we had to take the whole app to bits, and re-architect it to work with Mavericks. It was frustrating at times, but we were able to clean up and correct earlier mistakes as we went, and I think we ended up with a better result.</p>

<p>The very soul of TotalSpaces is the grid that enables you to keep a mental map of where your windows are. With the new version, I wanted to focus on the grid, to incorporate all types of desktops in it, and to make it easy for you to re-arrange your grid as you work.</p>

<h4 id="totalspaces2-is-designed-for-mavericks">TotalSpaces2 is designed for Mavericks</h4>

<p>And so <a href="http://totalspaces.binaryage.com/index2">TotalSpaces2</a> was born. It’s not exactly the same as TotalSpaces (there are <a href="http://totalspaces.binaryage.com/differences2">some differences</a>), but it gives you the same grid and the same workflows as before.</p>

<p>You can download TotalSpaces2 here:
<a href="http://totalspaces.binaryage.com/changes2">http://totalspaces.binaryage.com/changes2</a></p>

<p>TotalSpaces2 works well with both major multi-monitor spaces modes, but the re-written code offers performance benefits and ease of use for single screen users as well.</p>

<p>I hope you like it!</p>

<h4 id="upgrading">Upgrading</h4>

<p>TotalSpaces2 was a significant effort, and it is a paid upgrade. However, we are giving a <strong>40% discount</strong> on the full price for earlier users of TotalSpaces.</p>

<p>Also we felt it fair to offer a <strong>free upgrade</strong> if you bought TotalSpaces after Mavericks was announced (10th June 2013).</p>

<p><strong>To get your new licence, paste your TotalSpaces licence code here</strong></p>

<form class="upgrade-form" action="http://api.binaryage.com/license/totalspaces/upgrade2">
  <input class="upgrade-input" style="width:100%;height:30px;border:1px solid #999999;padding:5px;font-size:24px;" id="lx" name="lx" type="text" placeholder="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" />
  <input type="submit" class="upgrade-submit" value="Upgrade" />
</form>

<p>Please <a href="http://totalspaces.binaryage.com/changes2">download TotalSpaces2</a> and try it before buying!</p>

<p>If you have any trouble, or have misplaced your original licence code, we are here to help - feel free to email us at support@binaryage.com</p>
]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>http://binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Surfing the waves of Mavericks]]></title>
        
        <link href="https://blog.binaryage.com//surfing-mavericks/"/>
        <updated>2013-10-10T00:00:00+00:00</updated>
        <id>jduff.github.com:/surfing-mavericks</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p>** Mavericks GM is out and public version will be released later this month. Now is the time to give you an update on our progress. **</p>

<p>Apple did a great job on this release and we as users are quite happy with the new system. You guys should update soon.</p>

<h4 id="totalfinder-15-is-ready-for-mavericks">TotalFinder 1.5 is ready for Mavericks</h4>

<p>Apple implemented tabs in Finder under Mavericks. That was an important <a href="http://totalfinder.binaryage.com">TotalFinder</a> feature, but we believe TotalFinder still makes good sense because of other popular features including <a href="http://totalfinder.binaryage.com/dual-mode">dual mode</a> and <a href="http://totalfinder.binaryage.com/folders-on-top">folders on top</a>. Over last months we’ve worked hard to port all the existing TotalFinder features to Mavericks at least for current users. And we are happy to say that all Mountain Lion features are available under Mavericks including Chrome-style tabs.</p>

<p>You can download TotalFinder 1.5 here:
<a href="http://totalfinder.binaryage.com/changes#v1.5">http://totalfinder.binaryage.com/changes#v1.5</a></p>

<h4 id="totalspaces2-will-be-a-paid-upgrade">TotalSpaces2 will be a paid upgrade</h4>

<p><a href="http://totalspaces.binaryage.com">TotalSpaces2</a> is in beta testing at the moment, and we hope to have it polished and ready by the time Mavericks is released. It has been an awful lot of work to do the port to Mavericks, so it will be a paid upgrade. But we feel it’s fair that the upgrade will be free for anyone who purchased TotalSpaces after OSX Mavericks was announced.</p>

<p>We will post more about the release of TotalSpaces2 soon.</p>

<h4 id="totalterminal-fork-goes-closed-source">TotalTerminal fork goes closed-source</h4>

<p><a href="http://totalterminal.binaryage.com">TotalTerminal</a> works under Mavericks, but needs some polish. We decided to cleanup the codebase and share some library code and tools with TotalFinder. This forced us to make the next release closed-source. Personally I’m sorry for that, but there are some Xtra-copy-cats out there and we don’t want to share our secret sauce, and maintaining two codebases eats too much time.</p>

<p>TotalTerminal 1.4 will be released next week.</p>

<h4 id="asepsis-breaks-under-mavericks">Asepsis breaks under Mavericks</h4>

<p>Upgrading to Mavericks breaks <a href="http://asepsis.binaryage.com">Asepsis</a>. Unfortunately directly installing Asepsis 1.3 under Mavericks <a href="http://asepsis.binaryage.com/#panic-mode-">prevents the system from booting</a>. I was looking for a fix and current implementation is no longer possible. All loaded dynamic libraries need proper signatures from Apple under Mavericks. This is good for security, but renders hacks like Asepsis to be (almost) impossible.</p>

<p>Maybe you remember, Asepsis started as a feature of TotalFinder. I’m thinking about going back to that implementation which should still be possible under Mavericks. But this will require Asepsis users to install TotalFinder.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder lives on in Mavericks]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-lives/"/>
        <updated>2013-07-18T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-lives</id>
        <content type="html"><![CDATA[<p><img src="/images/hero_wave.png" class="blog-image" style="width:300px" /></p>

<p>As we mentioned in our <a href="http://totalfinder.binaryage.com/mavericks">Mavericks compatibility page</a>, we are continuing to port TotalFinder to Mavericks.  People are still talking about key features, like the <a href="http://totalfinder.binaryage.com/dual-mode">side-by-side window mode</a>, <a href="http://totalfinder.binaryage.com/folders-on-top">folders on top</a>, and the <a href="http://totalfinder.binaryage.com/browser">automatic resizing</a> of column widths when using column view.</p>

<p>We’re making great progress and could use your help on the latest revisions.  If you want to be part of the beta test for OS X 10.9 Mavericks, <a href="http://totalfinder.binaryage.com/beta-changes">check out this page</a>.</p>

<h4 id="penny-for-your-thoughts">Penny for your thoughts?</h4>

<p>We’re especially taking suggestions and ideas during this transition; please visit the <a href="http://support.binaryage.com">Support page</a> to share.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Let's meet at WWDC 2013]]></title>
        
        <link href="https://blog.binaryage.com//wwdc-2013/"/>
        <updated>2013-06-06T00:00:00+00:00</updated>
        <id>jduff.github.com:/wwdc-2013</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p>** I will be attending WWDC this year. Yes, I’m super excited that I won the ticket lottery this year :-) **</p>

<h4 id="tabs-in-os-x-109">Tabs in OS X 10.9?</h4>

<p>This will be my first WWDC ever. I’ve heard many good things about WWDC so I have pretty high expectations.</p>

<p>I’m interested in all the dev stuff, but for us as a company the most important will be the revealing of OS X 10.9. There are <a href="http://www.theverge.com/2013/4/29/4281684/os-x-10-9-rumored-redesigned-finder-with-tabbed-browsing">rumors</a> that Apple is going to implement native tabs in Finder. If it’s true, I believe TotalFinder’s success helped shape their decision to finally include tabs in Finder. And without hacks! :-)</p>

<p>Don’t worry. We have some ideas for future products. I also look forward to new opportunities that the new OS may bring. But we want to hear also from the community. What would dramatically improve your daily computer life? Please <a href="mailto:ideas@binaryage.com">share it with us</a>.</p>

<h4 id="lets-meet">Let’s meet!</h4>

<p>If you happen to be at WWDC, <a href="mailto:antonin@binaryage.com">let’s meet</a>. You can always watch the sessions from recordings but networking can be done only in person.  Looking forward to see you there!</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder 1.4.9 and TotalSpaces 1.2.2]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-and-totalspaces/"/>
        <updated>2013-05-09T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-and-totalspaces</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>In the <a href="http://blog.binaryage.com/meet-brian-and-mike/">last post</a>, I introduced a couple new BinaryAge teammates and hinted that we’d have new TotalFinder and TotalSpaces releases.  <a href="http://totalfinder.binaryage.com">TotalFinder 1.4.9</a> has been in the wild for a month now and has been doing great.  <a href="http://totalspaces.binaryage.com">TotalSpaces 1.2.2</a> was released just last week and added a lot of new features!</strong></p>

<h4 id="totalfinder-brings-back-colored-sidebar">TotalFinder brings back colored sidebar</h4>

<p>Besides making TotalFinder more stable, we added some new features that have been often requested by customers. A new preferences pane makes it easier for you to see what you can tweak, including new tweaks:</p>

<ul>
  <li>colored sidebar icons, based on a SIMBL plugin called <a href="http://cooviewerzoom.web.fc2.com/colorfulsidebar.html">ColorfulSidebar</a>.</li>
  <li>the new ability to open new tabs with the previous Finder location.</li>
  <li>a progress bar over the Dock icon when copying files.</li>
</ul>

<p>We fixed several issues, too, including a few related to keyboard shortcuts and the escape key. Unfortunately, we’re still working to fix integration with TimeMachine. For now, relaunch Finder so it loads without TotalFinder before you enter TimeMachine, then reopen TotalFinder when you’re done.</p>

<p>I want to give special thanks to <a href="https://github.com/shpakovski">Vadim Shpakovski</a> for his <a href="https://github.com/shpakovski/MASShortcut">MASShortcut</a> framework for managing keyboard shortcuts.</p>

<h4 id="totalspaces-intro-video">TotalSpaces intro video</h4>

<p>
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">
  <param name="SRC" value="http://cdn.binaryage.com/totalspaces-intro.mov" />
  <param name="AUTOPLAY" value="false" />
  <embed src="http://cdn.binaryage.com/totalspaces-intro.mov" width="640" height="415" autoplay="false" pluginspage="http://www.apple.com/quicktime/download/" />
  &lt;/EMBED&gt;
</object>
</p>

<p>Stephen spent most of his time over the past few months on a number of improvements and brand-new features.</p>

<p>TotalSpaces 1.2.2 makes it much easier to navigate among your multiple spaces, especially since space names are now shown in the overview grid. And when you are using the grid, you can now zoom into a window by hovering over it and holding the Shift key, so you can very quickly see which window is which.</p>

<p>Switching in and out of the overview grid is smoother and, in Mountain Lion, enhanced with an animated zoom.</p>

<p>With this version, you have better control. Improvements include space transitions that always match the direction you commanded even when circulating, plus hotcorners in multi-screen setups work much better now, too.</p>

<p>And, for kicks, don’t forget you have all of the Quartz transition types available – sliding, cube, flip, or it can be instant for maximum speed.</p>

<p>Finally, TotalSpaces has been translated into a few new languages. If you’d like to help out by translating it into your own language, <a href="https://github.com/binaryage/totalspaces-i18n">see here</a>.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Meet Brian and Mike]]></title>
        
        <link href="https://blog.binaryage.com//meet-brian-and-mike/"/>
        <updated>2013-04-24T00:00:00+00:00</updated>
        <id>jduff.github.com:/meet-brian-and-mike</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>In <a href="http://blog.binaryage.com/the-fourth-year-of-binaryage/">last December’s blog post</a> I expressed my desire for BinaryAge to become a distributed cloud company. The past few months are proving that to be my new reality.</strong></p>

<h4 id="six-thousand-miles-away">Six Thousand Miles Away</h4>

<p>Last year, I enjoyed San Francisco so much that I’ve sold everything in Prague and will be living on the West Coast for the next few months. A major plus to the distributed lifestyle is that I can work from almost anywhere in the world. I’m a digital nomad now.</p>

<h4 id="two-new-versions-two-new-members">Two New Versions, Two New Members</h4>

<p>Stephen is going to release a new version of <a href="http://totalspaces.binaryage.com">TotalSpaces</a> soon, it’s being cooked in Helsinki, Finland. BinaryAge has also added two new team members who live in different parts of the world, too.</p>

<h5 id="meet-brian-from-dallas">Meet <strong>Brian</strong>, from Dallas</h5>

<p><img src="/images/brian.jpg" style="width:72px;float:left; margin-top: 0px; margin-right: 10px; padding:2px; border:1px #999 solid;" /> I wanted to hire a new developer to help out with <a href="http://totalfinder.binaryage.com">TotalFinder</a> development. It has been always a challlenge to find skilled and reliable hackers. But communities like <a href="http://github.com">Github</a> make it possible to meet and feel comfortable with like-minded people and that’s how I met Brian Garrett. The open-source code he submitted in <a href="http://totalterminal.binaryage.com">TotalTerminal</a> looked great and after reaching out, I realized his personality is great, too.</p>

<p>Brian’s been studying mechanical and energy engineering at the University of North Texas. That’s where he found his passion for software development, when he built a command-line tool to reduce the amount of time it took to solve thermodynamic problems. Brian’s drawn to the unique creative freedom that coding allows, unlike the physical laws he is limited to in school.</p>

<h5 id="meet-mike-the-new-yorker">Meet <strong>Mike</strong>, the New Yorker</h5>

<p>In the same December post, I asked for a Mac addict to help with building our community. Some of our best features have come from thousands of users in more than two dozen countries around the world.</p>

<p><img src="/images/mike.jpg" style="width:56px;float:left; margin-top: 2px; margin-right: 10px; padding:2px; border:1px #999 solid;" /> After reading the post, <a href="http://www.michaelmaturo.com/">Mike Maturo</a>, a public relations expert from New York started a conversation with me. His background in computer engineering and computer science from USC gives him a good understanding of our work and his former life as an elected official helps him be empathetic with our users. I’m excited about what we can do together, especially to get onto <a href="http://www.discourse.org">Discourse</a>, a cutting-edge community forum platform!</p>

<h4 id="working-as-a-distributed-team">Working as a distributed team</h4>

<p>Mike will take a lot of work off my plate by taking care of our community and emails. Brian will focus on some new <a href="http://totalfinder.binaryage.com">TotalFinder</a> features. This will enable me to get back to programming and tackle some new ideas. Stephen will continue to work hard on <a href="http://totalspaces.binaryage.com">TotalSpaces</a>, the ultimate grid spaces manager for your Mac.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The fourth year of BinaryAge: Incorporation]]></title>
        
        <link href="https://blog.binaryage.com//the-fourth-year-of-binaryage/"/>
        <updated>2012-12-31T00:00:00+00:00</updated>
        <id>jduff.github.com:/the-fourth-year-of-binaryage</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p>** 2012 is over. What a great year! Let’s see what was important.<br />This is my traditional summary of past year for people who follow this story.<br />Last year I wrote about <a href="http://blog.binaryage.com/the-third-year-of-binaryage">the third year of BinaryAge</a>.**</p>

<h4 id="stephen-became-my-business-partner">Stephen became my business partner</h4>

<p><img src="/images/stephen.png" style="width:70px;float:left; margin-top: -2px; margin-right: 10px; padding:2px; border:1px #999 solid;" /> <a href="https://twitter.com/sdsykes">Stephen</a> is the developer of <a href="http://totalspaces.binaryage.com">TotalSpaces</a>. We became friends and partners in business. He is a Mac and iOS developer, hacker and radio electronics guru. He is a computer veteran, an englishman living in Finland. I look forward to see what we can achieve together in the years comming.</p>

<h4 id="binaryage-limited-incorporated">BinaryAge Limited incorporated</h4>

<p>After the last <a href="http://blog.binaryage.com/the-third-year-of-binaryage">year of stabilization</a> I decided to decouple the business from my individual person. It is not “just me” anymore, it is a mindset shift. It is not just changing “the about page”. You may think about this process as a solo-founder business refactoring. I would like to see BinaryAge as a <em>distributed cloud company</em>. No single “central” offices, just people collaborating remotely from different parts of the world. HipChat, GitHub and Hangouts shall be our offices.</p>

<p>I’m much more confident in the future. We have multiple products for offer now. We have multiple pairs of hands nurturing them. We have promising ideas and unique skills to make them a reality. Also we managed to accumulate some capital to be pretty confident we can carry on and support our users in the future.</p>

<p>We are also looking for some help. At this point we need some Mac addict who would help us with the community. Someone doing user support on email and <a href="https://getsatisfaction.com/binaryage">forums</a>. Please drop us a line if you want to <a href="mailto:antonin@binaryage.com">join us</a>.</p>

<h4 id="san-francisco-and-mountain-lion">San Francisco and Mountain Lion</h4>

<p><img style="width:100px; float: left; margin-right: 10px; margin-bottom:20px " class="clear blog-image" src="/images/vvsf.jpg" title="SF!" /></p>

<p>One dream came true. San Francisco is a great place. <a href="">I spent</a> full three months there during spring and early summer. Stephen visited me there too.</p>

<p>When I got back to Prague I got busy with <a href="http://blog.binaryage.com/totalfinder-runs-with-mountain-lions">Mountain Lion TotalFinder release</a>. It went quite well - Mountain Lion did not bring as many changes as Lion had.</p>

<h4 id="experiments">Experiments</h4>

<p>During the year I started several experimental projects with other developers:</p>

<ul>
  <li><strong><a href="https://github.com/binaryage/leechgate">leechgate</a></strong> - Google Analytics for your S3 bucket</li>
  <li><strong><a href="http://restatic.binaryage.com">restatic</a></strong> - pumps spreadsheet data into your static site</li>
  <li><strong><a href="https://github.com/darwin/terraform">terraform</a></strong> - my take on a concept of “editable web”</li>
</ul>

<p>Also <a href="http://markmiyashita.com">Mark</a> did a nice job on editing the <a href="http://hints.binaryage.com">Hints from BinaryAge</a>. Thanks!</p>

<p>I believe collaborating on experimental open projects and ideas is a great way to try to work together.</p>

<h4 id="whats-next-in-2013">What’s next in 2013?</h4>

<p>I want to hire a new developer who would work on TotalFinder. Together with Stephen I would like to start working on a new product. Do you have any ideas what we should build next? We are eager to hear them!</p>

<p>On personal level I’m planning a rather dramatic change: I’m going to sell all my furniture/stuff and move out of my rented aparment in Prague. I will start traveling around the world with just a MacBook Pro. I can tell you that <a href="http://alexmaccaw.com/posts/how_to_travel_around_the_world">Maccman’s post</a> was a great inspiration here, but it won’t be that romantic in my case :) By traveling I mean using <a href="http://airbnb.com">AirBnB</a> to switch a city every three months or so. I want to do some work as well. Any tips what cities are worth visiting first? :)</p>

<hr />

<p>Thanks for your care and I wish you all the best in the new year.</p>

<div class="footnote">I'd like to also thank my family, friends and all contributors who supported me.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalSpaces finally reaches 1.0]]></title>
        
        <link href="https://blog.binaryage.com//totalspaces-finally-reaches-1.0/"/>
        <updated>2012-10-19T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalspaces-finally-reaches-1.0</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalspaces-128.png" class="intro-icon" /></p>

<p>** <a href="http://totalspaces.binaryage.com">TotalSpaces</a> — the indispensable utility for managing and navigating your spaces in a grid **</p>

<h4 id="we-are-launching-on-tuesday">We are launching on Tuesday!</h4>

<p>Hi, Stephen here… I am excited to make an announcement: Yes, TotalSpaces v1.0 is ready for release and <strong>will be available on Tuesday October 23rd</strong>. I feel we have come far enough for it to be a truly useful piece of software, that is stable and well tested by thousands of users.</p>

<p>All in all, we’re really happy with TotalSpaces, and we’re not alone; we’ve had many nice comments from our users who either missed the old OSX grid layout, or discovered how useful a grid of spaces is for the first time.</p>

<h4 id="it-was-a-long-road">It was a long road</h4>

<p>TotalSpaces was born at the end of August 2011 as Change Space App, something I wrote in my spare time to get back my well loved spaces grid. Change Space worked, but it had some deficiencies and I could see that it was going to require a significant change in the way the app worked in order to improve it. I was going to need to write a plugin for the OSX Dock app in order to do everything I wanted.</p>

<p><img src="/images/totalspaces-overview-grid.png" style="width:200px;float:left; margin: 6px; padding:2px; border:1px #999 solid;" alt="ReSpaceApp overview grid" title="ReSpaceApp overview grid" />
The first incarnation of this was called ReSpaceApp, which was initially released on 1st February 2012. Development proceeded well, and by April you could pull up an overview grid, with the ability to drag and drop windows between desktops.</p>

<p>At the end of April I teamed up with Antonin, and ReSpaceApp took its place in the <a href="http://binaryage.com">BinaryAge portfolio</a> as TotalSpaces.</p>

<p><img src="/images/totalspaces-new-overview-grid.png" style="width:200px;float:right; margin: 6px; padding:2px; border:1px #999 solid;" alt="TotalSpaces overview grid" title="TotalSpaces overview grid" />
June brought a much improved full-screen overview grid, with an exposé type feature to enable you to get a good view of all your windows.</p>

<p>During the summer and autumn we continued to improve and refine the app, whilst adding some of the most requested features.</p>

<h4 id="a-full-feature-grid-spaces-manager">A full feature grid spaces manager</h4>

<p>So finally TotalSpaces is ready to be called version 1.0. And along the way it has gained many capabilities:</p>

<ul>
  <li>Grid layout of <strong>up to 16 desktops</strong> built on top of Mission Control’s native OSX desktops</li>
  <li>Switching desktops via <strong>hotkeys</strong> and <strong>swiping</strong> with <strong>full circulation control</strong></li>
  <li><strong>Transitions</strong>: Choose from 4 different animation effects or you can <strong>turn transitions off altogether</strong></li>
  <li>An easily accessible <strong>Overview grid</strong> with the ability to <strong>drag windows between desktops</strong></li>
  <li>Full support for <strong>Full screen apps</strong></li>
  <li><strong>Hotcorners</strong> to trigger the overview grid, and exposé mode once in the overview grid</li>
  <li>Configuration for <strong>assigning apps to particular spaces</strong></li>
  <li><strong>Multiple monitor support</strong></li>
</ul>

<p>You can read about these features and more in <a href="http://totalspaces.binaryage.com/documentation">the documentation</a>. Oh, and actually we are going to squeeze one or two extra features into version 1.0, including desktop naming.</p>

<h4 id="pricing">Pricing</h4>

<p>TotalSpaces has been on sale whilst it has been in beta at a price of $12. This is the introductory price - <strong>You can still purchase TotalSpaces at this price until v1.0 is released, after which the price goes up to $15.</strong> So <a href="https://sites.fastspring.com/switchstep/instant/totalspaces">buy now</a> :)</p>

<p>All licenses are valid for all upgrades to TotalSpaces in the v1.x series.</p>

<h4 id="finally">Finally</h4>

<p>Thanks to everyone who has provided feedback and suggestions for TotalSpaces. We haven’t been able to do every feature yet, but there is more coming - we are going to continue to work hard on TotalSpaces making it better, faster, easier and more delightful to use.</p>
]]></content>
        <author>
            <name>Stephen Sykes</name>
            <uri>http://binaryage.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder runs with Mountain Lions]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-runs-with-mountain-lions/"/>
        <updated>2012-08-02T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-runs-with-mountain-lions</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** Good news! <a href="http://totalfinder.binaryage.com/changes#1.4">TotalFinder 1.4</a> works fine under new OS X 10.8 - Mountain Lion.<br />And it got even better. **</p>

<h4 id="the-upgrade-is-free-of-charge-for-all-existing-customers">The upgrade is free of charge for all existing customers</h4>

<p>Although I put long hours into maintaining the software and communication with people, I didn’t really bring any major new features since the Lion upgrade. I think it’s fair to keep it as a free update. Save your budget or buy some <a href="http://binarybakery.com/index.php">other cool productivity software</a>.</p>

<h4 id="totalfinder-got-faster">TotalFinder got faster!</h4>

<p>It happened last weekend when I decided to rewrite the old and dusty internals of how TotalFinder manages Finder windows. It was needed to solve some outstanding Mountain Lion issues and as a side-effect it made all things much cleaner and faster. I’m pretty happy about it.</p>

<h4 id="snow-leopard-is-history-get-over-it">Snow Leopard is history. Get over it.</h4>

<p>Sad, but I need to move on. As you can imagine TotalFinder is a hack on top of live Finder.app. I patch Finder internals and sometimes even fake AppKit logic. This is not your average Mac app. This is a brain surgery! Both Finder and AppKit are moving targets. They change between OS updates. It is really time consuming for me to test TotalFinder on different OS versions/setups/configurations and resolve bugs with multiple hacks.</p>

<p>I need more time for development. I decided to support just one OS version back. People running older OSes will have to stick with the latest compatible historical version. Currently I support Lion and Mountain Lion. The last Snow Leopard compatible version is <a href="http://totalfinder.binaryage.com/changes#1.3.4">TotalFinder 1.3.4</a>. Read more in <a href="http://totalfinder.binaryage.com/snow-leopard">this article</a>.</p>

<p>Hard feelings? <a href="https://getsatisfaction.com/binaryage/topics/snow_leopard_not_supported_1_3_6">Blame me here</a>.</p>

<h4 id="totalfinder-has-a-bright-future">TotalFinder has a bright future</h4>

<p>I’m still here and dedicated to TotalFinder development. Right now I have whole TotalFinder source code loaded back in my head. So I hope I will be able to implement some hard but <a href="https://getsatisfaction.com/binaryage/ideas/popular">highly requested features on the list</a>.</p>

<p>Also I have finally broken TotalFinder into separate plugins, eg. Tabs, Visor, CutAndPaste… It is now easier to maintain them and to develop new individual Finder tweaks separately. Reminds SIMBL? Yes! If you are a SIMBL hacker and want to join me hacking on TotalFinder, please drop me an email.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalSpaces brings back grid Spaces to OS X Lion]]></title>
        
        <link href="https://blog.binaryage.com//totalspaces-brings-back-grid-spaces/"/>
        <updated>2012-04-26T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalspaces-brings-back-grid-spaces</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalspaces-128.png" class="intro-icon" /></p>

<p>** I’m excited to announce a new product from BinaryAge. TotalSpaces is a productivity tool for Mac. You guess right, it taps into the system and improves Spaces experience. **</p>

<p><img class="clear blog-image" src="/images/totalspaces-overview-grid.png" title="Grid overview in TotalSpaces" /></p>

<p><strong><a href="http://totalspaces.binaryage.com">TotalSpaces</a></strong> provides several handy features for heavy Spaces users. In a way it brings back the old grid-based Spaces behavior we loved in Snow Leopard. It offers custom transitions when switching Spaces. For example featuring the famous Cube transition. And of course you may customize hotkeys, hotcorners and the way circulation through the grid works. Sounds good? Look into <a href="http://totalspaces.binaryage.com/documentation">the documentation</a> to get more info on individual features in the current version.</p>

<h4 id="meet-stephen-from-helsinki">Meet Stephen from Helsinki</h4>

<p><img src="/images/stephen.png" style="width:70px;float:left; margin-top: -2px; margin-right: 10px; padding:2px; border:1px #999 solid;" /> TotalSpaces has been developed by <strong><a href="https://twitter.com/sdsykes">Stephen Sykes</a></strong> - a Mac and iOS developer, hacker and radio electronics guru. He is a computer veteran, an englishman living in Finland. TotalSpaces is his idea to improve his daily desktop and window management tasks. He sure is really quick at switchin’ Spaces!</p>

<h4 id="the-story-behind-totalspaces">The story behind TotalSpaces</h4>

<p>TotalSpaces was originally called <strong>ReSpaceApp</strong> and was presented by Stephen’s <a href="http://switchstep.com">Switchstep Company</a>. He has released several free beta versions during past few months and got warm feedback from passionate Mac users. And because you can turn off the transitions between spaces, it has <a href="http://reverttosaved.com/2012/04/17/respaceapp-could-solve-os-x-lion-motion-sickness-problems/">helped some users</a> for rather surprising reasons!</p>

<p>He contacted me back in March to get some help on marketing side and to share some know-how. I liked his work and invited him to San Francisco. We had a good time and decided to cooperate. And we decided to release ReSpaceApp with a new name through BinaryAge. TotalSpaces and TotalFinder should be close together.</p>

<p>Hope you will give it a shot!</p>

<hr />

<div class="footnote">You don't have to be worried about the future of TotalFinder. I still focus primarily on TotalFinder development. Stephen will work exclusively on TotalSpaces. And together we will share user support burden and technicalities of running an online business. This should earn us both more time for real development.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Hello San Francisco!]]></title>
        
        <link href="https://blog.binaryage.com//hello-san-francisco/"/>
        <updated>2012-04-07T00:00:00+00:00</updated>
        <id>jduff.github.com:/hello-san-francisco</id>
        <content type="html"><![CDATA[<p><strong>I have just moved to San Francisco for few months. Oh boy, it has always been my dream to visit and truly experience the city. Now I’m living it! TotalFinder customers made it possible. Thank you guys!</strong></p>

<p><img class="clear blog-image" src="/images/vvsf.jpg" title="SF!" /></p>

<h4 id="looking-for-an-inspiration">Looking for an inspiration</h4>

<p>Yeah, startups! As a <a href="http://www.thisweekinstartups.com">podcast</a> junkie I’m pretty familiar with the startup scene in SF. It is not that difficult. With a solid internet connection you can stay in the loop from almost anywhere these days. Even from Prague somewhere in the central Europe. Of course, I mean watching the show passively from back seats. To become a real actor you have to come to the city. But take it easy, boy. There is plenty of fish like you. Don’t be like those sixteen years old wannabe movie stars coming to L.A. :)</p>

<p>I feel like if crosing of 2nd and Howard St was the center of the universe. Have been to <a href="http://www.startupism.org">Startupism 2012</a> and #DrinkEntrepreneurs so far. Also had a tasty lunch with my <a href="http://yared.com">former boss</a> and the <a href="http://binarypie.com">best engineer</a> back from <a href="http://blog.binaryage.com/the-first-year-of-binaryage">Transpond</a> days. All is magically happening somewhere near that crossing. And by going further to SOMA you can visit places like <a href="http://www.yelp.com/biz/zekes-diamond-bar-san-francisco">Zeke’s Diamond Sport Bar</a>. Yes, the place where <a href="http://www.mojombo.com/2008/10/18/how-i-turned-down-300k.html">GitHub guys have met for a drink</a> before writing the first line. Places like those have the genius loci, not Alcatraz!</p>

<h4 id="want-to-meet-hackers">Want to meet hackers</h4>

<p>Business conferences and enterpreneur meetups are great if you have a startup. You can pitch your idea or product to everyone who wants to listen. Great practice at least. Hmmm, places where ideas have sex? Naaah! It is more like a speed dating. A bit silly to talk in superlatives to make yourself interesting in 30 seconds, ding!</p>

<p>Anyway I ended up with a bunch of name cards in my pocket. The problem is that I cannot remember all the people. And I don’t have a “real” startup. And I don’t even have my own name cards, so I ended up handing out free TotalFinder licenses :-) I was looking like I want to sell them something. Well, not that bad I have found <a href="http://justbeen.in">few people</a> who were already users of my products.</p>

<p>I would much rather hang out with hackers and discuss technical things like programming languages. Then maybe slowly get to project ideas. And who knows. Maybe after some time and few drinks we could be brainstorming how to conquer the world by building the next big thing. Enough time and signals to find out who is a lunatic.</p>

<h4 id="running-in-the-golden-gate-park">Running in the Golden Gate Park</h4>

<p>I’m staying at Oak St with a nice view into Panhandle Park. I see people running in the park from my window all day. It would be a sin not to move my fat ass. This is my 13km route. I belive one of the most beautiful running routes in the city:</p>

<p><img class="clear blog-image" src="/images/runsf.png" title="The best running route in the city!" /></p>

<p>Getting better pretty quickly. Hope I will get into good half-marathon shape by the end of my visit :-)</p>

<h4 id="lets-get-in-touch">Let’s get in touch!</h4>

<p>Now when you know my mission a little bit more. Do you have any recommendations? Pubs? Places? Events? Want to meet at some meetup? Or even for a lunch? Just <a href="mailto:antonin@binaryage.com">email me</a>, I’m ready to run :-)</p>

<hr />

<div class="footnote">I want to thank the guys from <a href="https://studentive.com">Studentive</a> and <a href="https://twitter.com/lujzabubanova">Lujza</a> for the invitation to <a href="http://www.startupism.org">Startupism</a>. It was cool to hang out there with you.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The third year of BinaryAge: Stabilization]]></title>
        
        <link href="https://blog.binaryage.com//the-third-year-of-binaryage/"/>
        <updated>2011-12-31T00:00:00+00:00</updated>
        <id>jduff.github.com:/the-third-year-of-binaryage</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>It was a successful year. BinaryAge has become a serious business in 2011.<br />This is my traditional summary of the year for people who follow this story.<br />Last year I wrote about <a href="http://blog.binaryage.com/the-second-year-of-binaryage">the second year of BinaryAge</a>.</strong></p>

<h4 id="rescue-my-time">Rescue my Time!</h4>

<p>While looking back, I wonder where did I spend all my time. I haven’t completed any big features in 2011. Where did my time go?</p>

<p>I’m into analytics and I have been using <a href="http://rescuetime.com">RescueTime</a> to track my behavior. When looking back this gives us good insights how much time did I spend on what.</p>

<p><img class="clear blog-image" src="/images/my-time-in-2011.png" title="Where did my time go?" /></p>

<p>This graph is plotted by week. Particulary interesting is the purple area, which is real development time.</p>

<ul>
  <li>email support seems to be eating quite a chunk of my time, especially at the end of the year during MacUpdate Winter Bundle</li>
  <li>Apr-Jul development time I spent mostly on Lion port of TotalFinder</li>
  <li>interesting observation is that friends’ weddings outside the Prague are productivity killers :-)
  	* end of March</li>
  <li>beginning of July</li>
  <li>beginning of September wasn’t that bad because it took place in Prague</li>
  <li>Sep-Dec: Russia trip! I have never got into zone to do any real development progress.</li>
  <li>I’ve spent a lot of time <a href="http://www.khanacademy.org">educating myself</a>, watching <a href="http://thisweekinstartups.com">videos for startups</a> and reading <a href="http://news.ycombinator.com">hacker news</a> - that’s probably part of that gray area</li>
</ul>

<p>Also RescueTime exposed quite shocking number that I’ve spent almost 2800 hours in front of the computer which is more than twice of average computer freak.</p>

<p>This is hard data to prove that I need to hire someone to take care of support and help me with social media monitoring. I need to reclaim my development time back.</p>

<h4 id="lion-release">Lion release</h4>

<p>I had to re-implement most of TotalFinder features for Lion version of Finder. It was more difficult than I anticipated but finally I was able to bring all TotalFinder features back to Lion. Unfortunately some users are still experiencing stability or performance issues while using TotalFinder. That hurts me and I have to address them as soon as possible.</p>

<h4 id="russia---saint-petersburg">Russia - Saint Petersburg</h4>

<p>Originally I thought I will spend few months in San Francisco by the end of the year. But instead I have joined my best friend and followed him to Russia. We had a lot of fun in Saint Petersburg together. It is a nice historic city with friendly girls and cool bars. Maybe we drank too much vodka there :-)</p>

<p><img class="blog-image" src="/images/antonin-and-aurora.png" title="Me and Aurora :-)" /></p>

<h4 id="whats-next-in-2012">What’s next in 2012?</h4>

<p>I’m still in love with TotalFinder and I want to spend most of my development time on it in 2012. I don’t want to promise any big features. My highest priority must be performance and stability of existing features and interoperability with existing ecosystem of Mac software. Because that is what makes Mac an exceptional platform. Not the raw number of features but the quality and the level of care which has been put into them. TotalFinder definitely needs more care.</p>

<p>On personal level I plan to visit San Francisco for few months in spring. I want to get the feel of the vibrant startup community.</p>

<hr />

<p>Thanks for your support and I wish you all the best in the new year.</p>

<div class="footnote">I'd like to also thank my family, friends and all contributors who supported me.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[XRefresh superseded by LiveReload]]></title>
        
        <link href="https://blog.binaryage.com//xrefresh-superseded-by-livereload/"/>
        <updated>2011-08-14T00:00:00+00:00</updated>
        <id>jduff.github.com:/xrefresh-superseded-by-livereload</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/xrefresh-128.png" class="intro-icon" /></p>

<p><strong><a href="http://xrefresh.binaryage.com">XRefresh</a> is a productivity tool for web developers.<br />It will continuously refresh a web page in a browser due to a local source file editing.</strong></p>

<h4 id="livereload-is-the-next-evolution-of-xrefresh">LiveReload is the next evolution of XRefresh</h4>

<p>There is a new tool inspired by XRefresh called <a href="http://livereload.com">LiveReload</a>. I have been watching <a href="https://github.com/mockko/livereload">its development</a> for some time and decided to deprecate XRefresh in favor of LiveReload. Simply it is a better version of XRefresh done the way I would implement it today.</p>

<h4 id="livereload-20-will-be-a-commercial-update">LiveReload 2.0 will be a commercial update</h4>

<p><a href="https://github.com/andreyvit">Andrey</a> and <a href="https://github.com/mockko/livereload/contributors">other contributors</a> have put a lot of effort into making LiveReload cross-browser. They also implemented support for the latest hot technologies like various Javascript and CSS pre-processors. They are also working on a convenience GUI app for managing watched directories.</p>

<h4 id="xrefresh-retired">XRefresh retired</h4>

<p>As you can see from <a href="http://xrefresh.binaryage.com/#changelog">the changelog</a>, I started XRefresh in 2007. It was in times when I was doing a lot of web development. Maybe you remember it was the time when Firefox with Firebug was ruling the web developers’ world. In 2008 as a fresh web developer I flocked with Ruby on Rails kids and switched from Windows to Mac. I didn’t want to lose XRefresh so I implemented a simple command-line XRefresh server in Ruby. But since then Chrome and Safari popularity has risen greatly. What I see today is that many developers are switching from Firebug to Web Developer Tools in Safari/Chrome and XRefresh popularity is fading out. LiveReload actually started as an XRefresh alternative for Safari users and served those users pretty well. Today it supports Firefox as well, so switching should be a no-brainer.</p>

<h4 id="long-live-the-livereload">Long live the LiveReload</h4>

<p>Originally I had a plan to commercialize some future XRefresh version because I strongly believe it brings a great value to developers and I’ve put quite some effort into packaging it into a usable product. But I had more ambitions. Two years ago I wrote an article about <a href="/xrefresh-future-direction">my future vision for XRefresh</a>.</p>

<p>But my path was different. The success with TotalFinder determined that I’m doing more of a Mac development these days than I’m doing a web development. And I don’t have time and motivation to maintain XRefresh when I’m not using it on a daily basis. TotalFinder deserves more of my dedication.</p>

<p>So I’m happy to redirect XRefresh users to LiveReload. I’m sure they will be in good hands :-)</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[If you have too many files on your desktop...]]></title>
        
        <link href="https://blog.binaryage.com//desktopshelves/"/>
        <updated>2011-07-07T00:00:00+00:00</updated>
        <id>jduff.github.com:/desktopshelves</id>
        <content type="html"><![CDATA[<p><strong>This is a guest post from my friend Rico, another Indie Mac developer
over at Kitestack Software who has just released version 1.0 of his app DesktopShelves.</strong></p>

<hr />

<p>Thanks Antonin for giving me the opportunity to introduce DesktopShelves to
your readers!</p>

<p>DesktopShelves is an app that lets you 
<a href="http://kitestack.com/desktopshelves/" title="Organize your Mac's desktop">organize your Mac’s desktop</a>.
If you have what it feels like a million files cluttering up your desktop and cleaning up means creating a 
folder called “<em>Stuff</em>” and putting everything inside, DesktopShelves is an app for you.</p>

<p>DesktopShelves does exactly what the name suggests: it puts shelves on your
desktop. A shelf the size of 5 regular desktop icons holds 20 files. That is
possible, because items on a shelf are slightly rotated like books on a real
shelf. In contrast to a shelf made out of metal and wood, a desktop shelf has a
nice Cover Flow-like effect to zoom in to the file under the cursor to make it easy
to find the file you are looking for.</p>

<p><a href="http://kitestack.com/desktopshelves/" title="DesktopShelves - Organize your desktop" target="_blank"><img src="/images/desktopshelves.jpg" alt="DesktopShelves screenshot" /></a></p>

<p>You can open any folder on your Mac as a shelf on the desktop. Let’s say you
are working on a project for a client. In Finder, you can just right-click the
project folder and open it as a shelf. This way you will have access to all
files right from the desktop. There’s also a hotkey to bring the shelves on 
top of all other open windows.</p>

<p>Getting files on and off shelves works via drag &amp; drop. You can, for example,
drag and drop a file from a shelf directly into Mail.app and send it as an
attachment. If you right-click (or control-click) and drag a text file away
from a shelf it will insert the actual contents of that file. This lets you 
keep a shelf with text snippets or email templates.</p>

<p>To take this one step further, you can also select text in an application such as
Safari and drop it directly on a shelf. There it will automatically create a
new file with that text selection for you.</p>

<p>DesktopShelves comes as a 14 day demo version with all features enabled. After that you can purchase a license for $15.
You can <strong><a href="http://kitestack.com/desktopshelves/" title="DesktopShelves website">download DesktopShelves</a></strong> from the Kitestack website. 
Here is a link to the <a href="http://kitestack.com/desktopshelves/#watch" title="DesktopShelves Demo Video">DesktopShelves demo video</a>.</p>

<p>Feedback and suggestions are always welcome!</p>

<p>Cheers,
Rico (Kitestack Software)</p>
]]></content>
        <author>
            <name>Rico</name>
            <uri>http://kitestack.com</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder upgrade for Lion will be at no extra charge]]></title>
        
        <link href="https://blog.binaryage.com//free-totalfinder-lion-upgrade/"/>
        <updated>2011-05-30T00:00:00+00:00</updated>
        <id>jduff.github.com:/free-totalfinder-lion-upgrade</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>Good news! I’m happy to announce that all existing users will get TotalFinder Lion upgrade for free. On the other hand I will increase TotalFinder price for new customers the same day Apple releases Lion. Please read the details below.</strong></p>

<h3 id="the-summary">The summary</h3>

<ul>
  <li>Single TotalFinder binary will work on both Snow Leopard and Lion without restrictions</li>
  <li>There will be no TotalFinder upgrade fee for Lion</li>
  <li>When Apple releases Lion, I will increase the price to $18 (currently $15)</li>
  <li>For EU customers I won’t cover VAT in the price anymore</li>
</ul>

<h4 id="single-totalfinder-executable">Single TotalFinder executable</h4>

<p>I made some nice progress on <a href="http://totalfinder.binaryage.com/lion">Lion compatibility</a>. I’m pretty confident that I will be able to provide all TotalFinder features under Lion. The bonus is that I was able to implement it in a single binary, so there should be no headaches with maintaing two separate plugins.</p>

<h4 id="you-get-a-totalfinder-upgrade-for-free">You get a TotalFinder upgrade for free</h4>

<p>A quote from TotalFinder <a href="http://totalfinder.binaryage.com/licensing">licensing page</a>:</p>
<blockquote>
  <p>A new major OS release (OS X 10.7) will probably require substantial rewrites and intensive testing. I may charge existing users an upgrade fee for a new OS. I expect it to be 50% of the full price.</p>
</blockquote>

<p>This time I’ve decided to give it for free and here are my main reasons:</p>

<ol>
  <li>all TotalFinder licenses are less than a year old, I don’t feel it is fair to charge you twice per year</li>
  <li>sales are still pretty strong and it covers my development costs [happy face]</li>
  <li>you supported me in the early days by buying it, you are all early adopters, thank you!</li>
</ol>

<h4 id="totalfinder-price-will-go-up">TotalFinder price will go up</h4>

<p>TotalFinder is definitely getting better. It is still not perfect, but we are getting there. For example I’ve <a href="/totalfinder-with-cut-and-paste">added cut&amp;paste</a> which alone added <a href="http://kapeli.com">value of $8</a>. I’m committed to continue. I have some great ideas on the list.</p>

<p>But I have different arguments why TotalFinder price should go up:</p>

<ol>
  <li>I believe that early adopters should get a better price</li>
  <li>I have been overwhelmed with user support lately, by increasing the price I get less people jumping in, which gives me more time for real development, instead of sitting in gmail all day long</li>
  <li>I live in the Czech Republic and <a href="http://www.google.com//finance?chdnp=1&amp;chdd=1&amp;chds=1&amp;chdv=1&amp;chvs=Linear&amp;chdeh=0&amp;chfdeh=0&amp;chdet=1306772121487&amp;chddm=359060&amp;q=CURRENCY:USDCZK&amp;ntsp=0">the dollar lost ~20% against Czech currency during last year</a></li>
</ol>

<h4 id="i-will-stop-paying-taxes-for-eu-customers">I will stop paying taxes for EU customers</h4>

<p>Last year when I was opening <a href="http://sites.fastspring.com/binaryage/product/store">the store</a> via <a href="http://fastspring.com">FastSpring</a> I’ve selected option to hide VAT in the price. The <a href="http://en.wikipedia.org/wiki/Value_added_tax">VAT</a> is similar to sales taxes in the U.S.</p>

<p>Why did I do that? Well, here in Europe, it is common that end-user prices in stores are displayed including VAT and people don’t think about it (what a great social hack, isn’t it?). I wanted my ordering process to be as seamless as possible and I didn’t want to spend time explaining people why they should pay 20% more than is advertised on the homepage.</p>

<p>Why it was a mistake? Simply it is not fair. It creates inequality between customers. Some pay more than others. For example from U.S. citizens I get full $15, while for example from German guys I get roughly $12.5. I have to collect the remaining $2.5 for German government (as a VAT).</p>

<p>I’m libertarian by heart and I have to fix this. The day Apple releases Lion I will flip the switch. This will make TotalFinder more expensive for EU customers (according to their country’s VAT rate).</p>

<h3 id="the-bottom-line">The bottom line</h3>

<p>Ok, those changes won’t be popular but I believe they are the right thing to do. Complain to your governments, not me.</p>

<p>If you’ve already bought your TotalFinder copy you made a good investment. It helps you every day with Finder and the value is increasing over time (hopefully). And I will do my best to keep it that way!</p>

<hr />

<div class="footnote">And for all U.S. folks I wish you have a great Memorial Day 2011.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[MacGems == MacHeist meets open-source charity]]></title>
        
        <link href="https://blog.binaryage.com//macgems-macheist-charity/"/>
        <updated>2011-04-01T00:00:00+00:00</updated>
        <id>jduff.github.com:/macgems-macheist-charity</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>I was lucky. TotalFinder is a pretty hot deal. I’m getting quite some emails from promo sites and bundle creators with offers to include TotalFinder. Thank you, maybe later.</strong></p>

<h4 id="today-i-woke-up-with-a-truly-brilliant-idea">Today, I woke up with a truly brilliant idea™</h4>

<p>… I should launch yet another promo site called MacGems.org</p>

<p><img class="clear blog-image" src="/images/macgems-mockup.png" title="Weekly deals on popular Mac software" /></p>

<p>Ok, for customers the only warm difference is that all profits would go to open-source projects. But I believe this should resonate with the developers who should pay this all and be super-happy about it :-)</p>

<h4 id="promomat---a-kind-of-automated-promo-machine">Prom’o’mat - a kind of automated promo machine</h4>

<p>Quality promo sites usually offer 50/50 split with the developer (after discount). They are basically selling developers their huge audiences built around discount promises. They spend their money on maintaining those audiences and promoting the deals.</p>

<p>Couldn’t it be done cheaper? Thinking about it I’ve got an idea. We as developers we have our own audiences, right? We are building great relations with our users. They trust us by using our software, installing updates or simply giving us some attention. Why not put them into work in a good way?</p>

<p>Let’s join and build a promo platform on top of this effort. Open, shared, automated, unobtrusive. And non-profit in the sense, that usual promo profits will go directly to selected open-source projects. Kind of a charity.</p>

<p>Why? Because we all use open-source libraries in our products and we should give back.</p>

<h4 id="how-it-should-work">How it should work?</h4>

<p>Imagine <a href="http://sparkle.andymatuschak.org">Sparkle-like framework</a> implementing a component which can advertise weekly deals on Mac software using a menubar icon (see the screenshot above).</p>

<p>You as a developer joining this service would link it into your product - like you do with Sparkle. This would enable your users with an option to opt-in during installation or later. And opt-out anytime.</p>

<p>This will open a new channel to advertise the deals with almost zero costs. Every developer contributes his own audience and that will start earning him points based on subscriber counts his apps bring to the system.</p>

<p>Now let’s say you want to do a deal for your new app. You need to set a discount 30% or more, select open-source project and submit the app into a queue. But wait, this will be a priority queue working like the Digg. So other developers may dig it up spending their points. It is up to you to do politics, negotiate or buy “digg points” from others.</p>

<p>Sooner or later your app gets finally promoted, it earns some profit and you have to send 50% to selected open-source project (verifiably using Pledgie or similar way). You will then get nice badge from us to be put on your site: “Thanks to your support we were able to give back. We donated $X to the project Y (via promomat)”.</p>

<p>The promo machine should be automated and run without interventions. It is like a self-service.</p>

<hr />

<p>And now go and ask yourself: could this possibly work or is it yet another April joke? :-)</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[IPO48 - a view from the trenches]]></title>
        
        <link href="https://blog.binaryage.com//ipo48-from-trenches/"/>
        <updated>2011-02-18T00:00:00+00:00</updated>
        <id>jduff.github.com:/ipo48-from-trenches</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>I have been a bit silent recently because of my preparations for <a href="http://ipo48.org">IPO48</a>. IPO48 is a weekend event that’s a cross between a startup bootcamp and a hackathon.</strong></p>

<div class="footnote">
First let me thank <a href="http://ipo48.org/Team">the organizers</a> for IPO48. It was a very well prepared and supported event. They did a great job.
</div>

<h4 id="accelerate">Accelerate!</h4>

<p>The goal was to assemble a team and present a viable product to judges at the end of the day.</p>

<p><img class="clear blog-image" src="/images/presenting-sixthsense.jpg" title="Me pitching the SixthSense project" /></p>

<p>I’ve had quite a bit of experience with similar events. Back in the day I was active on <a href="http://en.wikipedia.org/wiki/Demoscene">demoscene</a> which is famous for its “demoparties”. The structure of the event is similar but instead of building products or services, the teams build demos (graphical visualizations) and present them on the big screen to the audience. Or as another example, two weeks ago I was at a hackathon called <a href="http://www.gamejamprague.org">GameJam Prague</a>. The goal was to build a computer <a href="http://www.gamejamprague.org/hry">game in 48 hours</a>.</p>

<p>For me it makes sense because conferences and similar competitions accelerate the “culture of making stuff”. It is important for the ecosystem to work, for new people to get attracted to the scene. Be it a demo, a game or a consumer product. Also it gives the participants valuable feedback after they get back home, get bit of sleep and think about their performance and failures. Not to mention networking opportunities.</p>

<p>That is why I’m so happy this is happening in Prague too. The startup culture is definitely present here.</p>

<h4 id="show-your-skills-in-48-hours">Show your skills in 48 hours</h4>

<p>Let’s make it clear. It is not possible to come and impress in 48 hours from scratch. You need to bring something great with you. Some people bring their projects which are already in progress. Some people bring their ideas into which they have already invested great deal of work. Some people come and have already formed strong teams with years of cooperation fine-tuning. And everyone brings his skills and expertise which he has been building for his whole life in school, work or during the weekends. In reality people bring all blend of all these and more.</p>

<p>This is not the first 48 hours to kick your project off. You need to understand that this is the last 48 hours before the judgement hour. The last 48 hours is a unique time to meet face to face, get a feel of the event, polish your assets and optimize them for competition judges. And that is why mentors’ help is so welcome. A time for fiddling - not a great time to start building something from scratch.</p>

<h4 id="having-a-hackers-mindset">Having a hacker’s mindset</h4>

<p>Paul Graham would say “Make something people want”.<br />And I would add “Don’t ask anyone for permission - just build it!”.</p>

<p>If there is a competition there must be some rules. As a hacker I always question those rules and break them if it makes sense. The most aggressive startup culture is mostly about looking for new patterns and breaking old rules. Disrupting how the world works in the grand scheme of things.</p>

<p>You may question rules which are presented directly to you. The rule of assembling a team? The rule of having a business plan? The rule of starting and building a project in 48 hours? The rule of cooperating just with people from the place? Nothing is written in stone. There is no sharp border. Follow it and cross the blurred line if it gives you an advantage. Set your own rules and give it a shot!</p>

<h4 id="the-project-sixthsense">The project SixthSense</h4>

<p>This is my original project I pitched at IPO48.</p>

<p>Imagine it as a plugin into Google Analytics which will visualize your traffic in 3D and animated in time. Using modern browsers’ features like WebGL and WebSockets. I have been working on this in my spare time since the weekend before IPO48 and I strongly believe it will be useful not only to myself. I will build a prototype and turn it into a product eventually.</p>

<ul>
  <li><a href="http://ipo48.org/project.php?id=549">IPO48 project page</a></li>
  <li><a href="http://sixthsense.binaryage.com">sixthsense.binaryage.com landing page</a></li>
</ul>

<p><img class="clear blog-image" src="/images/sixthsense-early-prototype.png" title="Animated traffic flow on binaryage.com - you should experience a mental orgasm right now if you are a web analyst" /></p>

<h4 id="the-project-21days">The project 21Days</h4>

<p>I was eager to work on SixthSense but I didn’t meet the criteria of minimal (and maximal) number of team members. Or maybe my pitch sucked? Or there were no web analytics enthusiasts? Bummer! I’m open to ideas but I wasn’t really going to draft random people on the project just to fill the void space. I had a clear vision, a working prototype and one great designer working remotely who would definitely support me (yes <a href="http://raist.cz">the same guy</a> I have been cooperating with for more than 10 years). And in the team of two we would probably do better than most other teams because our team has already passed intensive burn-in tests.</p>

<p>Never-mind, I took this as an opportunity to join another project, to meet cool new people and to help them build their product. Quite frankly most teams were looking for hard skills like programmers or graphics designers. Especially mobile device developers…</p>

<p>The 21Days project helps you to be a better person every day. Nicely developed idea, technically quite a simple project.</p>

<ul>
  <li><a href="http://ipo48.org/project.php?id=563">IPO48 project page</a></li>
  <li><a href="http://www.21dayshabit.com">www.21dayshabit.com landing page</a></li>
</ul>

<p><img class="clear blog-image" src="/images/21days-landing-page.png" title="Set better habits and stick with them!" /></p>

<p>I did a prototype of the front-end and took it as an opportunity to try some new technologies (yes I broke my own rule of not trying to learn new technologies at competitions like this). I’ve learned <a href="http://backbonejs.org">backbone.js</a>, bits of <a href="http://documentcloud.github.com/underscore">underscore.js</a> and <a href="http://couchdb.apache.org">CouchDB</a>. Zdenek started working on an iPhone app and other <a href="http://twitter.com/#!/21dayshabit">@21dayshabit guys</a> were busy working on other parts of the project. We started the code from scratch. Yes, it is far from complete, but the good news is that they are going to continue on it. Btw, they are looking for a javascript guy to pickup on my part, <a href="mailto:tomas@21dayshabit.com">give them a hand</a> if you find this interesting.</p>

<h4 id="no-one-starts-a-marathon-with-a-sprint">No one starts a marathon with a sprint</h4>

<p>In my opinion IPO48 should not be the starting point of your project. It should be just one of many check points on a long run. A validation that you are on the right track. A source of inspiration and motivation. A chance to accelerate for few weeks. A great networking opportunity and injection of valuable feedback.</p>

<p>The future will show how many “startups” will manage to continue work on their projects in the following weeks and months. And how many will manage to turn them into real products or services with a working pricetag. I’m very curious how many will survive the exposure to the cruel market.</p>

<p>I wish good luck to all teams which will continue beyond IPO48, even those which didn’t make it into the main competition. I will watch you closely and look forward to meet you again at similar events!</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[I've just set up myself 20% time]]></title>
        
        <link href="https://blog.binaryage.com//20-percent-time/"/>
        <updated>2011-02-01T00:00:00+00:00</updated>
        <id>jduff.github.com:/20-percent-time</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>This is a bit of a schizophrenic situation, but I just agreed with myself to spend 20% time on projects which are not related to TotalFinder. Yes, inspired by <a href="http://lifehacker.com/5497057/set-up-your-own-google+style-20+percent-time-to-try-new-projects">Google’s idea</a>.</strong></p>

<h4 id="it-has-to-be-fun">It has to be fun!</h4>

<p>Working on TotalFinder is still fun. But the time I spend on emails is greater than the time spent programming new features. Nobody can do support better than me. Sad, but true.</p>

<p>I spent last weekend with friends and other folks at <a href="http://gamejamprague.org">GameJam Prague</a>. The goal was to create a game in 48 hours. A classic hackathlon-style event, part of the <a href="http://globalgamejam.org">Global GameJam</a>.</p>

<p>I’m a big believer in new browser technologies, JavaScript and related things. I took the <a href="http://impactjs.com">ImpactJS</a> game engine and I tried to build a simple game on top of it. I’ve had this on my list for a while, but never managed to save some time to really get on it.</p>

<h4 id="dino-needs-love">Dino needs love</h4>

<p>And this is the game we’ve created. Many thanks to <a href="http://raist.cz">Raist</a> who did the graphics and some level design.</p>

<p><a href="http://dino.binaryage.com"><img src="http://dino.binaryage.com/media/splash1.gif" /></a></p>

<p>It is a really short game with a nice twist at the end. It should take you 5 mins to complete :-)</p>

<h4 id="im-still-in-love-with-game-making">I’m still in love with game making</h4>

<p>In my past life I made a living by working on big games. I spent 3 years working on tools for <a href="http://www.mafia2game.com">Mafia2</a>.</p>

<p>But also I’ve produced my own independent games just for fun. And some unfinished of course…</p>

<ul>
  <li><strong>PacWars2</strong> - a remake of very old network game full of pac-mans (2002).</li>
  <li><strong>SilverStunts</strong> - an experimental game engine in Silverlight (2007).</li>
</ul>

<p><a href="http://pw2.hildebrand.cz"><img src="http://pw2.hildebrand.cz/shots100/shot12.gif" width="260" /></a>
<a href="http://www.codeproject.com/KB/silverlight/sstunts.aspx"><img src="/images/silverstunts-editor.png" width="324" /></a></p>

<h4 id="interested-in-javascript-games">Interested in javascript games?</h4>

<p>Show us what are you working on. Maybe we can work together and make something interesting.</p>

<p><em>Google Chrome is becoming a new game engine. And people have it already at home!</em></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The second year of BinaryAge: Independence]]></title>
        
        <link href="https://blog.binaryage.com//the-second-year-of-binaryage/"/>
        <updated>2010-12-31T00:00:00+00:00</updated>
        <id>jduff.github.com:/the-second-year-of-binaryage</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>It was a wonderfully busy year. Today I had a few moments to sit down and look back.<br />Prior to reading you may want to read about <a href="http://blog.binaryage.com/the-first-year-of-binaryage">the first year of BinaryAge</a>.</strong></p>

<h4 id="totalfinder-with-tabs">TotalFinder with Tabs!</h4>

<p>I found out that really <strong>the tabs</strong> is what people want. And later I realized they are also willing to pay for it. This is my site’s traffic after publishing the article <a href="http://blog.binaryage.com/totalfinder-with-tabs">TotalFinder with Tabs</a> on Jan 11:</p>

<p><img class="clear blog-image" src="/images/tabs-announcement-traffic.png" title="The traffic generated by tabs announcement on Jan 11" /></p>

<h4 id="transpond-acquired-by-webtrends">Transpond acquired by Webtrends</h4>

<p>Maybe you remember I was working on TotalFinder on the side. My day-job was a web-development for Transpond. We were building “The Wizard” product which allows non-programmers to create applications from pre-defined templates and publish them on Facebook, microsites or mobile devices.</p>

<p><a href="http://transpond.com"><img class="clear blog-image-clear" src="/images/webtrends-apps-banner.png" title="Transpond's DYI builder for Facebook Apps acquired by Webtrends" /></a></p>

<p>Transpond was a VC-backed startup based in San Francisco. Luckily enough we <a href="http://www.readwriteweb.com/archives/facebook_app_developer_shortage_webtrends_apps.php">were acquired</a> by great folks at <a href="http://webtrends.com">Webtrends</a> in August 2010. It was a nice validation of the concept of a web-based app builder, but for me it was the right time to leave and start working in <a href="http://www.binaryage.com">BinaryAge</a> fulltime.</p>

<h4 id="totalfinders-glorious-launch">TotalFinder’s glorious launch</h4>

<p>During September I prepared version 1.0 and <a href="http://blog.binaryage.com/totalfinder-birthday-launch">launched it</a> on September 27th. It was a huge success. I wish every product to have such a great revenue curve during the launch. See the shape:</p>

<p><img class="clear blog-image" src="/images/perfect-launch.png" title="This is what the revenue curve should look like!" /></p>

<p>I couldn’t have wished for a better launch. People love the product and most prior beta users purchased a license on day #1 or shortly after.</p>

<p>The only problem which comes with a success is a support burden. With tons of emails landing in my inbox I had to move from an active coding role to become an emailing machine. Luckily enough I found nice people who were helping me with the overload. <strong>Roman</strong> did some programming and implemented Folders On Top and Cut&amp;Paste. <strong>Lorenzo</strong> and <strong>Sebastian</strong> helped with user support. And many <a href="https://github.com/binaryage/totalfinder-i18n/contributors">other folks</a> helped with translations, graphics and other random tasks. Thank you very much!</p>

<h4 id="im-a-free-man-finally">I’m a free man, finally!</h4>

<p>Good news! I’ve earned enough money to support myself for at least one year of future development.</p>

<p>It is hard to describe my feelings using words. Launching a first profitable product on the side was like finding The Atlantean Sword and beating wild dogs that were chasing me.</p>

<div class="fluid-object">
  <object><param name="movie" value="http://www.youtube.com/v/RlBcDnRzmM0?fs=1&amp;hl=en_US&amp;start=160" />&lt;/param&gt;<param name="allowFullScreen" value="true" />&lt;/param&gt;<param name="allowscriptaccess" value="always" />&lt;/param&gt;<embed src="http://www.youtube.com/v/RlBcDnRzmM0?fs=1&amp;hl=en_US&amp;start=160" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" />&lt;/embed&gt;</object>
</div>

<p>Did he say “Chrome”? That cannot be a coincidence. The Chromium creators are my helping gods ;)</p>

<h4 id="whats-next-in-2011">What’s next in 2011?</h4>

<p>TotalFinder is my product number one. I’m aware that it is not perfect and still has a beta quality to it. It is good enough to be usable, but it has plenty of bugs and compatibility/performance issues. Besides improving it I will continue to spend time doing good user support. Maybe I will ask for more help from <a href="http://be-yellow.com">other folks</a> but still I feel that it is important to stay in touch with my users although it may slow down the pace of development. If something hurts my users, it must hurt me in my inbox. This year I will turn TotalFinder into a great polished product which makes you happy.</p>

<p>I have also some ideas for new Mac apps and web services. I will be actively looking for reliable well-rounded programmers to outsource it. I have already started with one guy. We’ve been building TotalTranslate - a simple system-wide utility for translating texts available on a keyboard shortcut. I was planning it for Mac App Store launch, but unfortunately we didn’t make it on time. Anyway, if you are an entrepreneurial hacker who wants to build an awesome stuff with me, please <a href="mailto:antonin@binaryage.com">drop me a line</a>.</p>

<p>I’m a big fan of open-source projects and I’d like to help fund more of them and help the ecosystem. I have one charitable project in my mind. I won’t tell you any details at this point because it is really in early stage and it depends on other people more than myself.</p>

<p>Also I’m planning to move to San Francisco in the second half of the year.<br />Prague was great, but it is time to move to some place where <strong>the luck is happening to hackers</strong>.</p>

<div class="fluid-object">
  <object type="application/x-shockwave-flash" id="clip_embed_player_flash" data="http://www.justin.tv/widgets/archive_embed_player.swf" bgcolor="#000000"><param name="movie" value="http://www.justin.tv/widgets/archive_embed_player.swf" /><param name="allowScriptAccess" value="always" /><param name="allowNetworking" value="all" /><param name="allowFullScreen" value="true" /><param name="flashvars" value="auto_play=false&amp;start_volume=25&amp;title=Tom Preston-Werner at Startup School 2010: Optimizing for happiness&amp;channel=c3oorg&amp;archive_id=272031754" /></object>
</div>

<p><a href="http://www.justin.tv/c3oorg/b/272031754" class="trk" style="padding:2px 0px 4px; display:block; width: 320px; font-weight:normal; font-size:10px; text-decoration:underline; text-align:center;">Watch video <b>Optimizing for happiness</b> on Justin.tv</a></p>

<p>At this point I want to thank two great companies which helped me tremendously in 2010. <a href="http://github.com">GitHub</a> and <a href="http://fastspring.com">FastSpring</a>. Seriously friends, they have been changing hackers’ lives.</p>

<hr />

<p>Thanks for your support and I wish you all the best in the new year.</p>

<div class="footnote">I'd like to also thank my family, friends and all contributors who helped to make this real.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder 1.1 with Cut&Paste]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-with-cut-and-paste/"/>
        <updated>2010-12-06T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-with-cut-and-paste</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/totalfinder-icon.png" class="intro-icon" /></p>

<p>** Today, I’m happy to announce a new major release of TotalFinder. The new version <a href="http://totalfinder.binaryage.com/changes">includes Cut&amp;Paste and many small improvements and fixes</a>. You may grab TotalFinder 1.1 today <a href="http://mupromo.com/TotalFinder">for just $9 via MacUpdate Promo</a>. **</p>

<h4 id="cutpaste-should-be-a-human-right">Cut&amp;Paste should be a human right</h4>

<p>We all know Cut&amp;Paste when working with text, right? <a href="http://getsatisfaction.com/binaryage/topics/move_files_and_folders_with_cut_past">Move files and folders with cut &amp; paste</a> was the single most requested feature on the forums.  Now you can start using  ⌘+X and  ⌘+V to cut and paste files in TotalFinder. It works like a charm!</p>

<p>I’m really happy about the implementation, because we tricked the Finder into thinking that you just did Drag &amp; Drop internally. I believe the feature is rock solid and covers all the possible scenarios which may arise with Drag &amp; Drop. You know, dealing with files is a serious business and I’m really careful about it.</p>

<p>This feature was implemented by <a href="https://github.com/akahan">Roman Yusufkhanov</a> who is the new guy helping me with TotalFinder programming. I plan to do a small interview with him in some future blog post. So you guys can get to know him a bit more personally.</p>

<h4 id="check-out-products-at-kapelicom">Check out products at <a href="http://kapeli.com">Kapeli.com</a></h4>

<p>Perhaps you know the utility called <a href="http://kapeli.com">MoveAddict</a> by <strong>Bogdan Popescu</strong>, which aims to solve the same problem. I’m a bit sad to compete with Bogdan, because he definitely put a lot of good work into his app and this release will harm his sales I guess. But I feel strongly that Cut&amp;Paste should be an integral part of TotalFinder and as the most requested feature this is the best thing for my users.</p>

<p>Please do me a favor. Visit his site and <a href="http://kapeli.com/switche">check out some of the other products</a> he has created. Much appreciated, thanks!</p>

<h4 id="totalfinder-is-on-sale-via-macupdate-promo-today">TotalFinder is on sale via <a href="http://mupromo.com">MacUpdate Promo</a> today!</h4>

<p>The price is set to $9 which is 40% discount. Given that the Cut&amp;Paste feature alone has the price tag $8 (MoveAddict), you will get great value for a really great price. I hope you like my aggressive pricing.</p>

<h4 id="whats-next">What’s next?</h4>

<p>TotalFinder is selling very well and I’m pretty busy with supporting all the people. The development is slower but I’m getting great help from <a href="https://github.com/akahan">Roman</a>, <a href="http://getsatisfaction.com/people/sebastian_tischer">Sebastian</a>, <a href="http://getsatisfaction.com/people/kiwidesign">Lorenzo</a>, <a href="http://robinraszka.com">Robin</a>, <a href="http://github.com/melda">Melda</a> and <a href="https://github.com/binaryage/totalfinder-i18n/contributors">others</a>. Also I’d like to thank all the translators for <a href="https://github.com/binaryage/totalfinder-i18n/network">keeping up</a> with recent TotalFinder changes.</p>

<p>Please check this <a href="http://getsatisfaction.com/binaryage/ideas/popular">list of popular ideas</a>. And guess what is going next… :-)</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder discount for friends]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-discount-coupon-with-friends/"/>
        <updated>2010-10-06T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-discount-coupon-with-friends</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/totalfinder-icon.png" class="intro-icon" /></p>

<p>** I have been giving <a href="http://totalfinder.binaryage.com/free-licenses">free licenses</a> to people who contributed their time to TotalFinder.<br />As a side effect I’ve also had tons of emails from students <a href="http://getsatisfaction.com/binaryage/topics/student_discount-457pf">asking for a free license or discount</a>. Their reason is mostly “because I’m poor” or something similar. **</p>

<h4 id="i-have-also-been-a-student-for-a-big-part-of-my-life">I have also been a student for a big part of my life</h4>

<p>But asking for something just because I was poor always seemed like a bad idea to me. Next time <strong>ask how you can help</strong> and offer something you can do in exchange! We all have 24 hours per day at our disposal.</p>

<h4 id="asking-how-you-can-help-good">Asking how you can help? Good!</h4>

<p>You can help me sell more TotalFinder licenses and earn a $5 discount for yourself and 2 other friends.<br />You have some friends, right? Doing something for your friends for free is always a good idea.</p>

<p><img src="/images/totalfinder-discount-for-friends.gif" style="border:1px solid #888;" /></p>

<p>You may want to <a href="http://totalfinder.binaryage.com/licenses-for-friends">visit this page</a> which will help you send a message to your friends.</p>

<h4 id="how-does-it-work">How does it work?</h4>

<p><img src="/images/totalfinder-buy-30.png" /></p>

<p>You buy <a href="https://sites.fastspring.com/binaryage/instant/totalfinder-friends">TotalFinder Friends</a> for $30 and I will send you a classic license plus two coupons as URLs. You can then send the coupon links to your friends. Either as a gift or they can give you $10 back.</p>

<h4 id="what-if-i-have-a-multi-license-already">What if I have a multi-license already?</h4>

<p><a href="mailto:antonin@binaryage.com">Send me a request</a> and I will re-license the multi-license for you. The discount is the same.</p>

<h4 id="whats-next">What’s next?</h4>

<p>Ok, guys. This was the last marketing task I have on my list for now. I’d rather spend time coding than thinking how to squeeze even more dollars from the product. It was a pretty juicy week already :-)</p>

<p>Now let’s get back to work on TotalFinder features and bug-fixes.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder in Enterprise!]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-enterprise-office-licensing/"/>
        <updated>2010-09-30T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-enterprise-office-licensing</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/totalfinder-icon-lock.png" class="intro-icon" /></p>

<div class="blog-update">UPDATE: Two months after I started selling TotalFinder I've decided to remove this option. This experiment had zero traction. I would rather simplify licensing and instead focus more on making the product awesome. If you have any special licensing needs, please contact me at <a href="mailto:antonin@binaryage.com">antonin@binaryage.com</a>. Thanks!</div>

<p>** Captain Kirk just called me. He wants to buy a multi-license for his crew. But the problem is that even Spock is unable to tell how many licenses they will need to operate. Luckily enough, they at least know how many people use Macs on USS Enterprise today. **</p>

<h4 id="licensing-to-companies-labs-and-working-groups">Licensing to companies, labs and working groups</h4>

<p>So I promptly came up with a <a href="http://totalfinder.binaryage.com/office-license">new crazy scheme for licensing</a> to groups.</p>

<p>The idea is that if you are a boss you can send me an additional $50 for the <strong><a href="https://sites.fastspring.com/binaryage/instant/totalfinderlock">TotalFinder Lock</a></strong> and apply it to the group. Then you can stop worrying about fluctuations in your group for one year.</p>

<h4 id="and-do-you-want-to-know-what-he-told-me">And do you want to know what he told me?</h4>

<div class="fluid-object">
  <object><param name="movie" value="http://www.youtube.com/v/sghncnGkFAo?fs=1&amp;hl=en_US" />&lt;/param&gt;<param name="allowFullScreen" value="true" />&lt;/param&gt;<param name="allowscriptaccess" value="always" />&lt;/param&gt;<embed src="http://www.youtube.com/v/sghncnGkFAo?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" />&lt;/embed&gt;</object>
</div>

<p>But don’t be over-excited. They’re buying licenses only for officers in the command center…</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The Crash Reports Lottery - grab your free licenses]]></title>
        
        <link href="https://blog.binaryage.com//winners-crash-reports-lottery/"/>
        <updated>2010-09-27T00:00:00+00:00</updated>
        <id>jduff.github.com:/winners-crash-reports-lottery</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** <a href="/totalfinder-birthday-launch">I promised some fun here</a> and here is the announcement of the lottery winners.<br />I have here almost $1000 worth of licenses for lucky crash reporters. **</p>

<h4 id="how-does-the-lottery-work">How does the lottery work?</h4>

<p>I’ve had over 11000 crash reports during this year. That is a scary number. But the big portion of them were infamous crashes of <a href="http://blog.binaryage.com/localized-totalfinder-keeps-crashing">the broken expiration code in 0.9.5</a>. That is fair, everyone had a chance to send a crash report at some point although it caused some sleepless nights to me ;-) Maybe you wonder how I managed to process so many reports. They are just emails and I made a smart decision to <a href="http://blog.binaryage.com/crash-reporting-in-binaryage/">use gmail as a crash-report database</a> because it has the best search on the planet.</p>

<p>I decided to draw 64 unique winners, so nobody can win two or more licenses. Also I decided to honor the number of crash reports you’ve sent so every email counts as a new ticket in the lottery.</p>

<p>Here is <a href="http://gist.github.com/599631">the script</a> if you are interested.</p>

<h4 id="but-wait-we-need-a-random-seed">But wait, we need a random seed</h4>

<p><a href="http://twitter.com/blubalu/status/25711610348">@blubalu</a> was the fastest random notary in <a href="http://twitter.com/binaryage">@binaryage</a>. Note that he uses TweetDeck :-)</p>

<p><a href="http://twitter.com/blubalu/status/25711610348"><img src="/images/randseed-lottery-1.png" /></a></p>

<h4 id="and-the-winners-are">And the winners are…</h4>

<p>These guys should have their email already. <strong>Congratulations!!!</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-darwin10]
    total 11380 crash reports (Mon Sep 27 19:05:40 UTC 2010)
    -----
    01. #04470 ****@******.us
    02. #05941 ****@**********.com
    03. #10773 ********@gmail.com
    04. #07946 *******@******.com
    05. #04688 ******@*********.nl
    06. #03893 ******@******.ru
    07. #00374 *************@gmail.com
    08. #00337 ********@gmail.com
    09. #04914 ***@******************.com
    10. #09905 ************@gmail.com
    11. #02243 *******@gmail.com
    12. #08299 *******@**********.com
    13. #07856 **********@*****.it
    14. #01727 ****************@googlemail.com
    15. #07299 ****************@***********.ch
    16. #01846 ***********@***.de
    17. #10692 *********@*****.com
    18. #08631 *******@gmail.com
    19. #11209 *******@hotmail.com
    20. #01635 ******@**********.com
    21. #07795 ******@***********.nl
    22. #09360 **********@gmail.com
    23. #11022 *******@gmail.com
    24. #02362 *********@**.com
    25. #08778 ***************@**.com
    26. #08112 **********@gmail.com
    27. #07326 *********@****.dk
    28. #04991 ****@*******.com
    29. #07439 **********@*******.nl
    30. #05867 ***@*****.com
    31. #07939 ********@*******.net
    32. #09680 *****@*******.net
    33. #03914 ************@gmail.com
    34. #08030 *******@gmail.com
    35. #02222 ********@*****************.at
    36. #09093 ************@gmail.com
    37. #04656 **************@**.com
    38. #02429 *******@*******.de
    39. #04854 *******@***********.br
    40. #06507 ***@*****.com
    41. #01739 ********@gmail.com
    42. #10809 ***********@*******************.com
    43. #09357 ********@gmail.com
    44. #09974 *****@***.de
    45. #03681 ************@**.com
    46. #07989 *********@*********.net
    47. #08420 *****@mac.com
    48. #06056 ****@******************.com
    49. #10050 ********@mac.com
    50. #00533 *****************@gmail.com
    51. #05393 ***********@gmail.com
    52. #08885 *******@*********.com
    53. #09179 *******@*******.edu
    54. #05683 ****@**********.com
    55. #04868 ****************@gmail.com
    56. #04550 *******@****************.com
    57. #04911 ***************@**********.net
    58. #04404 **********@**.com
    59. #02574 *****@*****.com
    60. #04021 ***********@gmail.com
    61. #10956 **********@gmail.com
    62. #08801 ***********@*******.com
    63. #01210 **********@*****.com
    64. #11244 ****@*************.au
</code></pre></div></div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Happy birthday, TotalFinder!]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-birthday-launch/"/>
        <updated>2010-09-27T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-birthday-launch</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** Today is one year since I <a href="http://blog.binaryage.org/totalfinder-launch-date">started hacking on TotalFinder</a>. And today is the first day you can buy a license if you want to support the next years of development. **</p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-1.0.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-1.0.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changes">http://totalfinder.binaryage.com/changes</a></div>
</div>

<h4 id="yeah-totalfinder-has-the-mojo">Yeah, TotalFinder has the Mojo</h4>

<p>Not everything is perfect of course, but… just hit it!</p>

<div class="fluid-object">
  <object><param name="movie" value="http://www.youtube.com/v/pKCZrcoQa7I?fs=1&amp;hl=en_US" />&lt;/param&gt;<param name="allowFullScreen" value="true" />&lt;/param&gt;<param name="allowscriptaccess" value="always" />&lt;/param&gt;<embed src="http://www.youtube.com/v/pKCZrcoQa7I?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" />&lt;/embed&gt;</object>
</div>

<h4 id="thank-you-all">Thank you all</h4>

<p>I want to thank you all who have supported my work and helped with the project.</p>

<p>People have asked for discounts for alpha testers. But I think $15 is already a great price. Later with more features TotalFinder will probably climb to $20 price-point, so you may look at $15 as an introductory price. Also please note that there is volume pricing available, when you buy 3 or more licenses, you get one license for $10. That’s a steal! Buy one TotalFinder license for yourself and give two licenses as a gift to some Mac friends. Starting from 1st October I will be re-licensing them for you if you send me an email. I will write a separate blog post about it soon. There will also be a special license for a boss who wants to buy a mass license for his company. It will be one-time per-company fee without the headaches of keeping track of the headcount. <a href="mailto:antonin@binaryage.com">Let me know</a> if you have other thoughts.</p>

<p>I will also give away $1000 worth of licenses in a few hours. I will do a small lottery and pick from people who have sent crash reports. Also all translators and people who helped a lot may expect a happy email soon. I have all you guys on my list of free-give-away-licenses. Stay tuned!</p>

<h4 id="new-documentation">New documentation</h4>

<p>There is a new <a href="http://totalfinder.binaryage.com/documentation">documentation section</a> on the site which should answer your questions about the new release and licensing options.</p>

<p>And please report here any troubles and annoyances with the site, payment system and such. You know, I’m doing a commercial launch for the first time and as you can imagine my last few days were pretty busy.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder will launch commercially on Sep 27]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-launch-date/"/>
        <updated>2010-09-01T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-launch-date</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** I’m in <a href="/totalfinder-has-fulltime-developer">better control of my time</a> now, so I can set the launch date to Sep 27, 2010.<br />I have almost a whole month to polish the product, write docs and open the store. **</p>

<h4 id="it-is-a-special-day-its-totalfinders-birthday">It is a special day. It’s TotalFinder’s birthday!</h4>

<p>Please don’t miss the event. TotalFinder will turn one year since the very first commit.</p>

<p><img class="clear blog-image no-shadow" src="/images/totalfinder-first-commit.png" title="Holy cow! It worked!" /></p>

<p>It is quite interesting to look back at how it started. In the mid of September 2009 I was tinkering with <a href="http://visor.binaryage.com">Terminal.app’s Visor</a> code and ported it to Snow Leopard. And then when I was playing with the awesome <a href="http://www.fscript.org">F-Script</a> and inspecting random apps I discovered by accident that Finder.app is in fact a Cocoa app. This was new in Snow Leopard so I ran a <a href="http://www.codethecode.com/projects/class-dump">class dump</a> on it and … Holy cow! This might be something really interesting I’ve just discovered here!</p>

<p>You can clearly see that it started as a pure weekend project. Initial weekends of excitement, Sep 27-28 and Oct 03-04. Then two weekends off because I went on a trip to San Francisco. But then after the return I continued persistently “on the path to the holy grail”. The first public version came out about one month later as <a href="http://blog.binaryage.com/totalfinder-alpha">TotalFinder ALPHA</a>.</p>

<div style="text-align:center">
  <div><i>“You Can Only Connect The Dots By Looking Backwards”</i></div>
  <div><i>-- <b>Steve Jobs</b>--</i></div>
</div>

<h4 id="i-promise-no-new-features-just-bug-fixing-and-polishing">I promise no new features, just bug-fixing and polishing</h4>

<p>Version 1.0 is going to be a nice release. After the last broken releases I really want to take time and make it as good as possible. People who upgraded to 0.9.9 can stick with it till Sep 27. Folks who switch to <a href="">the BETA channel updates</a> will probably get several minor releases during the month.</p>

<h4 id="help-me-with-marketing">Help me with marketing</h4>

<p>I’m a developer, not a marketer. But I’m able to learn quickly. The guys from <a href="http://www.micropreneur.com/">Micropreneur Academy</a> always stress that marketing is at least 33% of the success. I did my 33% part on coding. If you have any ideas and want to help me make it big on launch day, I will be happy to discuss it.</p>

<p>Anyway, have a great September and hope to see you downloading TotalFinder 1.0 :-)</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Aargh, broken auto-updater]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-broken-updater/"/>
        <updated>2010-08-31T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-broken-updater</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** New TotalFinder 0.9.9 is out. Nothing exciting here.<br />Just embarrassment that I managed to break auto-updater. **</p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.9.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.9.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changes">http://totalfinder.binaryage.com/changes</a></div>
</div>

<h4 id="hey-you-dont-click-that-button">Hey you! Don’t click that button!</h4>

<p>I didn’t notice it, but I broke the Sparkle updater in previous releases.<br />The <code class="language-plaintext highlighter-rouge">relaunch</code> script is missing in 0.9.7 and 0.9.8.</p>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/dont-click-that-button.png" title="Don't click that button!" /></p>

<p>Instead of clicking ‘Install Update’, please directly download <a href="http://downloads.binaryage.com/TotalFinder-0.9.9.dmg"><strong>TotalFinder 0.9.9</strong></a> and install it manually from the DMG archive.</p>

<p>To prevent something like this in the future I have created small script which is able to extract DMG plus all pkg files inside and tell me the difference between releases. This enables me to do a final check of what is going to be included in the new releases. The build process is too complicated to trust (XCode4 is alpha).</p>

<p><img class="clear blog-image no-shadow" src="/images/totalfinder-dmg-diff.png" title="Diffing DMG between releases (the diff app is p4merge for Mac)" /></p>

<p>This way I can spot unwanted file inclusions/exclusions or unexpected file size changes in future releases.</p>

<h4 id="please-switch-to-beta-updates-channel">Please switch to BETA updates channel</h4>

<p>I want to prevent future broken releases, so I have introduced two channels for updates. The idea is similar to Chromium update channels. You may stick with:</p>

<ul>
  <li><strong>Stable Channel</strong> - contains infrequent well-tested major versions (1.x line)</li>
  <li><strong>Beta Channel</strong> - contains frequent minor versions (1.x.y line)</li>
</ul>

<p><img class="clear blog-image no-shadow" style="width: 300px" src="/images/pick-beta-channel.png" title="You may switch between stable and beta channel" /></p>

<p>I expect you, readers of this blog, to switch to the BETA channel and stay on the cutting-edge TotalFinder version to help me catch any possible problems before launching to a wider audience. Also this enables me to be much more agile in releasing new versions. Thanks!</p>

<h4 id="compatibility-with-future-finder">Compatibility with future Finder</h4>

<p>Since I’m a fresh member of a Mac Developer Program I was able to prepare and test TotalFinder with the future Finder version (10.6.6). All looks fine. Don’t be afraid of updating OSX when the time comes.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder just got a full-time developer]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-has-fulltime-developer/"/>
        <updated>2010-08-28T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-has-fulltime-developer</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** I have been overwhelmed by the positive reactions and growing user count.<br />So I decided to quit my job and start working on TotalFinder full time. **</p>

<h4 id="born-to-make-something-people-want">Born to <i>make something people want</i></h4>

<p>I have been doing some open-source work for a while in my spare time and my tools for web developers became quite popular. My Firefox extensions are active every day in about 50k Firefox installations (according to <a href="http://addons.mozilla.org">AMO</a>). Of course, I would like to improve them, support them and work on similar tools all the day long, but I was unable to figure out any sustainable way to earn money from Firefox addons.</p>

<p>On the other hand Mac software seems to be another kind of beast. During the last few months I’ve got so many emails from people excited about TotalFinder and declaring they will buy it when 1.0 is out. And personally I recognize many indie software companies who successfully develop small software on the Mac platform. <a href="http://www.madebysofa.com/indiefever">The indie culture is there</a>.</p>

<p>As of today I believe TotalFinder is a great chance for me to bootstrap BinaryAge Software - a small product company working on software for power users and developers.</p>

<h4 id="yes-mom-i-did-it-again">Yes mom, I did it again!</h4>

<p>Quite frankly, this is not my first attempt to quit a job and start rolling my own product. It was three years ago when I decided to quit a dream position of Tools Engineer on <a href="http://www.mafia2game.com">the Mafia2 game</a> and go my own way. You should note that <a href="http://www.gamerankings.com/pc/942953-mafia-ii/index.html">Mafia2 was released a few days ago</a> after an unbelievable 8 years of development. You have to check it out, it is gold poured by sweat and tears. This is almost an emotional moment for me because I spent almost 3 years on the team. I was responsible for tools like the exporting plugin for 3DSMAX, Motion Builder and some plugins for an in-house game editor.</p>

<p>After leaving I switched my life into economy mode and spent one year doing consultancy to save some money while actively looking for co-founders. I teamed up with other guys from a local community and tried to build some cool <a href="http://hashpage.com">web-based web builder</a> and go big (“FriendFeed has to buy us or die!”). One guy left the team after two months after he got an offer for “paid work” and the second one never managed to leave his day job. I ended working alone full time night and day on the project for more than 8 months and burned out without seeing the light at the end of the tunnel. But this story has been written already <a href="http://blog.binaryage.com/the-first-year-of-binaryage">elsewhere</a>.</p>

<p>For the last 15 months I was working for <a href="http://transpond.com">Transpond.com</a> (formerly <a href="http://iwidgets.com">iWidgets.com</a>). Transpond is a small <a href="http://techcrunch.com/2009/02/03/iwidgets-raises-41-million-for-social-syndication-platform">VC-backed</a> SF-based company. They have been working on a really interesting concept of a web-based builder for small web applications. Something I was exploring really hard for the last several months. They offered me a job to help them build the product. I was tele-working for them from Prague over Skype and because I still stayed in economy mode, this helped me to pay off my debts and save some money for another round.</p>

<p>This month <a href="http://www.readwriteweb.com/archives/facebook_app_developer_shortage_webtrends_apps.php">Transpond was acquired by WebTrends</a>. This is big news and a great achievement for <a href="http://yared.com">Peter Yared and his team</a>. Congratulations! But for me it is the best moment to leave. WebTrends seem to be great guys who are doing a fine job, but 400+ headcount company is freakingly huge for a hacker like me. I have ambitions to build my own stuff the way I see fit. Not working on tedious client projects and selling my best time instead of building something really useful.</p>

<h4 id="thank-you-all">Thank you all</h4>

<p>And that is why I’d love to build software for passionate users. The users like you or myself who would not buy something if they couldn’t see real value in it. The users who are autonomous, involved and sharply honest. The users who are not forced to work with the software to pay the bills, but users who have deliberately decided to use the software because it makes them happier, more productive or simply better. Those are the users I want to build software for. The Macintosh community seems to be a great fit. I’m quite new here and still learning. But if users stick with my products, I know I’m doing it well. Thank you all for showing me great support in this direction so far.</p>

<p>It was never an easy decision to drop regular paychecks and bet on some possible future software sales. I would guess some readers of this blog are also developers who have their own pet projects or product ideas and may be thinking about something similar. Maybe today is not yet the right time to jump straight into it for you, but you may at least follow me on this roller-coaster path by reading this blog.</p>

<div class="footnote">Technical note: In the future I want to share more about internals of BinaryAge development on this blog. If you are just interested in new version announcements, you may consider subscribing to <a href="#" onclick="$('.subscribe-link').trigger('click'); return false">the news from BinaryAge mailing list</a> which will be a less frequent channel of updates without hairy thoughts like this blog post :-)</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder summer update]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-summer-update/"/>
        <updated>2010-08-17T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-summer-update</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>** Hey, TotalFinder 0.9.8 is out. Unfortunately nothing much new. Just fighting fires. **</p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.8.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.8.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="the-crashing-nightmares">The crashing nightmares</h4>

<p>0.9.5 and 0.9.6 were pretty bad releases. There was a bug introduced by new localization code. Both versions <a href="/localized-totalfinder-keeps-crashing">started crashing</a> immediately after expiration. Unfortunately this rendered the auto-update mechanism defunct.</p>

<p>The one-day-old 0.9.7 is also bad. Some people experienced crashes when manipulating tabs or closing windows. I believe I nailed the problems in 0.9.8.</p>

<p>Thank you all who sent me crash reports. Unfortunately I wasn’t able to respond to all of them.</p>

<h4 id="tabs-match-new-chrome-look">Tabs match new Chrome look</h4>

<p>I’ve updated the tabs-rendering code from latest Chromium sources. Kudos to Google’s guys.</p>

<p><img class="clear blog-image" src="/images/new-chrome-tabs.png" title="Updated tabs rendering to match latest Chrome" /></p>

<h4 id="totalfinder-still-runs-after-expiration">TotalFinder still runs after expiration</h4>

<p>I’ve added small a reminder that this software will become paid software soon. I’m pretty sure you know this already. But over the internets I saw some discussions of people who don’t read or who expect to stick with an alpha forever. So I wanted to make it clear this way. You can dismiss that small gray sticker in the top-right corner by clicking on it. I quite like this solution. This may be my future way how to communicate important things to all TotalFinder users.</p>

<p><img class="clear blog-image" src="/images/totalfinder-alpha-reminder.png" title="Alpha Reminder" /></p>

<p>That crashing lesson was a terrible experience and I want to prevent something like it in the future. I decided to run the same code path after expiration. This way I don’t need to test the expiration state intensively prior to every release.</p>

<p>To force people to upgrade I’ve added a little annoyance. Every 10 tab switches a dialog pops up which reminds you that you should update to the latest version.</p>

<p><img class="clear blog-image" src="/images/totalfinder-expired.png" title="Expired version has annoying limitation" /></p>

<h4 id="spent-some-time-on-mastering-xcode4">Spent some time on mastering XCode4</h4>

<p>I was so excited about XCode4 that I’ve converted TotalFinder projects and used it for development. This slowed me down quite a bit, because it is still buggy alpha software with many flaws. It also has a completely new UI to learn. But I couldn’t help myself. I need to live dangerously on the bleeding edge. I think you guys who are using TotalFinder since the early versions know exactly what I mean :-)</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Localized TotalFinder keeps crashing after expiration]]></title>
        
        <link href="https://blog.binaryage.com//localized-totalfinder-keeps-crashing/"/>
        <updated>2010-07-28T00:00:00+00:00</updated>
        <id>jduff.github.com:/localized-totalfinder-keeps-crashing</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>My mom always told me: “write automated tests, my boy”<br />But you know… I had always better things to do.</strong></p>

<h4 id="after-expiration-totalfinder-wants-to-say-something">After expiration TotalFinder wants to say something…</h4>

<p>But my localization function crashes for some reason in Russian, Japanese and Chinese versions. And maybe in others too! <strike>I would guess translators haven't used localization string placeholders correctly or it's something on my side.</strike></p>

<p>The reason was much simpler. I just used a plain C string instead of Objective-C NSString at one place when printing expiration info. This caused the crash in all versions regardless of localization state. This bug affects both 0.9.5 and 0.9.6.</p>

<h4 id="the-rescue-please-upgrade-to-totalfinder-099-manually">The rescue: Please upgrade to TotalFinder 0.9.9 manually</h4>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.9.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.9.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p>I’m sorry for the inconvenience. The bug has been fixed from 0.9.7.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Toolbar Pill Button strikes back]]></title>
        
        <link href="https://blog.binaryage.com//toolbar-pill-button-strikes-back/"/>
        <updated>2010-07-26T00:00:00+00:00</updated>
        <id>jduff.github.com:/toolbar-pill-button-strikes-back</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>It’s finally here, TotalFinder 0.9.6 adds the toolbar pill button and also got bunch of fresh new localizations.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.6.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.6.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="toolbar-pill-button">Toolbar Pill Button</h4>

<p><img class="clear blog-image" style="width:300px" src="/images/totalfinder-toolbar-pill-button.png" title="Toolbar Pill Button" /></p>

<p>Toolbar Pill Button was one of the top <a href="http://getsatisfaction.com/binaryage/topics/toolbar_pill_button_missing">requested features</a>. It wasn’t as easy to implement as it looks, but I’ve finally cracked it. I had to disable the original animations, because they looked really jerky. I’ve also improved how Finder’s sidebar and toolbar are managed under TotalFinder’s reign.</p>

<h4 id="translators-did-a-nice-job-thank-you-guys">Translators did a nice job, thank you guys!</h4>

<p>I’m really glad you guys picked up my <a href="http://github.com/binaryage/totalfinder-i18n">instructions</a> and contributed your changes directly to <code class="language-plaintext highlighter-rouge">totalfinder-i18n</code> repo on GitHub. I know it was something new to learn on your side. But please understand this is a great time-saver for me. Much appreciated.</p>

<p>TotalFinder got translated into Czech, Dutch, French, German, Italian, Japanese, Russian, Spanish and Chinese. And here is the <a href="http://github.com/binaryage/totalfinder-i18n/contributors">list of contributors</a>. The project is evolving, you are always welcome to fork and make your own contribution. Thank you.</p>

<h4 id="joined-the-micropreneur-academy">Joined the Micropreneur Academy</h4>

<p>It has been almost a month since the last version and I had so many plans for this release. Unfortunately I got toasted in my day-job and I had almost no extra time or energy to push TotalFinder much further. This is quite frustrating, but look at it from the other side: you may enjoy another free month :-)</p>

<p>As TotalFinder grows in popularity I’m also spending quite a lot of time on support. Not only at <a href="http://getsatisfaction.com/binaryage">GetSatisfaction forums</a>, but also replying to individual emails. At this place I’d like to thank <a href="http://getsatisfaction.com/people/kiwidesign">Lorenzo Orlandi</a> who is doing a great job of answering questions on public forums. He took a lot of work off my plate so I can focus more on development. Thank you, Lorenzo!</p>

<p>Approaching 1.0 and launching the product commercially is maybe the most difficult phase so far. I’m always looking for new motivation. 
And I’ve found a real gem. A podcast for people like me who are trying to launch their own web site or product. Check out the <a href="http://www.startupsfortherestofus.com">Startups for the rest of us</a> by Mike and Rob. Those guys are doing a great job by explaining important stuff and sharing their own experiences.</p>

<p>I have joined their <a href="http://www.micropreneur.com">Micropreneur Academy</a> and I hope this will enable me to launch sooner and avoid some obvious mistakes.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder opened for localization]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-localization/"/>
        <updated>2010-06-30T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-localization</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.9.5 is here. This release added localization support and a few fixes.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.5.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.5.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="translate-totalfinder-and-get-a-free-license">Translate TotalFinder and get a free license</h4>

<p>I’m pretty sure that you understand that translation must be an ongoing process. TotalFinder will be getting new features over time and of course I want to be free to tweak and possibly change anything. I don’t want to spend my time swapping text files in emails and micro-managing translators. Instead I want to focus on TotalFinder improvements and features. That’s why I’m looking for a good solution to this localization problem.</p>

<p>You know that already, the <a href="http://github.com/github">guys behind the GitHub</a> are my rock stars. Quite frankly, if I were a young lady I would want to have babies with all of them.</p>

<p>Ehmm, all right, I’m a big believer in the <a href="http://github.com/binaryage">GitHub</a> concept. The transparency it offers when looking at versioning and collaboration is breath-taking. I didn’t even announce localization support here on the blog and some folks already ‘got it’ and <a href="http://github.com/binaryage/totalfinder-i18n/network/members">have forked my repo</a>. I understand that not everyone is familiar with git and other tools I’m forcing you into, but if you are a techie I guarantee you <a href="http://progit.org">learning git</a> and GitHub is damn well invested time. Take it as a good opportunity to learn something new. Now you have a reason and my full support.</p>

<p>For your information, this is my experience when collecting localizations, easy as pie! :-)
<img class="clear blog-image" src="/images/github-totalfinder-localization-fork-queue.png" title="GitHub fork queue" /></p>

<p>Please look at this repo and read the instructions:
<a href="http://github.com/binaryage/totalfinder-i18n">http://github.com/binaryage/totalfinder-i18n</a></p>

<p>I will be improving those instructions over time by answering your actual questions. There is a <a href="http://github.com/binaryage/totalfinder-i18n/tree/master/plugin/Resources/Czech.lproj">sample Czech translation</a>. All I needed to provide was translations of
several <a href="http://github.com/binaryage/totalfinder-i18n/blob/master/plugin/Resources/Czech.lproj/Localizable.strings">string files</a>.</p>

<h4 id="headaches-solved-with-switching-exotic-keyboard-layouts">Headaches solved with switching exotic keyboard layouts</h4>

<p>Some Asian guys got into big troubles when they updated to 0.9.3. Switching complex keyboard layouts might cause the whole Mac to hang for a few seconds.</p>

<p>This wasn’t quite my bug but some hidden problem in the ShortcutRecorder library. All has been solved now and the world is better <a href="http://code.google.com/p/shortcutrecorder/issues/detail?id=40">by one patch</a>.</p>

<h4 id="my-fight-for-pixel-perfection">My fight for pixel perfection</h4>

<p>You might remember that I slaughtered the Google Chrome codebase and extracted the tabs implementation out of it. Some pixels got lost during this dirty process and some eagle-eyed UI designers are poking me to fix it (thanks Steve!).</p>

<p>Now I’m slowly learning how rendering the tabs really works and trying to tame Cocoa rendering on the pixel level. This version made pretty good progress on this.</p>

<p>Other news is that Google is (probably!) planning <a href="http://blog.chromium.org/2010/06/fresh-coat-of-chrome.html">a slightly different tab look</a> in an upcoming version. It looks gorgeous in my opinion. TotalFinder will definitely keep up and I want to know every pixel by name.</p>

<p><img class="clear blog-image" src="/images/new-chrome-tabs-mockup.png" title="Upcoming Chrome tabs?" /></p>

<p>Also one of the most requested features is <a href="http://getsatisfaction.com/binaryage/topics/allow_safari_style_tabs_or_unique_a_style_chrome_tabs_me_not_like">Safari-style tabs</a>. I hear you! I will put these newly acquired skills towards this ultimate goal (sometime after the 1.0 release).</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder with customizable shortcuts]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-with-customizable-shortcuts/"/>
        <updated>2010-06-08T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-with-customizable-shortcuts</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.9.3 is out with a few more features. This release has customizable shortcuts.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.3.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.3.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="customizable-shortcuts">Customizable Shortcuts</h4>

<p>People with AZERTY keyboards had problem with my choice of keyboard shortcuts in 0.9.1. I decided to solve the problem once for all. You can now define your own shortcuts in case the default one conflicts with your custom keyboard layout.</p>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/totalfinder-customizable-keyboard-shortcuts.png" title="TotalFinder provides distinct features which may be enabled at once" /></p>

<h4 id="fixed-installer-and-asepsis-initialization-bugs">Fixed installer and Asepsis initialization bugs</h4>

<p>The installer often failed for people who decided to not install TotalFinder.kext. Maybe you didn’t notice, but you can click the “Customize” button during the installation.</p>

<p>This is also related to problems caused when the <code class="language-plaintext highlighter-rouge">/usr/local/.dscache</code> folder wasn’t present during TotalFinder startup. In this case some initialization steps were not properly executed and TotalFinder might behave unpredictably.</p>

<h4 id="ive-got-a-little-productivity-crisis">I’ve got a little productivity crisis</h4>

<p>First, I decided to switch from TextMate to XCode for Objective-C development. This was quite a productivity backslide, but I believe it is a good time investment for the future. I still do love TextMate for web development, ruby and ad-hoc text file editing, but XCode is way superior with its Objective-C integration.</p>

<p>Second, Google I/O talks, WWDC presentations, tech-podcasts and all the new technical stuff coming out these days. Sometimes I wish a day had 48 hours because I feel I cannot consume all of this :-)</p>

<p>Third, with nice weather there is much more “real life”(tm) activity out there. Friends are doing meetups, celebrations or just hanging out in pubs. I had to make several hard decisions about whether to go out or stay and code something on TotalFinder. There is still some boring work ahead like writing documentation, preparing localization support, implementing the licensing subsystem and setting up a web store. I would rather spend that time working on new features, but this has to be done. At least for me to stay motivated on the project.</p>

<p>Don’t worry. I will keep you posted.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder almost gold]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-almost-gold/"/>
        <updated>2010-05-17T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-almost-gold</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.9.1 is out with many improvements and some stability fixes.<br />Maybe I should start calling it a beta?! What do you think? :-)</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.9.1.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.9.1.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="the-major-feature-no-major-features">The major feature: “no major features”</h4>

<p>I still have my head full of crazy ideas about exciting new features for TotalFinder but I decided to stay calm and polish TotalFinder in its current state. 
Don’t worry, I’m also evaluating your ideas from <a href="http://getsatisfaction.com/binaryage">http://getsatisfaction.com/binaryage</a>.</p>

<p>One thing is clear to me. TotalFinder must not turn into bloat-ware. On the other side the TotalFinder is by definition a product for Mac tweakers who love to have options. I want to support separate orthogonal features which should be disabled by default and which may be enabled at will on separate preference panels. So everyone gets an easy way to use only a subset of TotalFinder features.</p>

<p>For example some people are not that interested in .DS_Store redirection, while for others it is an essential feature. By the way, I renamed this feature “Asepsis” which is kind of a cool name for real system surgeons ;-)</p>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/new-preferences-panel.png" title="TotalFinder provides distinct features which may be enabled at once" /></p>

<p>This is the new look of TotalFinder preferences. New mini tab buttons give more room for new feature panels in the future :-)</p>

<h4 id="fixed-several-crash-situations">Fixed several crash situations</h4>

<p>The root of all evil was my extensive usage of performSelector:withObject:afterDelay: calls to make things smooth and sane. For example, this was used when animating tabs. The problem is that the target object on which the scheduled method is called does not go away until the timer fires (performSelector calls [retain] on target object). Cocoa uses autorelease which does deallocation at some point after the timer has fired. The problem was that the target had weak references to other objects. These objects may die in the meantime while the target is waiting for the animation to finish.</p>

<p>As you can imagine this was the source of all sudden crashes when dealing with tabs. For example a 100% reproducible case for one tabs-related crash was:</p>

<ul>
  <li>open window with two tabs</li>
  <li>click on close button of the second tab to initiate a tab closing animation</li>
  <li>use CMD+Q to close the whole browser window (if you’re fast you can close it with mouse or pressing CMD+W to close second tab quickly after first one)</li>
</ul>

<p>I believe I’ve solved all of these nasty issues by reviewing all performSelector calls and fixing object dependencies.</p>

<h4 id="visor-window-can-be-pinned-and-resized-by-dragging">Visor window can be pinned and resized by dragging</h4>

<p>I’ve replaced the Visor close button with pin button. The Visor window may be also pinned by pressing the keyboard shortcut <code class="language-plaintext highlighter-rouge">CMD+SHIFT+P</code>. You can also drag the tabs bar to resize Visor vertically. Sweet!</p>

<p><img class="clear blog-image" style="width:300px" src="/images/totalfinder-pinned-visor-window.png" title="The Visor window may be also pinned by pressing the keyboard shortcut `CMD+SHIFT+P`" /></p>

<p>I’ve also improved the free-form mode of the Visor window and implemented seamless switching between these modes.</p>

<h4 id="narrow-tabs-bar-for-small-screens">Narrow Tabs Bar for small screens</h4>

<p>This is just the cherry on the top. It was easy enough so I decided to make some folks with small screens happy. You have a keyboard shortcut for this too: <code class="language-plaintext highlighter-rouge">CMD+SHIFT+B</code>.</p>

<p><img class="clear blog-image" src="/images/totalfinder-narrow-tabs-bar.png" title="Narrow Tabs Bar" /></p>

<h4 id="display-hidden-files-without-restarting-finder">Display hidden files without restarting Finder!</h4>

<p>This was a really hard one. As I <a href="http://blog.binaryage.com/i-can-haz-folders-on-top">wrote before</a>, there is no simple way to programatically force Finder to display hidden files. You can tweak AppleShowAllFiles key in Finder’s plist, but it requires Finder to restart to take effect.</p>

<p>So I’ve followed the hard path again. I’ve searched the memory where Finder stores the bit which tells the file browser how to filter files when rendering. As you would expect this memory offset differs for each hardware platform and Finder version. So I ended up with two tables where I store known memory offsets for both i386 and x86_64 platforms.</p>

<p>As of the 0.9.1 release, this feature works for Finder 10.6.3 and 10.6.4. Apple is probably going to release Finder 10.6.5 soon, so I will release a TotalFinder update for it shortly. If you encounter the future compatibility warning you will lose this functionality for a while (a Finder restart will always work, of course).</p>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/totalfinder-future-compatibility-check.png" title="TotalFinder warns you when running with unknown Finder version (from the future)" /></p>

<p>Note: Finder’s minor version number is advanced by +1 compared to the OS X system update numbering.</p>

<h4 id="whats-next">What’s next?</h4>

<p>This is pretty much what you are going to get in the 1.0 release. You should be already saving your 15 bucks as a reward for my hard work.</p>

<p>I’m planning the following features for 1.0:</p>

<ul>
  <li>Pixel perfection (right now the tab gradients don’t visually match the Finder windows)</li>
  <li>Localization support</li>
  <li>Registration (a funny box for pasting a license key)</li>
  <li>Small usability fixes</li>
</ul>

<p><strong>I’m pretty excited about how TotalFinder is maturing. Let me know what your must-haves are for the 1.0 release.</strong></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder now works without SIMBL]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-without-simbl/"/>
        <updated>2010-04-26T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-without-simbl</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.8.3 does not rely on SIMBL anymore. It plugs into Finder.app on its own.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.8.3.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.8.3.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="totalfinder-loves-simbl-but-simbl-scares-people-on-the-streets">TotalFinder loves SIMBL, but SIMBL scares people on the streets</h4>

<p><a href="http://www.culater.net/software/SIMBL/SIMBL.php">SIMBL</a> is a great and well maintained software. All kudos to <strong>Mike Solomon</strong> who has been doing an awesome job on it for so many years.  TotalFinder probably would not be here today without SIMBL.</p>

<p>The current version of SIMBL has one fundamental problem related to TotalFinder. <strong>It requires people to do something.</strong> Running an installer is not much work, I know. But there is still a dependency. A user needs to install a separate program prior to TotalFinder. They have to keep it up-to-date. They will probably want to look at it and understand what it is. And let’s be honest, the <a href="http://www.culater.net/software/SIMBL/SIMBL.php">SIMBL homepage</a> is not very welcoming to non-programmers.</p>

<p>There are also some technical questions. Is it really worth it to replace SIMBL with my own homebrew solution?</p>

<p><img class="clear blog-image" style="width:300px" src="/images/simbl-replacement-questioning.png" title="Good question, Shane. It is worth it to make my own SIMBL?" /></p>

<p>Good question, Shane. Here are my reasons:</p>

<ul>
  <li>I want TotalFinder installation and uninstallation to be as seamless as possible. It should be ideally one-click experience. No brainer!</li>
  <li>I don’t want to depend on a component which may evolve. Testing compatibility and keeping up with Finder.app alone is quite enough work for me.</li>
  <li>To sleep well at night I wanted to implement a <a href="http://github.com/darwin/simbl/commit/c95557a49b52aa6a26a5390e30e90364b17b38e1">future compatibility check</a> for Finder</li>
  <li>I don’t really need SIMBL’s Agent functionality. Actually it does no good with Finder’s auto-restart and it has complicated my life in the past (I needed to <a href="http://blog.binaryage.com/totalfinder-with-sparkle/">prevent a continuous crashing scenario</a>, for example)</li>
</ul>

<p>So I decided to roll my own solution. It does not need Agent and it is Snow Leopard only, so it turned out to be really easy (the <a href="http://github.com/binaryage/totalfinder-osax/blob/master/TotalFinderInjector.m">plugin injector</a> has less than 100LOC). I was able to implement a future Finder version check like this:</p>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/totalfinder-future-compatibility-check.png" title="TotalFinder warns you when running with an unknown Finder version (from the future)" /></p>

<p>Ok, to wrap it up. TotalFinder.bundle is still a SIMBL plugin and you can run it with SIMBL if you want to play with <code class="language-plaintext highlighter-rouge">Info.plist</code>. But I’m using my own OSAX to do the Finder injection by default. Don’t worry, I will open-source my solution in a few days <a href="http://github.com/binaryage/totalfinder-osax">on GitHub</a>. Of course I will be glad to get some feedback/code reviews on this.</p>

<p>And as a side-effect I’ve learned how to rule the world with my own Scripting Additions. Wait for the next release .-)</p>

<h4 id="a-general-project-refactoring-and-echelon-rename">A general project refactoring and Echelon rename</h4>

<p>Echelon scares people too. So I decided to rename it simply to TotalFinder.kext. This way when you happen to look into <code class="language-plaintext highlighter-rouge">/System/Library/Extensions</code> you won’t scare yourself to death by forgetting Echelon is simply something related to the peace-loving TotalFinder.</p>

<p>And by the way, if you are still scared please note that TotalFinder.kext is going to be also an open-source in a few days <a href="http://github.com/binaryage/totalfinder-kext">on GitHub</a>. You can then compile it on your own in case you want to be 100% sure about the kernel extensions on your system. I understand the geek inside of you, so in the future I will write a separate technical article about how it works :-)</p>

<p>This was also good excuse to refactor the whole XCode project into several smaller projects, solve dependencies, improve build scripts and clean things up. Unfortunately I cannot present any visible progress here, but I personally feel much better now. You know I hate <a href="http://en.wikipedia.org/wiki/Cruft">cruft</a>, especially in my own baby projects.</p>

<p>Oh, maybe I should have added that the installer’s footprint is 3.4MB now, which is ~30% less than the previous 4.8MB. Yeah, faster downloads for you and cheaper S3 bills for me :-)</p>

<h4 id="want-new-windows-always-as-tabs">Want new windows always as tabs?</h4>

<p>Folks using the OSX Spaces feature <a href="http://getsatisfaction.com/binaryage/topics/desktop_folders_open_as_tabs_spaces_and_generic_problem">were asking</a> for better handling of new Finder windows.</p>

<p>By default TotalFinder turns new popping Finder windows into tabs of the last active TotalFinder window. This caused problems in the case of having the TotalFinder window on a different space. Let’s say the TotalFinder window is on space1, the user is working on space2 and for example clicks on the desktop to open a new folder. This would trigger a switch back to space1 because the newly created Finder window converts to a tab, and that activates TotalFinder window living on space1. I personally don’t use spaces, but I understand that this is annoying.</p>

<p>From 0.8.3 onwards, you can go to TotalFinder/Tweaks preferences panel and check in “Don’t adopt new Finder windows as tabs”. This will enable you to open new Finder windows in separate TotalFinder windows. In the future I want to improve this behavior to also deal nicely with DMG files and other special types of Finder windows. This option might become the default in the future releases. Any ideas? <a href="http://getsatisfaction.com/binaryage/topics/desktop_folders_open_as_tabs_spaces_and_generic_problem">Tell me what do you think</a>.&lt;/a&gt;.</p>

<p><strong>Good stuff is coming. Stay tuned as usual!</strong></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder plays nice with TimeMachine]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-timemachine/"/>
        <updated>2010-04-04T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-timemachine</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.8.2 is another stability release. Just fixing bloody bugs.<br />We need to get solid base for new exciting features, agreed?</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.8.2.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.8.2.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="totalfinder-and-timemachine">TotalFinder and TimeMachine</h4>

<p>TotalFinder is now aware of TimeMachine. This was quite tricky. You know, when entering TimeMachine, the active Finder window is animated and floats into the center of the screen for TimeMachine’s galaxy view. Finder uses heavy CoreAnimation machinery for this and it broke visually with TotalFinder.</p>

<p>The worst thing is that Finder creates an extra “working window” to render the stacked windows behind the main window (did you know these are clones?). This working window is disposed of after returning from TimeMachine. Anyway, this window-juggling was so confusing for TotalFinder that it usually crashed immediately after returning from TimeMachine or when the user tried to switch tabs. To make TotalFinder windows play nice in TimeMachine, I needed to teach Finder windows how to switch from TotalFinder’s tab-style into the original frame-style and back. Right now, it is used only for the TimeMachine session, but it is a good foundation for future arbitrary switching of Finder windows between the classic and tab styles.</p>

<p>Why? Some people want to be able to open classic Finder windows for some tasks while still having TotalFinder operate the rest of the windows. We will see. I’m still considering it. But I don’t want to make this too complicated.</p>

<h4 id="vaporized-a-monster-memory-leak">Vaporized a monster memory leak</h4>

<p>Honestly I don’t have much time to hunt for memory leaks. Crashes have higher priority right now. But there was one really huge <a href="http://getsatisfaction.com/binaryage/topics/memory_leak_upon_hiding">memory leak in the 0.8 release</a>. Thanks for reporting it, Adam!</p>

<p>Now I understand why have some people complained about TotalFinder slowing down their systems. I expect them to be Visor-feature users. Also, I did a brief investigation using XCode’s memory tools. After a short TotalFinder session everything looked ok to me. Memory seemed to be returned to the system as expected. I haven’t noticed any major memory leaks. Report to me if you see anything unusual. And don’t forget: the Activity Monitor is your friend.</p>

<h4 id="and-more-improvements">And more improvements</h4>

<p>Drag &amp; Drop respects system settings for springing delay. Also, TotalFinder goes mainstream, and as you can imagine some people get shocked when they’re exposed to a raw applescript. This renders them unable to click the green “run” button to uninstall TotalFinder properly. And that is why we have a new uninstaller app which wraps this into a few straightforward clicks. No more sad faces.</p>

<p><strong>I hope this is a good release. Enjoy it and look forward for the next release 0.9 which should finally include some new features.</strong></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder 1.0 - a sneak peek]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-sneak-peek/"/>
        <updated>2010-04-01T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-sneak-peek</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>I’m working hard on the TotalFinder 1.0 release. Today I want to show you an exclusive screenshot from the upcoming version.</strong></p>

<p><img class="clear blog-image no-shadow" src="/images/totalfinder-sneak-peek-10.png" title="BinaryAge is dedicated to bringing the Windows experience to the Mac." /></p>

<h4 id="pricing">Pricing</h4>

<p>TotalFinder pricing starts at $14.99. Our sales team is working really hard on the final pricing plans:</p>

<ul>
  <li><strong>TotalFinder Home Basic</strong> with shades ($14.99)</li>
  <li><strong>TotalFinder Business Premium</strong> with dual panel ($49.99)</li>
  <li><strong>TotalFinder Extra Ultimate</strong> with tabs! (call us)</li>
</ul>

<p>Please don’t forget that you have 30 days to activate your TotalFinder copy via phone.</p>

<h4 id="and-this-is-just-the-beginning-">And this is just the beginning …</h4>

<p>The team from BinaryAge is very serious about bringing the full Windows experience to the Mac platform.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder has a new icon!]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-new-icon/"/>
        <updated>2010-03-29T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-new-icon</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>Real quick today. I want to show you a new icon for TotalFinder. I want to roll it into the next release.</strong></p>

<p><img class="clear blog-image no-shadow" src="/images/dock-with-totalfinder-icon.png" title="The Dock with the new TotalFinder icon." /></p>

<p>TotalFinder is slowly growing from a hacker-style geek guy into a very nice and friendly Mac citizen. I think it’s the time to take off the shades! I believe the new icon reflects this perfectly. Again credit goes to <a href="http://raist.cz">Raist</a> who created it. Thanks!</p>

<h4 id="how-do-you-like-it">How do you like it?</h4>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/totalfinder-icon-new.png" title="The shiny new icon" /></p>

<h4 id="heres-the-old-icon-for-comparison">Here’s the old icon for comparison</h4>

<p><img class="clear blog-image no-shadow" style="width:300px" src="/images/totalfinder-icon-old.png" title="Old hacker-style icon with shades." /></p>

<h4 id="also-modified-blog-part-of-the-site">Also modified blog part of the site</h4>

<p>I’ve had some complaints about the font readability on the site. I didn’t have much time to play with the web site again, but I disabled the BitLow font at some places. Hope it helps a bit.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Awesome products deserve an awesome website]]></title>
        
        <link href="https://blog.binaryage.com//binaryage-redesigned/"/>
        <updated>2010-03-22T00:00:00+00:00</updated>
        <id>jduff.github.com:/binaryage-redesigned</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>I’m happy to announce that BinaryAge just got a new design!<br />Big kudos to <a href="http://raist.cz">Raist</a> who redesigned <a href="http://binaryage.com">the site</a> for me.</strong></p>

<h4 id="how-do-you-like-it">How do you like it?</h4>

<p><img class="clear blog-image" src="/images/binaryage-redesign.png" title="New smooth design with many javascript bells and whistles" /></p>

<h4 id="for-historical-comparison-here-is-the-old-homepage-design">For historical comparison here is the old homepage design:</h4>

<p><img class="clear blog-image" src="/images/binaryage-old-design.png" title="Old coder's design for internet archeologists." /></p>

<h4 id="who-is-that-magician-raist">Who is that magician Raist?</h4>

<p>He has been a very best friend of mine for very long time. Back in old times we did some artistic <a href="http://hildebrand.cz/marshals-web">demoscene work</a> together with other folks from <a href="http://marshals.cz/">marshals.cz</a>. Those times are over but we are still in the computer business. He is a freelance graphics designer and I’m a contract programmer. From time to time we join together to get some job done. Ehmm yes, most of the time I want some work from him :-)</p>

<h4 id="meet-cloudia">Meet Cloudia</h4>

<p><a href="http://raist.cz">Raist</a> has been working with our great friend <a href="http://webaplications.com">Surgi</a> on a new business for a while. The shiny product is called <a href="http://www.cloudia.cz/eng">Cloudia CMS</a> and it is a flexible multi-site CMS with an awesome admin interface built with ExtJS library. See the <a href="http://www.cloudia.cz/eng">screenshots</a>!</p>

<p>I have not worked with the system personally, but I can recommend those guys, because I know they are doing a great job. If you are ever looking for a multi-site CMS which is expected to process great amounts of data you should definitely not miss Cloudia!</p>

<h4 id="tasty-ingredients-powering-the-new-site">Tasty ingredients powering the new site</h4>

<ul>
  <li><a href="http://www.dafont.com/bit-low.font">BitLow Font</a> by <strong>Magnus Högberg</strong> (good job Magnus!)</li>
  <li><a href="http://github.com/sorccu/cufon">Cufon</a> by <strong>Simo Kinnunen</strong> (pure awesomeness!)</li>
  <li><a href="http://jquery.com">jQuery</a> by javascript ninja <strong>John Resig</strong> and many contributors</li>
  <li><a href="http://flowplayer.org/tools/index.html">jQuery Tools</a> by <strong>FlowPlayer folks</strong></li>
  <li><a href="http://benalman.com/projects/jquery-hashchange-plugin">jQuery hashchange plugin</a> by <strong>“Cowboy” Ben Alman</strong> (thanks!)</li>
  <li><a href="http://github.com/mojombo/jekyll">Jekyll</a> by github guru <strong>Tom Preston-Werner</strong> and many contributors</li>
  <li><a href="http://www.blueprintcss.org">BluePrint CSS framework</a> by <a href="http://github.com/joshuaclayton/blueprint-css/blob/master/AUTHORS.textile">these css folks</a> (sweet!)</li>
</ul>

<h4 id="improved-xrefresh-and-jekyll-along-the-way">Improved XRefresh and Jekyll along the way</h4>

<p>Of course I do eat my own dog food, so I used XRefresh, FireQuery, Visor and TotalFinder heavily while working on the changes.</p>

<p>Actually I did more than that! I even contributed a few fixes to XRefresh and Jekyll:</p>

<ul>
  <li><a href="http://github.com/binaryage/xrefresh/commit/0f0050f69fb841df7e42266a274313b948b206d9">http://github.com/binaryage/xrefresh/commit/0f0050f69fb841df7e42266a274313b948b206d9</a></li>
  <li><a href="http://github.com/darwin/jekyll/tree/optimize_static_files">http://github.com/darwin/jekyll/tree/optimize_static_files</a></li>
  <li><a href="http://github.com/darwin/jekyll/tree/site_url_from_cmdline">http://github.com/darwin/jekyll/tree/site_url_from_cmdline</a></li>
</ul>

<p>The XRefresh improvement especially is sweet. I hope I will manage to find some time for a new XRefresh release soon.</p>

<p><strong>Please report any weird experiences with the new site. Also please note that this site is not optimized for IE. According to Google Analytics, I’m getting less than 2% IE visitors, so it is simply not worth the headache.</strong></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Bugfixing afternoon]]></title>
        
        <link href="https://blog.binaryage.com//bugfixing-afternoon/"/>
        <updated>2010-03-11T00:00:00+00:00</updated>
        <id>jduff.github.com:/bugfixing-afternoon</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>I’ve just released TotalFinder 0.8.1. I don’t have any new exciting features for you today. This is a pure bugfix release.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.8.1.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.8.1.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="interested-in-bugs-colors">Interested in bugs’ colors?</h4>

<p><img class="blog-image" src="/images/totalfinder-bugs-in-08.png" title="The crash situation here" /></p>

<p>This is a list of crashes I got during the last 48 hours. I’m happy to announce I have just squashed [@askForNewFileBrowser], [@NumberOfDualTabs] and [@TabStripController dealloc].</p>

<p>Thank you all who care about TotalFinder and sending me crash reports.</p>

<p><strong>Enjoy a bit more stable TotalFinder!</strong></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Drag me on tabs!]]></title>
        
        <link href="https://blog.binaryage.com//drag-me-on-tabs/"/>
        <updated>2010-03-06T00:00:00+00:00</updated>
        <id>jduff.github.com:/drag-me-on-tabs</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.8 is out and it makes you better again.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.8.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.8.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p>You can drag and drop files on tabs. Tabs get spring loaded after hovering. You can even drag folders out into new tabs. I’ve also fixed many crashes and quirks. Enjoy this release!</p>

<p><img class="blog-image" src="/images/totalfinder-dragontab.png" title="You may drag files and folders onto tabs!" /></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Towards stable TotalFinder]]></title>
        
        <link href="https://blog.binaryage.com//towards-stable-totalfinder/"/>
        <updated>2010-02-10T00:00:00+00:00</updated>
        <id>jduff.github.com:/towards-stable-totalfinder</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.7.1 update is ready for download.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.7.1.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.7.1.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p><strong>Warning:</strong> When updating via Sparkle, Finder usually gets into a strange state and you are not able quit apps in the Dock. They stay as zombies there and you cannot even Force Quit them. Please restart the Finder again and the problem goes away. You can use the new restart option in the status menu item.</p>

<h4 id="fixed-tab-animation-quirks">Fixed tab animation quirks</h4>

<p>Opening and closing tab animations were jumpy. I’ve revisited the code and made sure they are going smooth again.</p>

<h4 id="fixed-display-quirks">Fixed display quirks</h4>

<p>Fixed some display quirks related to showing/hiding toolbar, statusbar and sidebar.</p>

<h4 id="fixed-visor-mode">Fixed Visor mode</h4>

<p>Visor mode users should be happy with this release. I’ve paid special attention to make this feature working again. The best part is that from now it correctly respects the Dock.</p>

<h4 id="fixed-some-crashes">Fixed some crashes</h4>

<p>Thank you all who sent me some crash reports. I really read them.</p>

<p>I’ve solved @DSStore, @RestoreFocus, @placeWindow and @AEOverride crashes in 0.7.1. As you can see, this should reduce crash rate by 90% or so.</p>

<p><img class="blog-image" src="/images/crash-distribution.png" title="The distribution of crash reports" /></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Crash Reporting in binary age]]></title>
        
        <link href="https://blog.binaryage.com//crash-reporting-in-binaryage/"/>
        <updated>2010-02-05T00:00:00+00:00</updated>
        <id>jduff.github.com:/crash-reporting-in-binaryage</id>
        <content type="html"><![CDATA[<p><strong>I decided to share some of my development stories. It looks like some folks enjoy this technical reading.</strong></p>

<h4 id="is-it-possible-to-build-decent-crash-reporting-system-during-saturday">Is it possible to build decent crash reporting system during Saturday?</h4>

<p><img class="blog-image" src="/images/crash-development.png" title="Commit logs as seen in GitX" /></p>
<div class="small" style="text-align:right">image taken from <a href="http://gitx.frim.nl/"><b>GitX - free OSX git client</b></a></div>

<p>As you can see, the answer is YES, even if you wake up at 1pm.</p>

<p>The trick is to take existing tools and make them play together. I took Google’s Breakpad, Apple’s OSX crash reporting system, GitHub’s gist, User’s email client and Google’s Gmail. Btw, if you don’t have much imagination try <a href="http://www.cookmateapp.com">CookMate</a>, an iPhone app by Czech folks I’ve met recently.</p>

<h4 id="google-already-runs-realtime-crash-reporting-system-its-called-gmail">Google already runs realtime crash reporting system, it’s called Gmail</h4>

<p>This is how my crash reporting system looks for me as a developer.
<img class="blog-image" src="/images/gmail-based-crash-reporting.png" title="The filtered crash reports in gmail" />
The best part is I didn’t have to learn anything new and I can use all Gmail goodness for managing my crash reports. 
The killer feature is that I can communicate the crash directly with the reporting user just by doing a reply.
I could imagine many “serious” crash reporting systems really suck at it.</p>

<h4 id="user-gets-a-pre-generated-email">User gets a pre-generated email</h4>

<p>When TotalFinder crashes the user a gets custom dialog with explanations:
<img class="blog-image no-shadow" style="float:left" src="/images/crash-dialog1.png" width="310" title="The crash reporting dialog - generating" />
<img class="blog-image no-shadow" style="float:left" src="/images/crash-dialog2.png" width="310" title="The crash reporting dialog - send report ..." />
<br clear="all" /></p>

<p>When clicking “Send Report …” I upload the crash report anonymously to Gist and open pre-generated email with a link:</p>

<p><img src="/images/crash-reporting-mail.png" class="blog-image no-shadow" title="The crash report email template" /></p>

<p>User can check the link if there is no confidential information. It’s exactly the standard Apple’s crash report you would find in their dialog:
<img src="/images/crash-reporting-gist.png" class="blog-image no-shadow" title="The crash report uploaded to gist.github.com" /></p>

<p>This is no rocket social engineering surgery. This is just a system I would like to use as a user. 
There is a pretty good chance the user is able and willing to send an email.
There is also explanatory text which looks like a message they are replying to with personal note that all crashes are being read by the author and not some black hole.
But what’s more: It is completely transparent! They probably trust their email client more than some spinning TCP/IP wheel of some custom reporting dialog. 
All information is pure text so they can check it before sending. I didn’t want to use attachments, but thanks to gist the mail is not bloated and scary.</p>

<p>I think Mozilla’s guys should take note. I’m running on beta builds of Firefox and their crash reporter has sending checked on by default. So even if I don’t want actively send the crash report and I don’t notice it I click close and it starts spinning and sending something I cannot even inspect. I know they are good guys, but I was pissed off several times because they tricked me to send “something” while I was working on my secret web projects :-)</p>

<h4 id="ok-ill-tell-you-how-i-did-it-">Ok, I’ll tell you how I did it …</h4>

<p>First I went to Google and started to search for some drop-in solution. I was very pleased with <a href="http://sparkle.andymatuschak.org/">Sparkle</a> updating system (thanks Andy!) so I was in hope to find some decent crash reporting system.</p>

<p>Daniel Jalkut of Red Sweater Software wrote a great <a href="http://www.red-sweater.com/blog/860/crash-reporter-roundup">Crash Reporter Roundup</a>. After reading, it was obvious I’m not alone on this planet who looks for solution to that problem. More than that, some nice people were sharing their projects with the world. So nice afternoon. Thanks!</p>

<p>In the beginning I decided to flirt with Google’s <a href="http://code.google.com/p/google-breakpad">Breakpad</a>. Looked like a young, shiny and well maintained project for big guys. And it’s cross-platform! Which sounds great even if I don’t need it at all. Anyway the great feature which finally sold me on it was an out-of-process crash reporter. Good stuff.</p>

<p>I started integration operation in TotalFinder and I ended up debugging a crash report dump routine which was going through stack frames of dying process and doing some woo-doo of reading some info out of it. It wasn’t working at all and I realized I’m doing something really wrong. TotalFinder is a SIMBL plugin running in 64-bit Finder.app, Breakpad supports only 32-bit right now as one could read in Stefan Reitshamer’s <a href="http://www.reitshamer.com/?p=18">article on this topic</a>. For a second I thought I could fix it for them, but then I realized I’m not the Messiah and I cannot do miracles with 64-bit opcodes. Sadness!</p>

<p>Ok, it’s 13:50 and I’m getting back to the list of available crash reporting solutions. Some of them I excluded just by looking at their website. Some of them were promptly excluded just by looking at their source code. And rest of them I excluded by trying to integrate them. I have quite an uncommon situation here with 64-bit SIMBL so maybe they integrate well with classic apps. I don’t remember the details, but my case was probably quite painful.</p>

<p>Well it’s 17:14 and I’m doing rant commit about how all other solutions suck and going back to Breakpad. 36 seconds later I’m surprisingly merging my experimental branch with whole non-working breakpad into master. This is a suicidal operation I usually do when I want to finish the work no mater what. While it is on topic branch, it could be postponed. But when I merge it into master and break whole thing, it means I’m serious about it.</p>

<p>Ok it’s still 17:14, the situation is serious and thats time for a hot shower. I got back with a fresh idea. I don’t have time to roll my own solution. But I could use good parts from Breakpad and make something which could possibly work by the end of the day. I did a few things to Breakpad. I’ve commented out the whole machinery responsible for generating crash dumps and then I made their crash report dialog look nice with new “Send Report …” button. Great! Now I had working out-of-process 64-bit crash reporting system which was not capable of generating crash reports.</p>

<p>Let’s call Apple for rescue. Apple’s standard crash reporter knows how to generate good crash dumps even for 64-bit apps, the only problem is their standard crash reporting dialog popping up. One could google that the standard crash reporter is able to operate in so called “<a href="http://en.wikipedia.org/wiki/Crash_Reporter_(Mac_OS_X)">server mode</a>” which simply means it is generating crash report files on disk, but does not display crash dialog to the user. It sounds good but it has one problem. This setting is system-wide. My brain cannot understand why they did not introduce a system so this behavior could be configured individually per-app. They already have some routine which decides what to do with crashing app, this would be like three lines of code of reading plist and matching app identifier against it. Unfortunately there seems to be no other solution. Never-mind. This is exactly the situation when hacks are needed.</p>

<p>I did some bold experiments and this is what I ended up doing. In Breakpad’s crash handler of dying processes I simply switch crash reporter to server mode and let the app die with crash. The out-of-process crash sender gets spawned and first thing I do there is a reset of this setting back to original value. And it works well! Yes, there is a small time window in which other apps’ crashes may be not reported to the user and yes hypothetically when my crash sender dies before it returns the value to the original it may make the user’s system not open crash dialogs in the future. It is that big problem? I have a theory that people who care are just reading this article so they know about this behavior and other people just don’t care. In the future I’ll add a check into TotalFinder itself which returns the original value in case it finds it non-returned for some reason. This way the possibility of leaving the system in unwanted state would be minimal. You’ll have a higher chance of your disk exploding than staying in the state of server mode crash reporting.</p>

<p>Ok, now I forced crash report file to be silently generated somewhere on the disk. The last step was just waiting for it to get generated and finding it. At this point I enable “Send Report …” button. When user clicks it, I grab the file and upload it to <a href="http://gist.github.com">gist.github.com</a>. Again I’m so uncool for reinventing the wheel so I use Chris Wanstrath’s <a href="http://github.com/defunkt/gist">gist.rb uploader</a>. Jaaaaay it’s Ruby code! Much better than hanging myself trying to do a HTTP call using Cocoa.</p>

<p>And how does one open a mail client with a message? I tried to access the email APIs from Objective-C and it was like going back to the 80’s. I kinda like the music, but those bearded men with strong glasses suck at making APIs. You may wonder but the easiest way is to generate mailto link and simulate click on it. Browsers already know how to open your system email client - whatever it is. And it will work in the future because nobody wants to break the web, right?</p>

<p>The web has won again. And that is the end of my story.</p>

<h4 id="no-spam-just-meat">No spam just meat</h4>

<p>As you can see I’m getting 2 crash reports per hour on average. I didn’t have time to analyze them in more detail. But it looks like most of them are related to patching filesystem APIs for a .DS_Store hack early after TotalFinder starts. I can imagine that during startup many threads are doing heavy filesystem work and I confuse them by doing some dirty job of redirecting filesystem calls. Will definitely look into this soon.</p>

<div class="footnote">I'd like to thank all people who have been so kind and sent me their reports. This will definitely help me make TotalFinder better.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder with dual mode!]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-with-dual-mode/"/>
        <updated>2010-02-03T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-with-dual-mode</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>TotalFinder 0.7 is finally out! Grab it while it’s hot.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.7.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.7.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<hr />

<h4 id="introducing-dual-pane-mode">Introducing dual-pane mode</h4>

<p>You may activate dual panels by <strong>double-clicking tab</strong> or pressing <strong>CMD+U</strong>. It simply glues the currently selected tab with the next one (or the previous one). Clicking again makes them separate again. Easy and unobtrusive!</p>

<p><img class="blog-image" src="/images/totalfinder-dual-pane-mode.png" title="Dual mode applied to two left-most tabs" /></p>

<p>As you can see I’ve decided to use the power of tabs to implement this feature. This way you may organize your dual-tabs with the same ease as dealing with ordinary tabs. I’ve already been using it for few days and I’m really happy with this solution. We just need to agree on some keyboard shortcuts for copying/moving files between panels.</p>

<p>I’ve also decided not to spawn new finder tabs in case there is no suitable tab for dual mode. In this case it just does nothing. I’m open to your suggestions how this should work in the future. I personally think opening new tabs is quite a heavy-weight operation and should only be done explicitly.</p>

<h4 id="my-path-was-not-that-straight">My path was not that straight</h4>

<p>This hacking is more like archeology than anything else. One thing is reverse-engineering Finder and understanding how it works internally, but that is not enough. To build something reliable on top of it I usually need to try different approaches and pick symbiotic ones which may survive in the real world.</p>

<p>Maybe you remember my early screenshot of dual pane prototype back from October. I’ve used there the technique of <a href="http://blog.binaryage.com/totalfinder-with-tabs">relocating NSViews from hidden Finder window</a> for right-side list view. The solution was very fragile and unstable. I’ve never managed to make it fully working. I would probably need to pull much more of my hair out to get it into good shape. I’m really glad I’ve followed the tabs-path instead.</p>

<p><img class="blog-image no-shadow" src="/images/totalfinder-old-dual-approach.png" title="The original dual mode approach" /></p>

<h4 id="custom-crash-reporting">Custom crash reporting</h4>

<p>You will get a chance to upload crash report as a gist and send me an email. Hope you will never have to see this dialog :-)</p>

<p><img class="blog-image no-shadow" style="width:300px" src="/images/new-crash-report-dialog.png" width="400" title="The crash reporting dialog" /></p>

<h4 id="locked-dock-killall-finder-for-rescue">Locked dock? “killall Finder” for rescue</h4>

<p>Sometimes TotalFinder locks Finder and other apps. The symptom is that other apps are not able to quit (even Force Quit) and just stay in the Dock in zombie state. It happens usually shortly after re-installation.</p>

<p>If this happens, please kill Finder and start from scratch by typing this in Terminal.app:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>killall Finder
</code></pre></div></div>

<p>I have to catch this annoyance. I’ll probably replace the whole installer with custom script. This way I’ll know exactly what installer does instead of relying on Apple’s magic. Btw, right now it is not possible to downgrade TotalFinder directly. The installer just won’t replace it in case of going to lower version number. You have to manually uninstall using Uninstall.scpt and then install older version.</p>

<h4 id="whats-next">What’s next?</h4>

<p>At this moment my roadmap looks like this:</p>

<ul>
  <li>Continue fixing quirks and improve stability</li>
  <li>Add drag-and-drop tabs, cut and paste, and keyboard shortcuts for sidebar items for v0.8</li>
  <li>Terminal.app co-operation for v0.9, open beta period?</li>
  <li>Hacking NASA satellites? ;)</li>
</ul>

<p>These features should be much easier compared to tabs and dual-pane mode. I’m optimistic. Stay tuned!</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder status]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-status/"/>
        <updated>2010-01-25T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-status</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p>**I’ve just released TotalFinder 0.6.7 which is identical to 0.6.6. It has just the expiration date set to February 8, 2010. **</p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.6.7.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.6.7.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p>My original goal was to release 0.7 today, but I simply didn’t make it. Instead of releasing half-baked version and dealing with complaints I’ve decided to postpone 0.7 release. Software is hard :-/</p>

<h4 id="good-news-for-the-next-release">Good news for the next release</h4>

<p>I have had quite good progress. I have a more stable version of TotalFinder and solved many remaining display quirks. I’ve also removed great chunks of experimental code, so TotalFinder should be also somewhat lighter.</p>

<p>Also I’ve spent the whole weekend on implementing dual-panel mode. I got it working but it is still not ready for prime time.</p>

<p>zAnd by the way, I’ve implemented a custom crash report dialog. Hope you will not see it very often:</p>

<p><img class="blog-image no-shadow" style="width:300px" src="/images/new-crash-report-dialog.png" width="400" title="The crash reporting dialog" /></p>

<h4 id="overwhelmed-with-great-responses">Overwhelmed with great responses</h4>

<p>I want to thank you all for great responses. TotalFinder has been really hot <a href="http://search.twitter.com/search?q=totalfinder">on Twitter</a> and got great coverage in Mac media and blogosphere. I wasn’t prepared for such an explosion of interest.<br />But it is GREAT! Yooohoooo! :-)</p>

<ul>
  <li>lifehacker.com: <a href="http://lifehacker.com/5449240/totalfinder-adds-tabs-hotkeys-and-other-tweaks-to-os-xs-finder">TotalFinder Adds Tabs, Hotkeys, and Other Tweaks to OS X’s Finder</a></li>
  <li>cultofmac.com: <a href="http://www.cultofmac.com/interview-totalfinder-developer-talks-about-bringing-tabs-to-mac-os-x-finder">Interview: TotalFinder Developer Talks About Bringing Tabs to Mac OS X Finder</a></li>
  <li>macgasm.net: <a href="http://www.macgasm.net/2010/01/22/macgasm-podcast-264/">Macgasm Podcast #264 about TotalFinder</a></li>
  <li>smokingapples.com: <a href="http://smokingapples.com/software/reviews/totalfinder-mac/">TotalFinder brings Tabs to your native Finder!</a></li>
  <li>tuaw.com: <a href="http://www.tuaw.com/2010/01/14/totalfinder-beefs-up-finder">TotalFinder beefs up Finder</a></li>
  <li>makeuseof.com <a href="http://www.makeuseof.com/tag/experimenting-finder-totalfinder-mac/">Experimenting With Finder Using TotalFinder</a></li>
  <li>9to5mac.com: <a href="http://9to5mac.com/node/13005">TotalFinder adds tabs, other tricks to Snow Leopard’s Finder</a></li>
  <li>downloadsquad.com: <a href="http://www.downloadsquad.com/2010/01/14/totalfinder-brings-tabs-to-mac-os-x/">TotalFinder brings tabs to Mac OS X!</a></li>
  <li>and <a href="http://www.google.cz/search?q=totalfinder+review">others</a></li>
</ul>

<h4 id="need-support">Need support?</h4>

<p>I’m sorry I don’t have much time to respond individually to your mail messages. If you need support please discuss your ideas or issues on <a href="http://getsatisfaction.com/binaryage">Get Satisfaction</a>. This way I can spend more time doing actual coding.</p>

<p>Thank you!</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Firebug 1.5 updates]]></title>
        
        <link href="https://blog.binaryage.com//firebug15-updates/"/>
        <updated>2010-01-20T00:00:00+00:00</updated>
        <id>jduff.github.com:/firebug15-updates</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/firequery-128.png" class="intro-icon" /></p>

<p><strong><a href="http://blog.getfirebug.com/2010/01/19/please-update-firebug-extensions-with-1-5-0">Firebug 1.5 is out</a> and I’ve just updated most of my Firebug extensions to play nice with this release.</strong></p>

<h4 id="the-list-of-updates-for-today">The list of updates for today</h4>

<table>
  <tbody>
    <tr>
      <td><strong><a href="http://firequery.binaryage.com">FireQuery 0.5</a></strong></td>
      <td><strong><a href="http://xrefresh.binaryage.com">XRefresh 1.4</a></strong></td>
      <td><strong><a href="http://firerainbow.binaryage.com">FireRainbow 1.1</a></strong></td>
    </tr>
  </tbody>
</table>

<p>Unfortunately Firefox auto-updating does not work because all my extensions are marked as experimental on <a href="https://addons.mozilla.org/en-US/firefox/users/info/50466">AMO</a>. Personally I did not see any benefits 
of going through their approval process for my addons. This is the first one I can see.</p>

<p>Warning: The old version of FireQuery (0.3) breaks the HTML panel in Firebug 1.5. You have to disable the extension or update to the latest version to fix the issues.</p>

<p>Note: <strong>FireLogger</strong> (FirePython) will be updated later. I still have it on my TODO list but the new release needs more work and I didn’t manage to find time to make it happen (I’m sorry Guido). Folks interested in bleeding edge versions may always run the latest and greatest from <a href="http://github.com/binaryage/firelogger">sources at github</a>.</p>

<h4 id="dont-miss-other-cool-firebug-plugins">Don’t miss other cool Firebug plugins</h4>

<p>Especially excellent <strong>FireCookie</strong> and <strong>EventBug</strong> by <em><a href="http://www.softwareishard.com">Jan Odvarko</a></em>:</p>

<ul>
  <li><a href="http://www.softwareishard.com/blog/firebug/new-firebug-15-debugging-cookies">http://www.softwareishard.com/blog/firebug/new-firebug-15-debugging-cookies</a></li>
  <li><a href="http://www.softwareishard.com/blog/planet-mozilla/eventbug-firefox-36">http://www.softwareishard.com/blog/planet-mozilla/eventbug-firefox-36</a></li>
</ul>

<p>The full list of Firebug extensions <a href="http://getfirebug.com/extensions/index.html">is here</a>.</p>

<h4 id="the-web-is-moving-quickly">The web is moving quickly</h4>

<p>Firebug authors did really great work on this release. I’d like to thank them on behalf of the dev community. Without Firebug we would return back to the trees.</p>

<p><strong>Happy web development with new Firebug in 2010!</strong></p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder with tabs!]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-with-tabs/"/>
        <updated>2010-01-11T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-with-tabs</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>I’m proud to announce a new version of <a href="http://totalfinder.binaryage.com">TotalFinder</a> which introduces the tabs feature.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.6.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.6.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p><img class="blog-image no-shadow" src="/shared/img/totalfinder-mainshot.png" title="TotalFinder has Chromium tabs!" /></p>

<p>The next expiration date is set to January 25, 2010 and it will be probably maintenance release to iron out all problems introduced in this ground breaking update.</p>

<h4 id="tabs-gently-ripped-from-google-chrome-project">Tabs gently ripped from Google Chrome project</h4>

<p>I had an idea of bringing tabs experience into Finder back in November 2009. Obviously this is a hard task, but so exciting. I’m quite new to Cocoa and I’ve never implemented such a complex UI element in Cocoa before. But I’m not afraid to search the internet and get deep into problems I happen to be exploring.</p>

<p>Luckily enough, there is a great state-of-the-art open source tabs implementation in the <a href="http://code.google.com/p/chromium">Chromium project</a> available. I’ve studied briefly their codebase and it looked like a promising path to follow. I took their main browser window implementation and also components implementing tabs and extracted them from the main project. I’ve spent few days stripping dependencies and isolating functionality I needed. Dirty job but it paid off. After few evenings I’ve got working skeleton app with blank tabs.</p>

<p>I’d like to thank Google who made this all possible. I was really surprised how clean and well-documented the Chrome code is. People working on it earned my full respect. Kudos guys! By the way <a href="http://en.wikipedia.org/wiki/Blacktree_Software">Alcor</a>, the guy who invented Visor and QuickSilver, is also working on mac-specific features of Google Chrome. This browser thingy is in good hands.</p>

<h4 id="tabs-transplantation-with-finders-as-child-windows">Tabs transplantation with Finders as child windows</h4>

<p>The next big task was to integrate tabs implementation with Finder. It wasn’t clear to me how could I possibly do it. In the Chromium implementation every new tab has it’s content area realized as a NSView. In the case of Chrome, tab contents are obviously web pages rendered by the webkit. In case of TotalFinder I wanted to render inner contents of original Finder windows.</p>

<p>Remember? I don’t have source code of Finder, so I basically need to act as a middleman between OSX and Finder.app. Understanding both sides and at interesting points faking what OSX is telling to Finder and altering what Finder is doing to OSX. That’s my playground. For example I’m operating on Cocoa level by talking to OSX on Finder’s behalf.</p>

<p>I tried a technique of relocating NSViews from temporary Finder windows to tab contents. This brutal transplantation caused Finder to die quickly. I was trying hard to save the situation, but it is probably too brutal to relocate NSViews from main Finder window into hostile windows. Making this work would probably need to bypass big parts of Finder internals. Scary!</p>

<p>But I didn’t give up. The main problem I was facing was how to re-use whole Finder windows as they are without disassembling them into smaller parts. I could overlay windows one on top of other and sync their positions, but I needed to solve window ordering problem. I simply needed to glue two or more windows together and fake them to act as one window for the user in all situations. I was looking for solutions and I’ve found quite hidden gem. The “child windows” feature of OSX windowing system. After few experiments I was seeing the light of hope again.</p>

<p>Child windows was a great bet and it solved the main pain point. The rest was just hacking around problematic behaviors. By the way you may try to do a window screenshot of the TotalFinder (CMD+SHIFT+4 and then hit SPACE). You will see clear split between tab content realized as a child window and frame window itself.</p>

<p>I’m pretty excited about this solution. It works better than I anticipated. In a nutshell it is pretty clean play with windowing system without breaking Finder consistencies.</p>

<h4 id="whats-next">What’s next?</h4>

<p>I’m pretty confident I can make dual-panel work using a similar technique. I have a semi-working prototype with relocating NSViews. In this case it was easier, because NSView transplantation takes place between two finder windows which is obviously not that destructive.</p>

<p>But with this new technique I have another path I can possibly follow and I believe child-window technique is generally a better way to go. Cross your fingers.</p>

<p>Please test v0.6 with your workflows and <a href="http://getsatisfaction.com/binaryage">share</a> your experiences with me.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[The first year of BinaryAge: Inception]]></title>
        
        <link href="https://blog.binaryage.com//the-first-year-of-binaryage/"/>
        <updated>2009-12-31T00:00:00+00:00</updated>
        <id>jduff.github.com:/the-first-year-of-binaryage</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>I’m just sitting in the train on the way back to Prague. This gives me precious few hours to look back and think about the last year…</strong></p>

<h4 id="worked-on-hashpage">Worked on HashPage</h4>

<p>I started the year in a rush working on the <a href="http://hashpage.com">HashPage project</a>. This is a startup idea initiated by my friend Tomas. He proposed to create a web based service which enables people to build “live” personal homepages on top of their social feeds. Imagine it as a <a href="http://friendfeed.com">FriendFeed</a> with a web based site creator, so people can aggregate, customize their web presence and centralize it on one place under their own domain name.</p>

<p>By the start of the January I had been working on this project for almost four months fulltime. You know, I’m a web developer and I clearly saw that for flexible customization we need really powerful tool. Don’t forget that I was building it primarily for myself so I put all my programmer’s expectations into the final product vision. I turned HashPage into a monster web-based website builder tool with drag&amp;drop visual editor, code editor, components library, skins library, feed aggregator, coding environment, development sandbox, … crazy stuff, but damn cool.</p>

<p>Tomas was proposing much simpler solution, but doing simple things could not possibly satisfy me. We decided to go apart and I’ve continued a few more weeks working on the project on my own. After eight months of day-night coding I simply burned out. It wasn’t a good time.</p>

<h4 id="joined-transpond">Joined Transpond</h4>

<p>In April I attended Prague’s <a href="http://techcrunch.com">TechCrunch</a> party to meet like-minded folks and possibly present the HashPage. For this occasion I registered <a href="http://binaryage.com">binaryage.com</a> and put some basic info there. The truth is that I presented HashPage with almost zero response from the audience, but there is a good side of it: I met Richard there.</p>

<p>Richard is an american guy who has been living in Prague for many years. He has been working for SF-based startup <a href="http://transpond.com">Transpond.com</a> and presented their own product on TC party and gave me an opportunity to join them and help them build their web-based tool for creating Facebook apps. To be honest I didn’t come to TC party to get hired, especially not by a Valley startup, so first time I talked to him I was just saying “no way! I have my own cool project. Do you see? I cannot let it die”. But then I tested their advanced web based builder at <a href="http://iwidgets.com">iwidgets.com</a> and I decided to get back in touch with him and get on board. It was because they are working on cool stuff. At least from technical point which definitely caught my eye. And as I found out later they are great guys too!</p>

<h4 id="applied-to-join-bespin-team">Applied to join Bespin team</h4>

<p>Yeah, I’m the type of guy who has 300+ technical blogs in his news reader and you can bet on that I have there also personal blogs from Dion and Ben, the <a href="http://ajaxian.com">Ajaxian guys</a>. Sometime by the end of August one of them wrote that Mozilla is looking for another guy to join the <a href="https://bespin.mozilla.com">Bespin</a> team with the link to application form. That evening it sounded like a great challenge for me, I got even so excited that I clicked the link and applied.</p>

<p>Man, I’m such a big Bespin fan that I wanted to join Dion and Ben to work on this cool thingy. And of course I have my own vision how Bespin should work and look like. Mozilla got back to me after month or so and I went through several Skype interviews. Finally I got to Mozilla’s headquarters for the final row of interviews. It was during my Transpond visit in SF back in October. Unfortunately I didn’t make it, but it was a great time anyway. I’ve talked to so many great folks I previously knew only from RSS and the web. And I spotted there also Brendan Eich. It was an exciting time!</p>

<p>The irony is that big part of the reason why I wanted to join Bespin was to work directly with Dion and Ben. But in the meantime they left Mozilla and joined Palm to help build their web platform, especially <a href="http://ares.palm.com">Ares - web-based app builder</a>. Yeah, I’m telling you web-builders are hot!</p>

<h4 id="shared-some-open-code">Shared some open code</h4>

<p>I consider myself primarily as a tools maker. I have been creating tools in my demoscene times, during my game development career and the same is true for my web development path. These projects are simply side effects of internal solutions to my own needs I had during my day-work. Fortunately, I was able to take some extra time to package them and share them with fellow developers.</p>

<p>During my work with App Engine, I needed a logging solution so I created <a href="http://firelogger.binaryage.com">FireLogger for Python</a>. Later I extended it to work with PHP, so you can get <a href="http://firelogger.binaryage.com/php">FireLogger for PHP</a>. The <a href="http://drydrop.binaryage.com">DryDrop</a> project was my attempt to solve the need of hosting simple static websites right from GitHub for free. I love jQuery and did pretty complex jQuery UI stuff in HashPage. So <a href="http://firequery.binaryage.com">FireQuery</a> was just a logical extension to make my life easier. And I guess it is quite useful for other folks out there.</p>

<p>In February I adopted <a href="http://blacktree.com">Visor by Blacktree</a>. Visor is a great hack. One of those small things which greatly change your productivity workflows. In a good sense, of course! My original motivation was just to fix broken AppleScript support in Visor, because I wanted to automate some server luncher scripts in HashPage, but then I fixed few more serious bugs and the project turned to being adopted as my own baby. Alcor is probably busy doing <a href="http://code.google.com/p/qsb-mac/">other</a> <a href="http://blacktree.com">cool</a> <a href="http://www.google.com/chrome">stuff</a> so I’ve created <a href="http://github.com/darwin/visor">fork on Github</a>. Later he gave me access to <a href="http://code.google.com/p/blacktree-visor/">Google Code hosted project</a>, thanks a lot!</p>

<h4 id="started-totalfinder">Started TotalFinder</h4>

<p>During September I was messing with Objective-C internals to make Visor work on Snow Leopard. You know reverse-engineering Terminal.app internals for SIMBL hacking and stuff like that. And at that point I figured out that Finder.app is a Cocoa application. I always thought it was an app from Carbon ages!? Did a quick google for it and found confirmation that Apple has silently rewritten Finder into Cocoa in Snow Leopard.</p>

<p>And a crazy idea quite hit my mind. SIMBL? What if? What if I can heal some of Finder’s weak points and make it suitable as a programmer’s file manager? Wouldn’t it be huge? After few evenings of experiments and SIMBL hacking I got a visorized Finder SIMBL plugin workng. Satisfaction! I was feeling so powerful. One man can take Apple’s own flag product and extend it to make it better. Later I named this project TotalFinder and you can definitely expect to hear about it more in the next year.</p>

<h4 id="whats-next">What’s next?</h4>

<p>Well, my problem is that I have so many ideas and experimental projects on my shelf. It’s very hard to decide what is more important to work on. Should I make browser extensions? web services? iPhone applications? Mac applications? SIMBL plugins? or is better to do some custom development, save some money and then dedicate fulltime to bootstrap something again? This is still an open question, but whatever I do I cannot afford to fail again.</p>

<p>I think the trend is promising. 2008 was pretty bad for me personally. 2009 was much better. And 2010 is going to be great. I strongly believe so. My long term goal is to turn BinaryAge into a small indie development company, to work on cool projects, to do some interesting contract work and possibly make a better living from it.</p>

<p>Thanks for your support and wish you all the best in the new year.</p>

<div class="footnote">I'd like to also thank my family, friends and all contributors who helped to make this real.</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder polishing]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-polishing/"/>
        <updated>2009-12-18T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-polishing</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>This is just a maintenance release of <a href="http://totalfinder.binaryage.com">TotalFinder</a>. Christmas time is busy and I really didn’t manage to save a few evenings to dig deeper into Finder internals.</strong></p>

<div class="blog-download">
    <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.5.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.5.dmg</div></a>
    <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p>The next expiration is set to January 11, 2010 and this gives me some time to work on dual-panel browser during holidays.</p>

<h4 id="alpha-v05-changes">ALPHA v0.5 changes</h4>

<ul class="changes">
    <li><b>NEW:</b> Added tweak option "Don't customize Dock Icon".</li>
    <li><b>NEW:</b> Installer displays warning if SIMBL is not detected.</li>
    <li><b>NEW:</b> Archive contains compatible SIMBL package (for the case where TotalFinder.dmg is found on Planet of the Apes).</li>
    <li><b>FIXED:</b> Quick TotalFinder restart from Preferences Pane is not counted as a crash.</li>
    <li><b>FIXED:</b> Using latest Sparkle which supports asynchronous package installation. This fixes installer choking when updating via Sparkle's "Install and Relaunch" button.</li>
</ul>

<h4 id="totalfinder-is-pretty-stable">TotalFinder is pretty stable</h4>

<p>I have been using TotalFinder for more than month now and I have no crash-related issues so far. Even system restarting is peaceful (since version 0.3).
There are maybe some window activation issues. For example when you do CMD+TAB, TotalFinder’s main window should slide up in my opinion. 
Or when some app wants to open folder in Finder, it should not open brand new window, but reuse TotalFinder 
and slide up instead. But these are details I will work out during next month(s).</p>

<h4 id="tabs-would-be-great">Tabs would be great</h4>

<p>Do you remember tabs in a title bar from Safari 4 beta?</p>

<p><img class="blog-image" src="/images/safari-beta-tabs.jpg" title="Safari 4 (beta) tabs - removed in final version" /></p>

<p>I know it is against usability, but Visor and TotalFinder are special case apps. These are system-wide windows sliding from “nowhere”. 
So they couldn’t be treated as apps following usability guidelines anyway. 
I like the idea of tabs in the title bar because it does not interfere with existing
Finder UI, I’m concerned especially about the toolbar of course. Also it is perfect fit for TotalFinder sliding from the bottom.</p>

<p>I’m looking for some open source implementation of Cocoa app tweaking title bar section of the main window. 
Haven’t found any implementation with safari-like tabs yet, but I’m going to look at the Chromium project. 
Mac version of Chrome browser has nice tabs and does some kind of custom window titlebar rendering.</p>

<hr />

<p>Please test v0.5 and better don’t use Sparkle “Install and Relaunch” button, that should be fixed from 0.5 up.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[FireQuery 0.4 with Firebug 1.5 support]]></title>
        
        <link href="https://blog.binaryage.com//firequery-with-firebug-15-support/"/>
        <updated>2009-12-13T00:00:00+00:00</updated>
        <id>jduff.github.com:/firequery-with-firebug-15-support</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/firequery-128.png" class="intro-icon" /></p>

<p><strong>Did not do much real work during the weekend because of pre-christmas drinking with friends :-) But I’ve at least released a new version of <a href="http://firequery.binaryage.com">FireQuery</a> which finally supports <a href="http://getfirebug.com">Firebug 1.5</a> (in beta right now).</strong></p>

<h4 id="firebug-15-support">Firebug 1.5 support</h4>

<p>Many thanks to <a href="http://twitter.com/sroussey">Steven Roussey</a> who <a href="http://github.com/binaryage/firequery/commits/master">implemented changes</a> needed for new Firebug.</p>

<h4 id="alternative-jquery-version">Alternative jQuery version</h4>

<p>You may specify alternative jQuery version by typing <code class="language-plaintext highlighter-rouge">about:config</code> into browser URL:</p>

<p><img src="/images/about-config-jquery-url.png" class="blog-image no-shadow" style="width:600px" title="advanced FireQuery configuration via about:config" /></p>

<p>Search for <code class="language-plaintext highlighter-rouge">extensions.firebug.firequery.jQueryURL</code> key and change it to fit your needs. For example you may specify one of Google-hosted <a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#jquery">jQuery versions</a>.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[I can haz folders on top]]></title>
        
        <link href="https://blog.binaryage.com//i-can-haz-folders-on-top/"/>
        <updated>2009-12-09T00:00:00+00:00</updated>
        <id>jduff.github.com:/i-can-haz-folders-on-top</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>Yes, the new version of <a href="http://totalfinder.binaryage.com">TotalFinder</a> supports <a href="http://getsatisfaction.com/binaryage/topics/show_folders_always_on_top">Folders on Top feature</a>.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.4.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.4.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<h4 id="folders-on-top">Folders on Top</h4>

<p>Go to Tweaks section in TotalFinder preferences.</p>

<p><img class="blog-image no-shadow" style="width:300px" src="/images/folders-on-top.png" title="'Folders on Top' preferences" /></p>

<h4 id="toggling-hidden-files">Toggling hidden files</h4>

<p>Right now you have to restart Finder to make “Show Hidden Files” toggle effective. This is annoying, especially because I want to make this toggle available on a keyboard shortcut in the future.</p>

<p>Unfortunately the Finder.app author reads related plist settings in the beginning after program launches and stores the value in-memory. Unfortunately the method for reloading this toggle is not exposed. I was at least able to detect the exact position in-memory for the current version and successfully refresh the browser view, but this would be very fragile solution. The problem is that this may change for every binary and any Finder update could break it. I’m looking for better solution. Ideas?</p>

<h4 id="sparkle-experience">Sparkle experience</h4>

<p>Installing update via Sparkle has one problem. I expect Finder to quit during install. But this is not the case when you run installer via Sparkle update screen. Sparkle keeps Finder alive and relaunches it after installer finish. Need to find some solution to initiate the installer “from outside” and let Finder quit gracefuly before install.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder with Sparkle (v0.3)]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-with-sparkle/"/>
        <updated>2009-12-06T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-with-sparkle</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong>I have made some progress on <a href="http://totalfinder.binaryage.com">TotalFinder</a> during the weekend. This is mostly a maintenance release.</strong></p>

<div class="blog-download">
  <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.3.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.3.dmg</div></a>
  <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p>I wanted to make stable install/uninstall experience and fix bugs reported by early adopters. Thank you guys! I’ve added a new feature of updating TotalFinder via <a href="http://sparkle.andymatuschak.org">Sparkle</a>. It was really easy to integrate. Kudos Andy!</p>

<h4 id="alpha-v03-changes">ALPHA v0.3 changes</h4>

<ul class="changes">
    <li><b>NEW:</b> Sparkle updating system. </li>
    <li><b>NEW:</b> Added red face preventing continuous crashing during startup (because Finder is being restarted after crash by launchd).</li>
    <li><b>NEW:</b> Added uninstall script. </li>
    <li><b>FIXED:</b> Changed TotalFinder window level so that auxiliary floating windows are visible on top of it (<a href="http://getsatisfaction.com/binaryage/topics/deactivate_always_on_top_window">more info</a>).</li>
    <li><b>FIXED:</b> Fixed Echelon registration into startup items. Previously Echelon wasn't started again after restart.</li>
    <li><b>FIXED:</b> Desktop icons should persist during Finder restarts. I'm restoring important .DS_Store files to original locations during restart.</li>
</ul>

<h4 id="unhappy-red-face">Unhappy red face</h4>

<p>The Finder is being automatically restarted after a crash by the launchd process. This is usually a good thing. The user is not confused that her Finder is missing.</p>

<p><img class="blog-image" style="width:300px" src="/images/sad-red-face.png" title="Sad red face in status menu area" /></p>

<p>The problem with TotalFinder is that it may be unstable and crash on some machines during Finder startup. This would lead to infinite cycle of restarts and crashes. I’ve implemented sad red face, which appears as menu item if Finder crashes during the first ten seconds after launch. If you feel lucky, you may try to re-launch it again. Anyway, don’t forget to “send me”:mailto:antonin@hildebrand.cz your crash report.</p>

<h4 id="persistent-desktop-settings">Persistent desktop settings</h4>

<p>In v0.2.1 you might lose your desktop icons positions and other settings during system restart. This applies only when in .DS_Store redirect mode.</p>

<p>I did investigation of what is happening during system launch. The problem was that TotalFinder is not injected into Finder.app immediately but with some delay.  In this time period Finder looks for .DS_Store on desktop, but there is no such a file, because it was redirected last time when TotalFinder was live. So Finder creates brand new .DS_Store on desktop and resets settings to defaults.</p>

<p>My solution to this problem is to copy important .DS_Store files back to original places when TotalFinder is about to be terminated. This works pretty reliably. Right now I’m restoring .DS_Store on user’s desktop and in user’s home folder. This seems to be working fine for me. Let me know if there is another important .DS_Store file which should be restored during Finder restart.</p>

<h4 id="towards-stable-totalfinder">Towards stable TotalFinder</h4>

<p>My goal for next week is to make TotalFinder really stable. Do some refactoring and lay out good foundation for next big feature: dual-panel mode. I know this will be hard to implement, but I’m still quite optimistic.</p>

<p>Thank for your time testing v0.3.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[TotalFinder - alpha call for testing!]]></title>
        
        <link href="https://blog.binaryage.com//totalfinder-alpha/"/>
        <updated>2009-11-29T00:00:00+00:00</updated>
        <id>jduff.github.com:/totalfinder-alpha</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/totalfinder-128.png" class="intro-icon" /></p>

<p><strong><a href="http://totalfinder.binaryage.com">TotalFinder</a> is my attempt to make Finder.app better for programmers and Mac power users. I want it better for myself!</strong></p>

<h4 id="the-story">The Story</h4>

<p>I use Finder as my primary file manager and I have many small ideas how could I make it better. But my ultimate goal is quite ambitious. The goal is to extend Finder to support dual-panel mode like Total Commander. People around me are leaving Windows for Macs and asking for a Total Commander replacement. Need to hurry! :-)</p>

<p>Do you know <a href="http://visor.binaryage.com">Visor</a>? TotalFinder is also implemented as a <a href="http://en.wikipedia.org/wiki/SIMBL">SIMBL</a> plugin which extends Finder.app functionality. TotalFinder works in Snow Leopard only. The reason is that Finder.app has been rewritten into Cocoa in Snow Leopard which finally made this hacking possible.</p>

<h4 id="totalfinder-02-alpha">TotalFinder 0.2 ALPHA</h4>

<div class="blog-download">
    <a class="download-link" href="http://downloads.binaryage.com/TotalFinder-0.2.1.dmg"><img src="/shared/img/small-download-button.png" /><div>http://downloads.binaryage.com/TotalFinder-0.2.1.dmg</div></a>
    <div class="download-note">The full changelog: <a href="http://totalfinder.binaryage.com/changelog.html">http://totalfinder.binaryage.com/changelog.html</a></div>
</div>

<p>It was tested on my MacBook Pro 17” with 10.6.2 OSX running 32-bit kernel.</p>

<p>Before you install it, open terminal and prepare this command:</p>

<p><code class="language-plaintext highlighter-rouge">rm -rf "/Library/Application Support/SIMBL/Plugins/TotalFinder.bundle"</code></p>

<p>There is a chance that during startup TotalFinder crashes and brings down whole Finder.app. The problem is that there is a process continuously starting Finder.app if it is not running somewhere in OSX. So it ends as an infinite loop of Finder.app starts and crashes until you remove TotalFinder SIMBL.</p>

<p>You were warned! Stay sharp!</p>

<p>Note: The bug should be fixed in 0.2.1</p>

<h4 id="features">Features</h4>

<p>OK, let’s see some screenshots:</p>

<p><img src="/images/tf02-features.png" style="float:left; width: 49%" title="Preferences panel with Visor feature" />
<img src="/images/tf02-dsstore.png" style="float:left; width: 49%" title="Preferences panel with .DS_Store redirection options" />
<img src="/images/tf02-tweaks.png" style="float:left; width: 49%" title="Preferences panel with various tweaks" />
<img src="/images/tf02-purchase.png" style="float:left; width: 49%" title="Preferences panel with info/purchase screen" /></p>

<div class="clear"> </div>

<p>As you can grasp from the images this version implements two main features:</p>

<ul>
  <li>Visor-like system-wide Finder window available via a hot-key</li>
  <li>Prevention of littering .DS_Store files all over the place</li>
</ul>

<p>And you can also see that I’m planning to start selling this at some point in the future when the thing gets more stable.</p>

<h4 id="how-does-ds_store-redirection-work">How does .DS_Store redirection work?</h4>

<p>I’m pretty excited about solving the problem which has been bugging me for more than two years since the day I switched to Macintosh. Every single day!</p>

<p>Look, I use Finder.app with enabled hidden files and I’m also pretty heavy Terminal.app user. The .DS_Store litter makes me cry! If you ever happened to google for a solution, you could find just some simple scripts for deleting .DS_Store files (futile!). Or maybe there is some commercial app which is capable of watching filesystem and deleting them after creation. But this is not good enough for me! I’m using folder colors in Finder ;)</p>

<p>Here is what I did in TotalFinder:</p>

<ul>
  <li>I’ve redirected low-level filesystem calls which Finder.app does:
    <ul>
      <li>Anytime Finder.app is asking to open <code class="language-plaintext highlighter-rouge">/some/folder/.DS_Store</code> file, I open it as <code class="language-plaintext highlighter-rouge">/usr/local/.dscache/some/folder/_DS_Store</code></li>
      <li>This way Finder thinks files are at original places but they are being physically created in prefix folder, effectively sandboxing them</li>
      <li>The only exception is the prefix folder itself, when you go and see it in the Finder, no redirection is applied</li>
    </ul>
  </li>
  <li>I’ve implemented kernel extension Echelon, which monitors folder renames (and deletes) and sends them to TotalFinder
    <ul>
      <li>You see why. This is important to keep DS_Store folder structure in prefix directory mirroring actual structure on the disk</li>
    </ul>
  </li>
</ul>

<p>Yeah, kernel extension sounds scary. But I didn’t find a better solution in user-space. FSEvents are not precise enough (it just reports “something was changed”). BSD kqueues must be registered on per-file basis, so it is not usable in this scenario. At the end of the day that kernel extension turned out to be a really light-weight solution. I use KAUTH API to monitor kernel filesystem events. I do it only if TotalFinder is connected and only for renames and deletes. Testing is a simple C-string comparison and sending notification via socket.</p>

<p>I’ve been using TotalFinder with this redirection enabled for a while and it works pretty well. I’ve noticed only two drawbacks so far:</p>

<ul>
  <li>.DS_Store file is created on Desktop during OSX restart, Finder crash or TotalFinder reinstallation
The reason is that SIMBL plugin gets injected too late and Finder manages to write this .DS_Store file</li>
  <li>.DS_Store file is created when you modify Spotlight comment on a file
This is caused by mdworker process and has no direct relation to Finder.app process. 
It seems like Apple engineers scattered DS_Store functionality into more applications.
I’m still investigating this. Temporary workaround is not using these Spotlight comments. Which is my case anyway.</li>
</ul>

<p>I hope this is enough info for you to get started playing with TotalFinder. Your <a href="http://getsatisfaction.com/binaryage/products/binaryage_totalfinder">feedback</a> is appreciated!</p>

<p>I’ve fixed tons of <a href="http://visor.binaryage.com">Visor</a> bugs and made it possible under Snow Leopard. Now it is your turn to help me roll this out :-) Thanks!</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Future direction of XRefresh]]></title>
        
        <link href="https://blog.binaryage.com//xrefresh-future-direction/"/>
        <updated>2009-11-15T00:00:00+00:00</updated>
        <id>jduff.github.com:/xrefresh-future-direction</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/xrefresh-128.png" class="intro-icon" /></p>

<p><strong><a href="http://xrefresh.binaryage.com">XRefresh</a> is a simple tool which is able to refresh a web page in the browser in reaction to a file modification.</strong></p>

<h4 id="here-is-the-problem">Here is the problem</h4>

<blockquote>
  <p>I want to prototype HTML and CSS changes on live page (Firebug), but I don’t want to manually sync the changes back to my original sources.</p>
</blockquote>

<p>XRefresh is especially useful on dual monitor system. You can stay in your favorite editor and as you type it will preview the page automatically on a secondary monitor in open browser window.</p>

<h4 id="the-implementation">The implementation</h4>

<p>XRefresh is implemented as a browser extension and a filesystem monitor. These two components talk to each other using TCP connection. Whenever something changes, the monitor notifies the extension which then instructs the browser to do a full refresh of the page.</p>

<p>This solution has some advantages:</p>

<ul>
  <li>it is independent of the text editor or IDE you are using for web development</li>
  <li>is is independent of the server-side stack (you can run locally any server technology you want)</li>
  <li>it is possible to use XRefresh over a network (in case you are editing files on a remote box)</li>
</ul>

<p>Full page refresh is a robust solution and works pretty well for simple static pages, but it has one big drawback for dynamic pages. After refresh you usually lose state of the web application. Let’s say you have AJAX application, which has some dynamic UI. Say, a HTML dialog opened after clicking on a button. For prototyping such an UI you have to first click through application to get into the required state. But XRefresh does a full refresh which forces you to this again and again after every tiny change to a file. This destroys the original productivity workflow. As I was doing more and more complex pages I was thinking how to solve this problem…</p>

<p>The first idea was to use some kind of macro recorder and replay user actions after every refresh automatically. This seemed as a pretty general solution in theory but didn’t work in reality. In Firefox I tried to implement simple listener for user events like mouse clicks and key strokes and then tried to replay them on top of new page. This approach had terrible timing issues and also failed because not all events were 100% reproducible. Some products like iMacros, Selenium or other tools are trying to implement something like that. Maybe they have found some way how to do it well, but from this experience I doubt it is a robust solution in more complex cases.</p>

<p>The second idea was to solve this just for CSS prototyping. In case the page uses externally linked CSS files, it is easily possible to refresh just external CSS file and let browser do the hard work of updating styles without full refresh. This worked surprisingly well. With TextMate on OSX I was able to get to a Firebug-like CSS prototyping experience. The only drawback is that it puts constraints on XRefresh user: it works only for CSS, you have to reference CSS files externally, no CSS dependencies via @import and you have to keep to a simple URL mapping schema (I’m using fuzzy filename&lt;-&gt;url matcher to decide what CSS references to update).</p>

<h4 id="but-what-about-live-html-update">But what about live HTML update?</h4>

<p>This is still an open problem and much harder. I’m thinking about a solution for this. It is not robust but I believe it should be useful for 99% of cases (at least when user learns safe editing patterns).</p>

<p>The idea is to have some kind of smart diff algorithm. Whenever file changes don’t do a full refresh, but instead reload just affected HTML file into the browser in the background. Because we know the original HTML source and the new HTML source we can do a diff of these. This way we can identify modified chunks. With the knowledge of HTML parsing we can extend these chunks into some kind of “address plus modification descriptor”. Address can be selector, xpath or something like anchoring regexp. Modification is something like “replace aaa with bbb” or “insert xxx after yyy” or even “set innerHTML of addressed node” in case the change went across HTML node boundaries. In javascript we can then implement updater function which is able to consume these patches and apply them to live DOM.</p>

<p>Of course, this is far from a robust solution. But we don’t need a robust one, we need <strong>good enough solution</strong>(tm). Smart diff encoding which maps well on DOM is one important task. The other difficult problem is having these changes not interfere with dynamic page functionality. As you can see obvious complication is event handlers attached to existing DOM nodes. Less obvious is javascript expando properties on DOM nodes: with replacing whole DOM subtrees we are going to lose them. But this may be not as bad as it seems. The updater can be smart enough to reuse existing nodes whenever possible. Or Firefox 3.6 has a new API for iterating event handlers on nodes. Theoretically we can collect important expando javascript properties and event handlers and re-apply them on new nodes. Yeah, sounds like a lot of troubles and there are probably more problems I quite don’t see right now. But the problem is really challenging (at least for me).</p>

<p>I’m thinking about a proof-of-concept project where we can test this idea.</p>

<h4 id="the-idea">The idea</h4>

<p><strong>Create a web-based editor for HTML and CSS with live-update feature</strong></p>

<ul>
  <li>Create a bookmarklet which enables user to inject ‘updater.js’ javascript file into any HTML page.</li>
  <li>Implement updater.js
    <ul>
      <li>it opens a new browser window and embeds there Bespin code editor (they released standalone embeddable version a few days ago), put parent page’s HTML in there</li>
      <li>it implements protocol for incrementally changing live page by accepting and applying
        <ul>
          <li>CSS “patches”</li>
          <li>HTML “patches”</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>In the code window implement watcher.js, which watches changes in the code editor, continuously making diffs and translating them into a series of patches (if applicable)</li>
  <li>Implement simple communication channel between parent window and code window (as simple as window.opener.update(jsonMessage) ). 
Wire watcher.js to send messages to updater.js.</li>
</ul>

<h4 id="the-challenging-parts">The challenging parts:</h4>

<ul>
  <li>design protocol for communication between watcher and updater</li>
  <li>implement smart diff analyzer or maybe full HTML/CSS parser on watcher side</li>
  <li>implement efficient updater (use DOM APIs for incrementally updating HTML and CSS or some suitable library)</li>
</ul>

<h4 id="keep-in-mind">Keep in mind:</h4>

<ul>
  <li>by “patches” I don’t necessarily mean unified patches but rather
high-level JSON descriptions of what to change (a good granularity for
CSS may be CSS-rules level, for HTML minimal enclosing innerHTML-like
snippets addressed by XPaths or CSS selectors?)</li>
  <li>updater.js should be as simple as possible and not pollute global
namespace (imagine inclusion into really messy pages), patching
intelligence should be shifted more towards watcher.js side (imagine
watcher implementation server-side)</li>
  <li>the protocol should possibly work well over the network</li>
</ul>

<h4 id="possible-applications-i-see-right-now">Possible applications I see right now:</h4>

<ul>
  <li>the next version of XRefresh of course :-)</li>
  <li>web-based HTML code editors (there are plenty of them in the wild and to be honest I’m also working on one of them)</li>
  <li>replacement for Firebug’s feature for rewriting pieces of HTML or live Bespin-based CSS editor in Firebug</li>
  <li>development tool for PhoneGap based mobile applications (watcher sends updates directly into running page in webkit in the iPhone simulator)</li>
</ul>

<h4 id="is-this-viable">Is this viable?</h4>

<p>I’m not going to write such a thing right away. It definitely does not look like a weekend project. I’d like to validate this idea and ideally gather like-minded hackers to evaluate it. What do you think?</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[DryDrop Lighting Talk at Google Developer Day Prague]]></title>
        
        <link href="https://blog.binaryage.com//drydrop-lighting-talk-at-gdd-prague/"/>
        <updated>2009-11-07T00:00:00+00:00</updated>
        <id>jduff.github.com:/drydrop-lighting-talk-at-gdd-prague</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/drydrop-128.png" class="intro-icon" /></p>

<p><strong>Yesterday I attended Google Developer Day in Prague. It was a great occasion to meet Googlers, Google fans and other fellow developers. I had a great time there.</strong></p>

<h4 id="lighting-talks">Lighting talks</h4>

<p>The <a href="http://gug.cz/">Czech Google User Group</a> had organized series of Lightning Talks about interesting projects using Google technologies. I took this opportunity and presented the <a href="http://drydrop.binaryage.com">DryDrop</a> project. Thanks!</p>

<p>Here are <a href="http://www.scribd.com/doc/22254506/DryDrop">my slides</a>:</p>

<div class="fluid-object">
  <object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_177397056442800" name="doc_177397056442800" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
    <param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=22254506&amp;access_key=key-1dsiedlaud8co5hkssm2&amp;page=1&amp;version=1&amp;viewMode=slideshow" />
    <param name="quality" value="high" />
    <param name="play" value="true" />
    <param name="loop" value="true" />
    <param name="scale" value="showall" />
    <param name="wmode" value="opaque" />
    <param name="devicefont" value="false" />
    <param name="bgcolor" value="#ffffff" />
    <param name="menu" value="true" />
    <param name="allowFullScreen" value="true" />
    <param name="allowScriptAccess" value="always" />
    <param name="salign" value="" />
    <param name="mode" value="slideshow" />
    <embed src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=22254506&amp;access_key=key-1dsiedlaud8co5hkssm2&amp;page=1&amp;version=1&amp;viewMode=slideshow" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#FFFFFF" name="doc_177397056442800_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" mode="slideshow" />&lt;/embed&gt;
  </object>
</div>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[REBUG - Record the bug and replay it later]]></title>
        
        <link href="https://blog.binaryage.com//rebug-record-the-bug-and-replay-it-later/"/>
        <updated>2009-10-27T00:00:00+00:00</updated>
        <id>jduff.github.com:/rebug-record-the-bug-and-replay-it-later</id>
        <content type="html"><![CDATA[<blockquote>
  <p>What if you could travel back in time?</p>
</blockquote>

<p>I want to share with you an idea for a new tool I’ve had during my work for <a href="http://transpond.com">Transpond</a>. 
In a nutshell, Transpond is building web-based tool for making Facebook applications. Sound exciting?</p>

<p>Have you developed anything for Facebook before? A Facebook application is a piece of code living on your own server but heavily talking to Facebook APIs. 
And Facebook is unfortunately something you cannot take home and run it on your own local server for debugging purposes. 
You need to develop and debug your application against the live site (or the sandbox they provide).</p>

<p>And here is the problem. There is a class of bugs caused by Facebook (i.e. they break something during updates) 
and a class caused by specific data (e.g. encoding problems because a user entered text with diacritics). These bugs are tricky to reproduce. 
The first type is reported by QA but gets fixed before the developer sees it. The second type is hard because the 
developer may be not able to reproduce exactly the same state (for example a newsfeed causing the bug is already replaced with newer content which is not exposing the bug, or the developer is logged in under different account than QA tester).</p>

<p>Many times these bugs are really trivial. I can look at the Net panel in Firebug or javascript console and the cause is obvious. 
But this information is not available when reading a bugreport in Bugzilla. Sometimes I would a give fortune for a link moving me back in time and in front of the browser with the bug exposed…</p>

<h4 id="meet-rebug">Meet Rebug</h4>

<blockquote>
  <p>A tool which is able to reproduce browser state for debugging purposes</p>
</blockquote>

<p>Example usage scenario (heavy AJAX web app with many requests to the cloud)</p>

<p><strong>A Tester’s session:</strong></p>

<ul>
  <li>Tester installs browser extension “Rebug”</li>
  <li>Tester does QA work and if she encounters a bug:
    <ul>
      <li>she clicks “REBUG” button&lt;/span&gt;</li>
      <li>this will serialize the browser state onto remote server and put a URL into the clipboard</li>
      <li>tester opens an issue in her favorite issue tracker (as she would normally do) and pastes the generated link along with description for later inspection by a developer</li>
    </ul>
  </li>
</ul>

<p><strong>A Developer’s session:</strong></p>

<ul>
  <li>Developer installs browser extension “Rebug”</li>
  <li>Developer opens the issue and clicks the rebug link
    <ul>
      <li>Developer sees realtime replay of tester’s session</li>
      <li>Browser ends in the same state as when rebug button was pressed by the tester</li>
    </ul>
  </li>
</ul>

<h4 id="what-real-world-problem-does-it-solve">What real-world problem does it solve?</h4>

<ul>
  <li>Debugging complex, javascript-heavy AJAXy apps is hard. Especially when the app operates in the cloud by communicating with various APIs and services. </li>
  <li>QA people will get a no-brainer tool to store “crash dump” of their browser session after the fact. Programmers will get an easy tool to restore a broken session in their development environment (Firefox+Firebug in the first phase).</li>
  <li>Better dev-team productivity.</li>
</ul>

<h4 id="the-implementation">The Implementation</h4>

<p>The Implementation consists of two fundamental parts:</p>

<ul>
  <li>proxy server (provided as a service)</li>
  <li>macro recorder (browser extension)</li>
</ul>

<p><strong>Proxy server</strong></p>

<ul>
  <li>During tester’s session the proxy server is recording all HTTP traffic. When the Rebug button is clicked, a new record is created by “zipping” all traffic data into one package and giving it a unique session ID.</li>
  <li>During developer’s session every request is served back from zip file (effectively mocking “internet” at the time the session was recorded).</li>
</ul>

<p><strong>Macro recorder</strong></p>

<ul>
  <li>During tester’s session macro recorder is recording all the user’s actions and generating reproducible script.</li>
  <li>During developer’s session recorded script is played back.</li>
</ul>

<p>The technology of macro recorders was already developed by extensions like iMacros or Selenium. I’ve also made one attempt for <a href="http://xrefresh.binaryage.com">XRefresh extension</a> in the past (a very challenging problem).</p>

<h4 id="possible-setups">Possible setups:</h4>

<p><strong>Fully hosted solution:</strong>
<img class="blog-image no-shadow" src="/images/drawing_sV0QB63mkDgRXGUKF-UyLZg_153.png" title="Fully hosted solution" /></p>

<p><strong>Serviced solution:</strong>
<img class="blog-image no-shadow" src="/images/drawing_sY_p-Pz7WbcM4w8OOXKaI3Q_51.png" title="Serviced solution" /></p>

<p><strong>Near proxy solution:</strong>
<img class="blog-image no-shadow" src="/images/drawing_sPkzVArT9_K6tqbFWjwCWIg_48.png" title="Near proxy solution" /></p>

<p><strong>Decentralized solution:</strong>
<img class="blog-image no-shadow" src="/images/drawing_s53VQRbszouhzGpRAnSMJ-g_119.png" title="Decentralized solution" /></p>

<p><strong>Single machine setup:</strong>
<img class="blog-image no-shadow" src="/images/drawing_sarVlC_ISonwxJB-Df3SmhQ_18.png" title="Single machine solution" /></p>

<h4 id="implementation-notes">Implementation notes</h4>

<ul>
  <li>decouple reading proxy from saving proxy</li>
  <li>decouple session storage from proxies</li>
  <li>multi-platform proxy implementation</li>
  <li>recorded script should be applicable to different browsers</li>
  <li>recorded session should be editable …
    <ul>
      <li>test-case creation?</li>
      <li>mapping requests to filesystem?</li>
      <li>session storage as git repo?</li>
    </ul>
  </li>
  <li>developer session should run bypassing all caches</li>
</ul>

<p>External browser inputs should be simulated as closely as possible (browser version, platform, date/time, screen size?, etc.) and the developer should be unobtrusively notified about differences between his setup and the user’s setup - but it is not expected the developer will have exactly the same setup as testing user (for example developer has the Firebug extension which may not be the case of tester).</p>

<h4 id="future-direction">Future direction</h4>

<p>REBUG can be used as a mockup server for automated testing infrastructure. Browser sessions can be generated synthetically and consumed by defined test suites. Recording and hand-making approaches can be mixed. Thanks to storage being a git repo, it can be edited independently on the saving proxy. Reading proxy then can be used by automated tests runner.</p>

<p>Note: Recent <a href="http://www.softwareishard.com/blog/firebug/http-archive-specification/">HTTP Archive initiative</a> is a move in a good direction. Look forward to seeing more tools tackling this problem.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
    <entry>
        <title><![CDATA[Welcome to BinaryAge]]></title>
        
        <link href="https://blog.binaryage.com//welcome-to-binaryage/"/>
        <updated>2009-10-25T00:00:00+00:00</updated>
        <id>jduff.github.com:/welcome-to-binaryage</id>
        <content type="html"><![CDATA[<p><img src="/shared/img/icons/binaryage-badge-128.png" class="intro-icon" /></p>

<p><strong>Hello! I’m <a href="http://hildebrand.cz">Darwin</a> from BinaryAge<br />and you are probably a software developer interested in some of <a href="http://binaryage.com">my tools</a>.</strong></p>

<h4 id="this-is-just-the-beginning">This is just the beginning</h4>

<p>I prefer to spend my time writing actual code than writing articles, so please don’t expect this to be a frequent blog. I’m going to announce here all major binaryage releases. This will also be the best place to explain and discuss new features. I want also share here general ideas, cool tools I find online and productivity tips I’m practicing during my development.</p>

<p>If you prefer short realtime updates about what I’m working on, please consider subscribing <a href="http://twitter.com/binaryage">on twitter</a>.</p>

<p>I look forward to meeting people here, who are passionate about development tools and open-source in general.</p>
]]></content>
        <author>
            <name>Antonin Hildebrand</name>
            <uri>http://hildebrand.cz</uri>
        </author>
    </entry>
    
</feed>
