Bitcetera TechBlog http://www.bitcetera.com/en/rss/ en-us 40 News about Bitcetera products, services and the technologies used. RSS Tips for Mail.app <h2>Why Mail.app?</h2> <p>While Mail.app certainly ain&#8217;t the best <span class="caps">RSS</span> reader out there, having both email and <span class="caps">RSS</span> feeds under one roof certainly has it&#8217;s advantages. This feature has been around for a while but only recently have some nasty bugs been resolved which caused read and deleted articles to re-appear at random.</p> <h2><span class="caps">RSS</span> Folders</h2> <p>If you&#8217;re like me subscriber of a whole range of <span class="caps">RSS</span> feeds, you might want to group feeds at some point. Wouldn&#8217;t it be nice to have all say Ruby related <span class="caps">RSS</span> articles in one folder?</p> <p>This feature is available in Mail.app, however, the context menu in the sidebar doesn&#8217;t show it and thus many don&#8217;t know about it. To create a <span class="caps">RSS</span> folder, click the &#8220;Mailbox -&gt; New Mailbox&#8221; menu item and then select &#8220;<span class="caps">RSS</span>&#8221; in the location dropdown. The folder appears in the sidebar and you can move feeds there.</p> <p>Make sure you enable the Mailbox column in order to see from which <span class="caps">RSS</span> feed a particular article originates.</p> <h2>Feeds with Media Content</h2> <p>Some feeds include media content, most notably pod- or screencast feeds. As of version 4.2, Mail.app attempts to download all linked media content of all <span class="caps">RSS</span> articles being fetched which may result in several GB of traffic, takes a long while and slowly eats up your memory. Once you run out of physical memory, the Mac starts to scratch to disk which pretty much stalls the computer.</p> <p>There&#8217;s no easy cure for this, however, a bug has been filed already and Apple seems to be working on it. Meanwhile, you will have to rely e.g. on iTunes to subscribe to the pod- or screencast directly.</p> <h2>Feed <span class="caps">URL</span></h2> <p>Have you ever tried to find out from which <span class="caps">URL</span> a <span class="caps">RSS</span> feed viewed in Mail.app is being fetched? There is no easy way to display this information in Mail.app itself, but you can open a terminal and type <tt>pubsub list</tt> to get a list of all <span class="caps">RSS</span> feeds subscribed by either Mail.app, Safari or another application using the facilities of Mac OS X.</p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Mon, 17 May 2010 16:02:38 GMT http://www.bitcetera.com/en/techblog/2010/05/17/rss-tips-for-mail-app/ http://www.bitcetera.com/en/techblog/2010/05/17/rss-tips-for-mail-app/ Stay on Top... Offline <h2>Less is More</h2> <p>The list of quality sources such as <span class="caps">RSS</span> feeds, blogs or e-zines is pretty impressive &#8211; and growing. The mere quantity may become a problem once you can&#8217;t dedicate enough time to actually read and understand the bits you identified as your own personal nuggets anymore.</p> <p>If you possess an e-reader, iPhone/iPod or some similar device, you might want to try out <a href="http://www.instapaper.com">Instapaper</a> to cope with this avalanche. The idea is pretty simple: Don&#8217;t read your feeds on the computer screen but quickly scan the content and decide whether to read it in depth later. If so, click on a button in the bookmarks toolbar of your browser to transfer the <span class="caps">URL</span> onto your Instapaper account. Later on, access your Instapaper account, download your personalized compilation in a format suitable for your device (such as ePub), find a cosy couch in your favourite coffee shop and digest the news.</p> <h2>Sony <span class="caps">PRS</span>-505 E-Reader</h2> <p>Despite its popularity, the Sony <span class="caps">PRS</span>-505 e-reader is not state-of-the-art anymore, but if you&#8217;re like me stuck with it waiting for color e-ink displays, there are ways to render it more useful together with Instapaper. You shouldn&#8217;t hold your breath when it comes to official firmware updates from Sony, the company has a sad reputation of phasing out products soon after they hit the shelves. But luckily the <span class="caps">PRS</span>-505 is Linux-based and just recently a new project <a href="http://code.google.com/p/prs-plus">PRS+</a> which aims to provide improved firmware has emerged from the community.</p> <p>Among other things, PRS+ lets you use custom <span class="caps">CSS</span> style sheets for ePub documents which is just what you need to do away with one nasty behaviour the reader shows &#8220;out of the box&#8221;: The monospaced font is very wide and long lines don&#8217;t break which renders most code examples useless as they run off the display area.</p> <h2>PRS+</h2> <p>Installation of PRS+ is pretty easy:</p> <ol> <li>Format an SD with FAT32. (The firmware update later on did not work for me after formatting the SD with Disk Utility on Mac. If you experience the same issue, format the SD on a PC instead.)</li> <li>Download the <a href="http://www.mobileread.com/forums/showthread.php?t=26831">Universal Flasher</a>, unzip it and copy the contents onto the SD card.</li> <li>Download <a href="http://code.google.com/p/prs-plus">PRS+</a>, unzip it and replace the Sony Reader directory on the SD card with the one just extracted.</li> <li>Put the SD card in the <span class="caps">PRS</span>-505 and follow the instructions.</li> </ol> <p>Connect the e-reader, create a directory <tt>/database/system/PRSPlus/epub/fonts</tt> and copy your favourite monospaced TrueType font in there. A very nice font is <a href="http://www.bitcetera.com/en/techblog/2009/10/09/inconsolata-xl-font">Inconsolata</a>, however, it&#8217;s OpenType so you have to convert it beforehand for instance with the <a href="http://onlinefontconverter.com">Online Font Converter</a>.</p> <p>The actual <span class="caps">CSS</span> style sheet goes into <tt>/database/system/PRSPlus/epub</tt>. You can have as many as you like, just give it unique names and <tt>.css</tt> file extension. Here&#8217;s an example for Inconsolata which sets the font size to 17px and wraps long lines:</p> <pre> @font-face { font-family: monospace; font-weight: normal; font-style: normal; font-variant: normal, small-caps; src: url(res:///Data/database/system/PRSPlus/epub/fonts/inconsolata.ttf); } @font-face { font-family: monospace; font-weight: bold; font-style: normal; font-variant: normal, small-caps; src: url(res:///Data/database/system/PRSPlus/epub/fonts/inconsolata.ttf); } @font-face { font-family: monospace; font-weight: normal; font-style: italic; font-variant: normal, small-caps; src: url(res:///Data/database/system/PRSPlus/epub/fonts/inconsolata.ttf); } @font-face { font-family: monospace; font-weight: bold; font-style: italic; font-variant: normal, small-caps; src: url(res:///Data/database/system/PRSPlus/epub/fonts/inconsolata.ttf); } blockquote.message { font-family: monospace; font-size: 17px; white-space: pre-wrap; } blockquote.code { font-family: monospace; font-size: 17px; white-space: pre-wrap; } code { font-family: monospace; font-size: 17px; white-space: pre-wrap; } pre { font-family: monospace; font-size: 17px; white-space: pre-wrap; } </pre> <p>As a final step you have to select which <span class="caps">CSS</span> the reader should use, you find it under &#8220;Settings -&gt; PRS+ Settings -&gt; <span class="caps">EPUB</span> User Style&#8221;. Et voilà!</p> <p><img src="/page_attachments/0000/0029/screenshot.jpg" /></p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Tue, 30 Mar 2010 16:58:12 GMT http://www.bitcetera.com/en/techblog/2010/03/30/stay-on-top-offline/ http://www.bitcetera.com/en/techblog/2010/03/30/stay-on-top-offline/ Mac OS X Terminal.app Tips <h2>Font</h2> <p>I&#8217;ve worked with Monaco as my monospaced font for many years, but there are other fonts available which are equally compact but inproved readability even with small sizes. My favorite these days is the Open Source font <a href="/en/techblog/2009/10/09/inconsolata-xl-font">Inconsolata</a> by Raph Levien which works great at 13 points. To install just download the .otf file and put it into your <tt>~/Library/Fonts</tt> directory.</p> <h2>Clear Scrollback</h2> <p>When calling a command that produces more than a few lines of output, it may be tricky to scroll back to where the output began. A simple trick is to hit <code>⌘K</code> beforehand which will clear the entire scrollback memory and display.</p> <h2>Split Screen</h2> <p>Sometimes, you&#8217;re looking at something in the scrollback and at the same time you want to start typing a command which would cause the window to scroll through to the end. You could open a second window, but splitting the screen may be a nice alternative. This feature has been around for a while, but it&#8217;s easily overlooked: Click on the icon that looks like a grey square just above the vertical scrollbar.</p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Sat, 20 Mar 2010 16:59:57 GMT http://www.bitcetera.com/en/techblog/2010/03/20/mac-os-x-terminal-app-tips/ http://www.bitcetera.com/en/techblog/2010/03/20/mac-os-x-terminal-app-tips/ Eagerness <p>Don&#8217;t worry, this is not about greedy bankers, megalomaniac corporations nor currupt politicians &#8211; although I would love to have a simple fix for these at hand, too.</p> <h2>Simple Example</h2> <p>With eagerness I mean a simple yet important and too often unknown concept of regular expressions. Take this Ruby example, it would yield the same results in any other language such as JavaScript or even <span class="caps">PHP</span>:</p> <pre> "Hello Ruby friend".sub(/^(.*)e/, 'X') # =&gt; "Xnd" "Hello Ruby friend".sub(/^(.*?)e/, 'X') # =&gt; "Xllo Ruby friend" </pre> <p>By default, the <code>*</code> quantifier is eager which means it will eat its way though the string until it hits the <strong>last</strong> subsequent <code>e</code>. If you want it to go no further than the <strong>first</strong> subsequent <code>e</code>, you have to put it in non-eager mode &#8211; and the question mark behind the <code>*</code> quantifier does just that.</p> <p>The eagerness questionmark works behind any quantifier, but for obvious reasons makes sense only behind <code>*</code>, <code>+</code> and <code>{n,m}</code>.</p> <p>&#8220;Fine, dude, but can we use this eagerness thing for anything real?&#8221;</p> <h2>Real World Examples</h2> <p>Yes, we can! Eagerness comes in handy to isolate pieces from a string, a common task if you deal with a little less structured data sources such as webpage content snippets like this one:</p> <pre> &lt;div class="product"&gt;Click &lt;a href="/order"&gt;here&lt;/a&gt; to order Supertool Deluxe (version 1.2.9) now&lt;/div&gt; </pre> <p>A regex to isolate the product and version could look as follows:</p> <pre> s = '&lt;div class="product"&gt;Click &lt;a href="/order"&gt;here&lt;/a&gt; to order Supertool Deluxe [version 1.2.9] now&lt;/div&gt;' s =~ /&lt;div class="product"&gt;.*order ([^\(]+)\[version ([\d\.]+)\]/ $1 # =&gt; "Supertool Deluxe " $2 # =&gt; "1.2.9" </pre> <p>Well, it works somehow, but you&#8217;d have to strip that trailing space from the product name, the expression is somewhat hard to read and if you bump into a beta version &#8220;1.3.0 beta&#8221; or a product called the &#8220;Ultimate order tool&#8221;, you&#8217;re screwed:</p> <pre> s = '&lt;div class="product"&gt;Click &lt;a href="/order"&gt;here&lt;/a&gt; to order Ultimate order tool [version 0.2] now&lt;/div&gt;' s =~ /&lt;div class="product"&gt;.*order ([^\(]+)\[version ([\d\.]+)\]/ $1 # =&gt; "tool " $2 # =&gt; "0.2" </pre> <p>Here&#8217;s an alternative approach using low eagerness:</p> <pre> s = '&lt;div class="product"&gt;Click &lt;a href="/order"&gt;here&lt;/a&gt; to order Ultimate order tool [version 0.3 beta] now&lt;/div&gt;' s =~ /&lt;div class="product"&gt;.*?order (.+?) \[version (.+?)\]/ $1 # =&gt; "Ultimate order tool" $2 # =&gt; "0.3 beta" </pre> <p>If you liked this tip, you might want to take a look at the <a href="/en/techblog/2008/04/01/regex-in-a-nutshell">Regex in a Nutshell Cheat Sheet</a> as well.</p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Mon, 08 Mar 2010 10:35:00 GMT http://www.bitcetera.com/en/techblog/2010/03/08/eagerness/ http://www.bitcetera.com/en/techblog/2010/03/08/eagerness/ From ZenTest to autotest <p>Many people install the <a href="http://www.zenspider.com/ZSS/Products/ZenTest/index.html">ZenTest suite</a> only to get the autotest tool and thus carry around quite a bit of overhead. Yet, not any longer! Michael Grosser has released the <a href="http://github.com/grosser/autotest">autotest</a> gem which contains an improved fork of only the autotest tool. (Should you ever need the full functionality of ZenTest, you can always install the <a href="http://github.com/grosser/zentest">zentest</a> gem along with it.)</p> <p>Following the &#8220;only happy developers do proper testing&#8221; mantra, the popular <a href="/en/products/autotest-growl">autotest-growl</a> and <a href="/en/products/autotest-fsevent">autotest-fsevent</a> gems as of version 0.2.0 released today no longer depend on ZenTest but on Michael&#8217;s autotest. Other new feature include support for more platforms and icon sets, see the <span class="caps">CHANGELOG</span> for the details.</p> <p>If you are upgrading from versions prior to 0.2.0, you should uninstall ZenTest or things might show funky behaviour. Please refer to the <span class="caps">README</span> for more on this.</p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Wed, 03 Feb 2010 16:05:18 GMT http://www.bitcetera.com/en/techblog/2010/02/03/from-zentest-to-autotest/ http://www.bitcetera.com/en/techblog/2010/02/03/from-zentest-to-autotest/ Inconsolata XL Font <h2>Sound Familiar?</h2> <p>I&#8217;m sure you&#8217;ve heard this rap before: &#8220;You&#8217;re sleeping a third of your entire life, so you&#8217;d better get a really nice mattress.&#8221; However beaten that phrase may be, there is some truth in it. And guess what, as a software developer you might spend another nice chunk of your life in front of a code editor and <tt>Courier</tt> or <tt>Monaco</tt> just aren&#8217;t as good as it gets.</p> <h2>Inconsolata</h2> <p>Enter <tt>Inconsolata</tt> created by <a href="http://www.levien.com">Raph Levien</a>. It&#8217;s a monospaced font that reads exceptionally well even at small sizes and is equally suited for use with a code editor, the terminal or for reading non-<span class="caps">HTML</span> mails. However, Raph hasn&#8217;t added bold font weight yet. This is not usually a problem as many applications such as <a href="http://macromates.com">TextMate</a> or the terminal render a fake bold if needed. <a href="/page_attachments/0000/0024/sample.png">Here&#8217;s a sample</a>.</p> <h2>Oops, RubyMine</h2> <p><a href="http://www.jetbrains.com/ruby">RubyMine</a> on the other hand doesn&#8217;t and therefore I&#8217;ve derived a slightly bigger <tt>Inconsolata XL</tt> font which includes a rough bold variant. Just download, unpack and then move the two font files into your <tt>~/Library/Fonts</tt>.</p> <h2>Downloads</h2> <ul> <li><a href="http://www.levien.com/type/myfonts/inconsolata.html">Inconsolata</a></li> <li><a href="/page_attachments/0000/0023/InconsolataXL.zip">Inconsolata XL</a></li> </ul> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Fri, 09 Oct 2009 16:32:23 GMT http://www.bitcetera.com/en/techblog/2009/10/09/inconsolata-xl-font/ http://www.bitcetera.com/en/techblog/2009/10/09/inconsolata-xl-font/ Batch Update TextMate Bundles <p>Most bundles for <a href="http://macromates.com">TextMate</a> are served by some form of version control system. Macromates uses Subversion for it&#8217;s official bundle repository whereas the Ruby herd relies more on Git.</p> <p>Some bundles contain an update menu item and there are a few attempts out there to manage bundles altogether. However, with just a little console-fu, you can update all bundles at once:</p> <pre>find ~/"Library/Application Support/TextMate/Pristine Copy/Bundles" -name .git -execdir git pull --quiet \; find ~/"Library/Application Support/TextMate/Pristine Copy/Bundles" -maxdepth 2 -name .svn -execdir svn up --quiet \;</pre> <p>To mimick the missing &#8220;auto-update all TextMate bundles&#8221; functionality, just put these lines in a cronjob.</p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Tue, 08 Sep 2009 11:10:57 GMT http://www.bitcetera.com/en/techblog/2009/09/08/batch-update-textmate-bundles/ http://www.bitcetera.com/en/techblog/2009/09/08/batch-update-textmate-bundles/ Mock it Real Good <p>A few weeks ago I came across a blog post mentioning <a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a>, an application to put together screen sketches, and as always my first thought was: &#8220;Do I really need a toy like that?&#8221; Now, several sketches and one presentation later, the answer is more &#8220;oh, yes&#8221; than I anticipated at first.</p> <h2>Paper and Pencil</h2> <p>Like many, I have outlined screens with some paper and a pencil until now. And I won&#8217;t mothball that pencil quite yet because it still has one huge advantage: It works in my favorite environment: on the beach. However, things tend to get messy as sketches become more numerous, complex and mature.</p> <p>Therefore after the initial brainstorming, it&#8217;s a good idea to fire up an editor of sorts and morph the sketches into a state worthy of presentation. This is where <a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a> comes into play.</p> <p>It&#8217;s a graphics editor specially designed for screen sketches and comes with a set of UI elements which represent most of what you will need for an average (web) application. Additional UI elements can be downloaded and future versions might bring a larger UI library to start with. Once placed these UI elements can be tweaked, however, the variations are limited to what makes sense for that specific element. This streamlines the number of menus and buttons compared to more generic tools such as OmniGraffle or Adobe Illustrator and thus speeds up the sketching a big deal.</p> <h2>No False Hopes</h2> <p>Mock UI elements are not perfectly styled and don&#8217;t carry the look of any specific environment but resemble more what the good old pencil would have produced. This intentional lack of perfection makes it utterly useless to be pedantic and the resulting sketches don&#8217;t pretend to be anywhere close to a final product yet.</p> <p>The impact of this last sentence only becomes clear once you present the sketches to non-techies such as that notorious guy from marketing or a potential user like I did a few days ago: You run next to zero risk of raising false hopes such as &#8220;wow, look at that beautiful screen, these guys are almost done with my app&#8221;. And at the same time you make it crystal clear that the sketches are just that &#8211; and most likely will see adjustments during implementation.</p> <h2>Need Some <span class="caps">AIR</span></h2> <p>Only downside so far: <a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a> runs on <a href="http://www.adobe.com/products/air"><span class="caps">AIR</span></a> which means you have to install Adobe stuff on your computer. This may hurt, after all, it felt so good when my Mac became an Adobe free zone many years ago. (Not entirely true after Adobe acquired Macromedia, but that&#8217;s another story.) However, after using the online trial for a while, the fun working with it outweighed my adobephobia. And <span class="caps">AIR</span> runs stable and does a pretty good job mimicking a native Mac OS X application.</p> <p>The best way to testdrive <a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a> is the <a href="http://www.balsamiq.com/demos/mockups/Mockups.html">free online version</a> which also comes in handy if you want to send screen outlines to someone who doesn&#8217;t own the software and still would like to fiddle about your sketches. The <a href="http://www.balsamiq.com/products/mockups/desktop#download">downloadable <span class="caps">AIR</span> application</a> runs on all major platforms.</p> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Tue, 11 Aug 2009 21:25:37 GMT http://www.bitcetera.com/en/techblog/2009/08/11/mock-it-real-good/ http://www.bitcetera.com/en/techblog/2009/08/11/mock-it-real-good/ Heredoc with Indent in Ruby <p>Heredocs come in handy when you have to deal with larger multi-line strings in the source code itself. However, it usually breaks the indents:</p> <pre> class Poem def initialize @text = &lt;&lt;END "Faith" is a fine invention When Gentlemen can see But Microscopes are prudent In an Emergency. (Emily Dickinson 1830-1886) END end def recite puts @text end end </pre> <p>But it wouldn&#8217;t be Ruby if there were no way to make this pretty. The minus in <code>-END</code> makes sure any whitespace before the end marker is ignored and the first six spaces of every line are cut when the string collected by heredoc is post processed with <code>gsub</code>:</p> <pre> class Poem def initialize @text = &lt;&lt;-END.gsub(/^ {6}/, '') "Faith" is a fine invention When Gentlemen can see But Microscopes are prudent In an Emergency. (Emily Dickinson 1830-1886) END end def recite puts @text end end </pre> <p>The result for both snippets is exactly the same &#8211; provided you stick to the recommended 2 spaces indent for Ruby source code:</p> <pre> &gt;&gt; Poem.new.recite "Faith" is a fine invention When Gentlemen can see But Microscopes are prudent In an Emergency. (Emily Dickinson 1830-1886) </pre> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Thu, 02 Jul 2009 19:54:30 GMT http://www.bitcetera.com/en/techblog/2009/07/02/heredoc-with-indent-in-ruby/ http://www.bitcetera.com/en/techblog/2009/07/02/heredoc-with-indent-in-ruby/ Mac-friendly Autotest <h2>autotest</h2> <p>ZenTest&#8217;s autotest is great, but it has one drawback: In order to detect whether you have modified a file, it relies on filesystem polling. In other words it constantly traverses the filesystem and thus causes a lot of <span class="caps">CPU</span> and harddrive load. Check this out:</p> <pre> $ autotest &amp; [1] 664 $ ps ax 664 664 s000 S+ 0:00.63 /usr/bin/ruby -ws /usr/bin/autotest -- WAIT 1 MINUTE -- $ ps ax 664 664 s000 S+ 0:01.27 /usr/bin/ruby -ws /usr/bin/autotest ^^^^^^^ </pre> <p>Eventhough you don&#8217;t do anything, the <span class="caps">CPU</span> clock for the autotest process keeps counting up. If you are working on a portable computer, you will notice that your battery runs out in no time. And that&#8217;s not even the worst part yet. Permanent filesystem cruising are poison for the harddrive will have an impact on it&#8217;s life expectancy on the long run.</p> <h2>autotest-fsevent</h2> <p>Enter the autotest-fsevent gem. It teaches autotest to use FSEvent instead of filesystem polling. Here&#8217;s the same test with autotest-fsevent installed:</p> <pre> $ autotest &amp; [1] 698 $ ps ax 698 698 s000 S+ 0:00.63 /usr/bin/ruby -ws /usr/bin/autotest -- WAIT 1 MINUTE -- $ ps ax 698 698 s000 S+ 0:00.63 /usr/bin/ruby -ws /usr/bin/autotest ^^^^^^^ </pre> <p>As you see the <span class="caps">CPU</span> clock is not counting while autotest waits for file alterations. Instead of monitoring the files itself, autotest-fsevent delegates this job to the FSEvent core service which Apple has introduced with Mac OS X 10.5. Think of FSEvent as a radio station which constantly broadcasts file alterations. It comes at no extra cost as it&#8217;s sitting right on the kernel.</p> <h3>Installation</h3> <p>First install the gem:</p> <pre>sudo gem install autotest-fsevent</pre> <p>Then add the following line <strong>after all other requires</strong> in your <tt>&#126;/.autotest</tt>:</p> <pre>require 'autotest/fsevent'</pre> <p><span class="warning">Please submit feature requests and bug reports on <a href="https://forge.bitcetera.com/projects/show/autotest-fsevent">BitForge</a> rather than adding a comment here.</span></p> <h3>Resources</h3> <ul> <li><a href="/en/products/autotest-fsevent">Homepage</a></li> <li><a href="https://forge.bitcetera.com/projects/show/autotest-fsevent">BitForge</a> (Bugtracker, Forum etc)</li> <li><a href="http://github.com/svoop/autotest-fsevent/tree/master">Github</a></li> </ul> <h2>autotest-growl</h2> <p>ZenTest-4.0.0 comes with bundled Growl support which, however, will vanish very soon in favor of the autotest-growl gem which displays Growl notifications for RSpec, Unit::Test and Cucumber. And it comes with a cute set of colored Ruby icons which can easily be overridden by your preferred icon set.</p> <h3>Installation</h3> <p>Read the <a href="http://github.com/svoop/autotest-growl/tree/master"><span class="caps">README</span></a> for installation instructions as they differ whether your&#8217;re on ZenTest-4.0.0 or an upcoming version without bundled Growl support.</p> <p><span class="warning">Please submit feature requests and bug reports on <a href="https://forge.bitcetera.com/projects/show/autotest-growl">BitForge</a> rather than adding a comment here.</span></p> <h3>References</h3> <ul> <li><a href="/en/products/autotest-growl">Homepage</a></li> <li><a href="https://forge.bitcetera.com/projects/show/autotest-growl">BitForge</a> (Bugtracker, Forum etc)</li> <li><a href="http://github.com/svoop/autotest-growl/tree/master">Github</a></li> </ul> <h2>Exceptions</h2> <p>The only feature which hasn&#8217;t made it from the now deprecated autotest-mac gem into neither autotest-fsevent nor autotest-growl is the exception of certain paths. It&#8217;s in fact better if you set them yourself and according to your needs in <tt>&#126;/.autotest</tt>. Here is an example:</p> <pre> Autotest.add_hook :initialize do |autotest| %w{.git .svn .hg .DS_Store ._* vendor}.each {|exception| autotest.add_exception(exception) } false end </pre> <p>(<a href="/en/services/sven-schwyn">Sven Schwyn</a>)</p> Wed, 27 May 2009 09:20:51 GMT http://www.bitcetera.com/en/techblog/2009/05/27/mac-friendly-autotest/ http://www.bitcetera.com/en/techblog/2009/05/27/mac-friendly-autotest/