<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EchoTech &#187; Mac OS X</title>
	<atom:link href="http://www.echo-technology.co.uk/category/apple/maxosx/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.echo-technology.co.uk</link>
	<description>technology blogging for the moribund</description>
	<lastBuildDate>Tue, 06 Apr 2010 12:35:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone OS 4.0 aka Mac OS X Touch 1.0 [updated x4]</title>
		<link>http://www.echo-technology.co.uk/2010/01/05/iphone-os-4-0-aka-mac-os-x-touch/</link>
		<comments>http://www.echo-technology.co.uk/2010/01/05/iphone-os-4-0-aka-mac-os-x-touch/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 00:06:15 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Apple Inc.]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[MacTouch]]></category>
		<category><![CDATA[Steve Jobs]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[iSlate]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Cocoa Touch]]></category>
		<category><![CDATA[iPhone OS 4.0]]></category>
		<category><![CDATA[Mac OS X Touch]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=371</guid>
		<description><![CDATA[Time to jump on the rumour mill and predict, with scary accuracy what Apple&#8217;s event due to take place at the end of January (&#8217;10), will hold.
Update: Looks like once again I have been spot on with my Apple predictions. I have linked to stories confirming my assertions where appropriate.

Mac OS X Touch
The new name [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2010%2F01%2F05%2Fiphone-os-4-0-aka-mac-os-x-touch%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2010%2F01%2F05%2Fiphone-os-4-0-aka-mac-os-x-touch%2F" height="61" width="51" /></a></div><p>Time to jump on the rumour mill and predict, with <a href="http://www.echo-technology.co.uk/category/apple/">scary accuracy</a> what <a href="http://apple.com">Apple&#8217;s</a> <em>event</em> due to take place at the end of January (&#8217;10), will hold.</p>
<p><strong>Update:</strong> Looks like once again I have been spot on with my Apple predictions. I have linked to stories confirming my assertions where appropriate.</p>
<p><span id="more-371"></span></p>
<h2>Mac OS X Touch</h2>
<p>The new name for iPhone OS. Currently the iPhone OS runs on iPhone&#8217;s, iPod&#8217;s and <a href="http://en.wikipedia.org/wiki/IPhone_OS#iPhone_SDK">inside developers Mac Pro&#8217;s</a>.</p>
<p>It&#8217;s time for a name change — <strong>Mac OS X Touch 1.0</strong>.  It will effectively be iPhone OS 4.0, we might get a few 3.x updates to smooth the transition but by the end of 2010 iPhone OS will be dead — <em>Long live Mac OS X Touch</em>.</p>
<h2>Features</h2>
<p>These features all taken form my musings on <a href="http://twitter.com/rjstelling">Twitter</a>.</p>
<h3>Naming</h3>
<ul>
<li><strong>UPDATE</strong>: Touch OS 4.0</li>
<li><strong>UPDATE</strong>: Mac Touch OS 4.0</li>
</ul>
<h3>API</h3>
<ul>
<li>Voice Control API</li>
<li>Low level camera API</li>
<li>Bluetooth API</li>
<li>launchd API (instead of multi-process support)</li>
<li>Data detectors API</li>
<li>Advanced gesture API</li>
<li>Advanced iSync API (for 3rd parties)</li>
</ul>
<h3>Updates</h3>
<ul>
<li>USB support (for iSlate)</li>
<li>Extra non-standard WebKit extentions
</li>
<li><strong>Definitely</strong> no Flash support
</li>
<li>Multi-camera support (see Apps below)
</li>
<li>Video output</li>
<li><del datetime="2010-04-06T12:32:22+00:00">Handwriting recognition</del></li>
</ul>
<h3>Interface Updates</h3>
<ul>
<li>Animated springboard icons</li>
<li>Advanced App management</li>
<li>Lock App positions in springboard</li>
</ul>
<h3>Apps</h3>
<ul>
<li><strong>RELEASED</strong>: iWork App (instead of file system) [<a href="http://www.macrumors.com/2010/01/09/apple-working-on-advanced-gesturing-and-multi-touch-version-of-iwork/">MacRumours.com</a>] [<a href="http://www.appleinsider.com/articles/10/01/09/apple_tablet_may_ship_with_multi_touch_version_of_iwork.html">AppleInsider</a>]</li>
<li>iChat [<a href="http://www.techcrunch.com/2010/01/11/france-telecom-orange-apple-tablet/">Orange Exec Confirms Apple Tablet Is On The Way</a>]</li>
<li><strong>UPDATE</strong>: Remote Desktop App (iPad Only)</li>
<li><strong>UPDATE</strong>: Apple TV App (iPad Only)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2010/01/05/iphone-os-4-0-aka-mac-os-x-touch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Displaying Twitter messages using Growl</title>
		<link>http://www.echo-technology.co.uk/2009/12/22/displaying-twitter-messages-using-growl/</link>
		<comments>http://www.echo-technology.co.uk/2009/12/22/displaying-twitter-messages-using-growl/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 14:36:21 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Apple Inc.]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Growl]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Trowel]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=363</guid>
		<description><![CDATA[It&#8217;s been well-over a year since I hacked the the first few lines of code for Trowel, the open source, Perl solution to your Twitter and Growl needs.


How to: Growl and Twitter 
Twitter Growl Trowel v1.0
Twitter and Growl — real world solutions

I must confess there was no great plan I just needed a solution, but [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F12%2F22%2Fdisplaying-twitter-messages-using-growl%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F12%2F22%2Fdisplaying-twitter-messages-using-growl%2F" height="61" width="51" /></a></div><p>It&#8217;s been well-over a year since I hacked the the first few lines of code for Trowel, the open source, Perl solution to your Twitter and Growl needs.<br />
<span id="more-363"></span></p>
<ol>
<li><a href="http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/">How to: Growl and Twitter</a> </li>
<li><a href="http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/">Twitter Growl Trowel v1.0</a></li>
<li><a href="http://www.echo-technology.co.uk/2009/11/23/twitter-growl-—-real-world-solutions/">Twitter and Growl — real world solutions</a></li>
</ol>
<p>I must confess there was no great plan I just needed a solution, but looking at the comments the above posts generated, so did many of you.</p>
<p>Now <a href="http://www.xs4all.nl/~ipenburg/">Roland van Ipenburg</a> has cleaned up the original code you can <a href="http://www.xs4all.nl/~ipenburg/trowel">download the latest version</a>. But for completeness I have reproduced it below.</p>
<p><code>#!/usr/bin/perl -w<br />
# -*- cperl; cperl-indent-level: 4 -*-<br />
use strict;<br />
use warnings;</p>
<p>## no critic qw(ProhibitLongLines)<br />
# $Id$<br />
# $Revision$<br />
# $HeadURL$<br />
# $Date$<br />
## use critic</p>
<p>use utf8;<br />
use 5.008000;</p>
<p>our $VERSION = '0.01';</p>
<p>use Date::Format;<br />
use Digest::MD5;<br />
use Encode;<br />
use File::HomeDir;<br />
use File::Slurp;<br />
use File::Spec;<br />
use Getopt::Long qw(:config no_ignore_case);<br />
use IO::File;<br />
use Imager;<br />
use LWP::Simple;<br />
use Log::Log4perl qw(:easy get_logger);<br />
use Mac::Growl;<br />
use Net::Twitter;<br />
use Pod::Usage;<br />
use Set::Scalar;</p>
<p>use Readonly ();<br />
## no critic qw(prohibitCallsToUnexportedSubs)<br />
Readonly::Scalar my $EMPTY   => q{};<br />
Readonly::Scalar my $NEWLINE => qq{\n};<br />
Readonly::Scalar my $COMMA   => q{,};<br />
Readonly::Scalar my $ESCAPE  => q{%};</p>
<p>Readonly::Scalar my $APPLICATION       => q{Growl+Twitter=trowel};<br />
Readonly::Scalar my $NOTIFICATION_NAME => q{New Tweet};</p>
<p>Readonly::Scalar my $DEFAULT_FORMAT   => q{%u: %t};<br />
Readonly::Scalar my $MAX_TWEETS       => 200;<br />
Readonly::Scalar my $MAX_TWEETS_INIT  => 5;<br />
Readonly::Scalar my $DISPLAY_INTERVAL => 4;<br />
Readonly::Scalar my $POLL_INTERVAL    => 37;<br />
Readonly::Scalar my $AVATAR_WIDTH     => 32;<br />
Readonly::Scalar my $AVATAR_HEIGHT    => $AVATAR_WIDTH;</p>
<p>Readonly::Scalar my $CACHE_DIR => File::Spec->catdir( File::HomeDir->my_home(),<br />
    qw{Library Caches GrowlHelperApp} );<br />
Readonly::Scalar my $TID_FILE       => q{tweet.id};<br />
Readonly::Scalar my $ENCODING       => q{utf8};<br />
Readonly::Scalar my $AVATAR_TYPE    => q{jpeg};<br />
Readonly::Scalar my $ERR_MODE_SLURP => q{quiet};</p>
<p>Readonly::Array my @CSV_OPTIONS        => qw(exclude include sticky);<br />
Readonly::Array my @NET_TWITTER_TRAITS => qw(InflateObjects Legacy);<br />
## use critic</p>
<p>Log::Log4perl->easy_init($INFO);<br />
my $log = get_logger();</p>
<p>my %options = (<br />
    format   => $DEFAULT_FORMAT,<br />
    poll     => $POLL_INTERVAL,<br />
    interval => $DISPLAY_INTERVAL,<br />
);<br />
foreach my $csv (@CSV_OPTIONS) {<br />
    $options{$csv} = [];<br />
}</p>
<p>Getopt::Long::GetOptions(<br />
    \%options,                  q{username|s=s},<br />
    q{password|p=s},            q{interval|i=i},<br />
    q{poll|l=i},                q{exclude|x=s@},<br />
    q{sticky|t=s@},             q{include|I=s@},<br />
    q{output|o},                qq{initials|n:$MAX_TWEETS_INIT},<br />
    q{format|f=s},              q{config|g=s},<br />
    qq{retrieve|r:$MAX_TWEETS}, q{help|h},<br />
    q{verbose+},                q{exclude_self|X},<br />
    qq{width:$AVATAR_WIDTH},    qq{height:$AVATAR_HEIGHT},<br />
    q{man},<br />
) or Pod::Usage::pod2usage(2);<br />
$options{help} &#038;&#038; Pod::Usage::pod2usage(1);<br />
$options{man} &#038;&#038; Pod::Usage::pod2usage( -verbose => 2 );</p>
<p># Gather comma seperated items or items from multiple options into a set:<br />
foreach my $csv (@CSV_OPTIONS) {<br />
    $options{$csv} =<br />
      Set::Scalar->new( split /$COMMA/xsm, join $COMMA, @{ $options{$csv} } );<br />
}<br />
$options{exclude_self} &#038;&#038; $options{exclude}->insert( $options{username} );</p>
<p>my @names = ($NOTIFICATION_NAME);<br />
$log->debug('Register notifications');<br />
## no critic qw(prohibitCallsToUnexportedSubs)<br />
Mac::Growl::RegisterNotifications( $APPLICATION, \@names, [ $names[0] ] );<br />
## use critic</p>
<p>my $twitter = Net::Twitter->new(<br />
    username => $options{username},<br />
    password => $options{password},<br />
    traits   => \@NET_TWITTER_TRAITS,<br />
);</p>
<p>my $last_id =<br />
## no critic qw(prohibitCallsToUnexportedSubs)<br />
  File::Slurp::read_file( File::Spec->catfile( $CACHE_DIR, $TID_FILE ),<br />
    err_mode => $ERR_MODE_SLURP );<br />
## use critic<br />
my $switch = 0;</p>
<p>$log->debug('Entering poll loop');<br />
while (1) {</p>
<p>    $log->debug('Getting timeline');<br />
    my $ar_timeline = $twitter->friends_timeline(<br />
        $last_id<br />
        ? { count => $MAX_TWEETS, since_id => $last_id }<br />
        : { count => $options{initials} }<br />
    );</p>
<p>    while ( my $tweet = shift @{$ar_timeline} ) {<br />
        $log->debug( 'Processing tweet ' . $tweet->id );<br />
        if ( !$switch ) {<br />
            $last_id = $tweet->id;<br />
## no critic qw(prohibitCallsToUnexportedSubs)<br />
            File::Slurp::write_file(<br />
                File::Spec->catfile( $CACHE_DIR, $TID_FILE ), $last_id );<br />
## use critic<br />
            $switch++;<br />
        }<br />
        next if ( skippable($tweet) );<br />
        my %tweet_data = get_data($tweet);<br />
        if ( $options{output} ) {<br />
## no critic qw(RequireCheckedSyscalls)<br />
            print $tweet_data{body}, $NEWLINE;<br />
## use critic<br />
        }<br />
        else {<br />
            growl( $tweet, \%tweet_data );<br />
        }<br />
    }<br />
    $switch = 0;<br />
    $log->debug( 'Wait ' . $options{poll} . ' seconds' );<br />
    sleep $options{poll};<br />
}</p>
<p>sub skippable {<br />
    my $tweet = shift;<br />
    return ( $options{exclude}->has( $tweet->user->screen_name )<br />
          || !$options{include}->is_null )<br />
      &#038;&#038; !$options{include}->has( $tweet->user->screen_name )<br />
      &#038;&#038; !$options{sticky}->has( $tweet->user->screen_name );<br />
}</p>
<p>sub get_data {<br />
    my $tweet      = shift;<br />
    my %tweet_data = (<br />
        n => $tweet->user->name,<br />
        u => $tweet->user->screen_name,<br />
        t => $tweet->text,<br />
        d => $tweet->created_at,<br />
        l => $tweet->user->location,<br />
    );<br />
    while ( my ( $key => $value ) = each %tweet_data ) {<br />
        ( defined $value )<br />
          &#038;&#038; ( $tweet_data{$key} = Encode::encode( $ENCODING, $value ) );<br />
    }<br />
    $tweet_data{$ESCAPE} = $ESCAPE;<br />
    my $map =<br />
      qq{(?<!$ESCAPE)$ESCAPE([} . join( $EMPTY, keys %tweet_data ) . q{])};<br />
    $log->debug( 'Using map ' . $map );<br />
    my $re = qr{$map}imsx;<br />
    $tweet_data{body} = $options{format};<br />
## no critic qw(ProhibitUselessRegexModifiers RequireLineBoundaryMatching)<br />
    $tweet_data{body} =~ s/$re/$tweet_data{$1}/gxs;<br />
## use critic<br />
    return %tweet_data;<br />
}</p>
<p>sub growl {<br />
    my ( $tweet, $hr_tweet_data ) = @_;<br />
    my $avatar = get_avatar( $tweet, $hr_tweet_data );<br />
## no critic qw(prohibitCallsToUnexportedSubs)<br />
    Mac::Growl::PostNotification(<br />
        $APPLICATION,<br />
        $names[0],<br />
## no critic qw(ProhibitAccessOfPrivateData)<br />
        $hr_tweet_data->{n},<br />
        $hr_tweet_data->{body},<br />
## use critic<br />
        $options{sticky}->has( $tweet->user->screen_name ) ? 1 : 0,<br />
        0,<br />
        $avatar<br />
    );<br />
## use critic<br />
    sleep $options{interval};<br />
    return;<br />
}</p>
<p>sub get_avatar {<br />
    my ( $tweet, $hr_tweet_data ) = @_;<br />
    my $avatar_url = $tweet->user->profile_image_url->as_string;<br />
    my $avatar_file =<br />
      File::Spec->catfile( ($CACHE_DIR), Digest::MD5::md5_hex($avatar_url) );<br />
    $log->debug($avatar_file);<br />
    my $fh = IO::File->new();<br />
    if ( !$fh->open(qq{< $avatar_file}) ) {<br />
        LWP::Simple::mirror( $avatar_url, $avatar_file );<br />
        my $img = Imager->new( file => $avatar_file );<br />
        my $thumb = $img->scale(<br />
            xpixels => $options{width},<br />
            ypixels => $options{height}<br />
        );<br />
        $thumb->write( file => $avatar_file, type => $AVATAR_TYPE );<br />
    }<br />
    $fh->close();<br />
    return $avatar_file;<br />
}</p>
<p>exit;</p>
<p>__END__</p>
<p>=encoding utf8</p>
<p>=head1 NAME</p>
<p>trowel - display Twitter messages with Growl.</p>
<p>=head1 VERSION</p>
<p>This is version 0.01. It's based on<br />
L<http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/></p>
<p>=head1 SYNOPSIS</p>
<p>	trowel -u -p [options]</p>
<p>=head1 DESCRIPTION</p>
<p>Shows the tweets entering a users Twitter timeline as Growl notifications,<br />
including the avatar of the tweep. The format is the message in the<br />
notification is configurable and the avatars are scaled to fit in the standard<br />
Smoke Theme and cached locally.</p>
<p>=head1 DEPENDENCIES</p>
<p>L<Date::Format><br />
L<Digest::MD5><br />
L<Encode><br />
L<File::HomeDir><br />
L<File::Slurp><br />
L<File::Spec><br />
L<Getopt::Long><br />
L<IO::File><br />
L<Imager><br />
L<LWP::Simple><br />
L<Log::Log4perl><br />
L<Mac::Growl><br />
L<Net::Twitter><br />
L<Pod::Usage><br />
L<Set::Scalar></p>
<p>Issue the following command in a Terminal to install these modules:</p>
<p>	sudo /usr/bin/cpan -i Date::Format Digest::MD5 Encode File::Slurp \\<br />
	File::Spec Getopt::Long IO::File Imager LWP::Simple Log::Log4perl \\<br />
	Mac::Growl Net::Twitter Pod::Usage Set::Scalar Readonly \\<br />
	&#038;&#038; sudo /usr/bin/cpan -fi File::HomeDir</p>
<p>=head1 INCOMPATIBILITIES</p>
<p>=over 4</p>
<p>=item * File::HomeDir fails tests when it is being installed as root because<br />
the user root doesn't have some special Folders only normal users have. It can<br />
be installed as root by forcing the install with the -fi option.</p>
<p>=back</p>
<p>=head1 DIAGNOSTICS</p>
<p>This module uses Log::Log4perl for logging.</p>
<p>=head1 BUGS AND LIMITATIONS</p>
<p>=over 4</p>
<p>=item * This script aims to be compatible with the original version or<br />
trowel, but it it not bug-compatible</p>
<p>=item * A missing password option isn't interactively requested later</p>
<p>=item * The format processing is improved so C<%%> can be used to display a<br />
single C<%> and substitutes containing formats aren't clobbered.</p>
<p>=item * The location is not the location of the tweet, but of the account</p>
<p>=back</p>
<p>=head1 CONFIGURATION</p>
<p>To use this script you'll need an account at the Twitter micro-blogging<br />
service. The avatars used are scaled to 32x32 to fit as graphic in the default<br />
Smoke theme of Growl. The scaled avatars and the file containing the id of the<br />
most recent tweet displayed are stored in the cache folder of GrowlhelperApp<br />
in L<~/Library/Caches>.</p>
<p>=head1 USAGE</p>
<p>	trowel -u <twitter_username> -p <twitter_password> [-p -x -t -I -o -f -g<br />
	-h -v -vv -vvv]</p>
<p>=head1 REQUIRED ARGUMENTS</p>
<p>=over 4</p>
<p>=item * B<-u> B<--username> The username of the Twitter account to connect to</p>
<p>=item * B<-p> B<--password> The password of the Twitter account to connect to</p>
<p>=back</p>
<p>=head1 OPTIONS</p>
<p>=over 4</p>
<p>=item B<-u> B<--username> Twitter username</p>
<p>=item B<-p> B<--password> Twitter password</p>
<p>=item B<-i> interval between displaying tweets</p>
<p>=item B<-l> time between polls of Twitter feed</p>
<p>=item B<-x> list of users to exclude</p>
<p>=item B<-X> B<--exclude-self> exclude yourself</p>
<p>=item B<-t> list of users who's tweets are sticky, -x and -i will override<br />
this</p>
<p>=item B<-l> list of users to include</p>
<p>=item B<-o> output to STDOUT only, by-passing Growl, use this for piping to<br />
another application</p>
<p>=item B<-n> initial number of Tweets to request, default is 5</p>
<p>=item B<-f"<br />
<format>"> format of the Tweet<br />
%u - user<br />
%t - tweet<br />
%d - date time<br />
%l - location</p>
<p>=item B<-g> B<--config> a configuration file that sets command line<br />
parameters, this function is not implemented</p>
<p>=item B<-h> B<-help></p>
<p>=item B<-v> verbose mode</p>
<p>=item B<-vv> very verbose mode</p>
<p>=item B<-vvv> debug verbose mode</p>
<p>=item B<-man></p>
<p>=back</p>
<p>=head1 EXIT STATUS</p>
<p>The exit status is determined by L<Pod::Usage><br />
=over 4</p>
<p>=item * 1 </p>
<p>=item * 2</p>
<p>=back</p>
<p>=head1 EXAMPLES</p>
<p>trowel -u<username> -p
<password> -i5 -l180 -f"%t %d"<br />
-ttwitter,stephenfry,rjstelling<br />
-Iguykawasaki,twitter,stephenfry,TechCrunch,rjstelling</p>
<p>=head1 AUTHOR</p>
<p>=over 4</p>
<p>=item * Roland van Ipenburg  C<< <ipenburg@xs4all.nl> >></p>
<p>=item * Echotech L<http://www.echo-technology.co.uk/></p>
<p>=back</p>
<p>=head1 LICENSE AND COPYRIGHT</p>
<p>Copyright (C) 2009 by Roland van Ipenburg</p>
<p>This library is free software; you can redistribute it and/or modify<br />
it under the same terms as Perl itself, either Perl version 5.10.0 or,<br />
at your option, any later version of Perl 5 you may have available.</p>
<p>=head1 DISCLAIMER OF WARRANTY</p>
<p>BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY<br />
FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN<br />
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES<br />
PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER<br />
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE<br />
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH<br />
YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL<br />
NECESSARY SERVICING, REPAIR, OR CORRECTION.</p>
<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING<br />
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR<br />
REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENSE, BE<br />
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,<br />
OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE<br />
THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING<br />
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A<br />
FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF<br />
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF<br />
SUCH DAMAGES.</p>
<p>=cut</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2009/12/22/displaying-twitter-messages-using-growl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter &amp; Growl — real world solutions</title>
		<link>http://www.echo-technology.co.uk/2009/11/23/twitter-growl-%e2%80%94-real-world-solutions/</link>
		<comments>http://www.echo-technology.co.uk/2009/11/23/twitter-growl-%e2%80%94-real-world-solutions/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 17:23:08 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Growl]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=345</guid>
		<description><![CDATA[By-far-and-away the most popular blogs I have ever written are How To: Growl and Twitter and Twitter + Growl = Trowel v1.0.
These simple how to&#8217;s, provide a solution to a simple problem. How do I pipe my Twitter time line to Growl?

It shames me to say this but I no longer use my own solutions. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F11%2F23%2Ftwitter-growl-%25e2%2580%2594-real-world-solutions%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F11%2F23%2Ftwitter-growl-%25e2%2580%2594-real-world-solutions%2F" height="61" width="51" /></a></div><p>By-far-and-away the most popular blogs I have ever written are <a href="http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/">How To: Growl and Twitter</a> and <a href="http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/">Twitter + Growl = Trowel v1.0</a>.</p>
<p>These <em>simple</em> how to&#8217;s, provide a solution to a simple problem. How do I pipe my <a href="http://twitter.com">Twitter</a> time line to <a href="http://growl.info/">Growl</a>?<br />
<span id="more-345"></span><br />
It shames me to say this but I no longer use my own solutions. If I ever get the time I might write a fully <a href="http://www.echo-technology.co.uk/2009/11/17/apples-misdirection/">Cocoa native solution</a>, but for now here is my real world guide to Twitter and Growl.</p>
<p>
<h1><a href="http://www.atebits.com/tweetie-mac/">Tweetie</a></h1>
</p>
<p>or</p>
<p>
<h1><a href="http://adium.im/">Adium</a></h1>
</p>
<p>Both these application support Growl, they do have limited features but will the best solution for the vast majority of users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2009/11/23/twitter-growl-%e2%80%94-real-world-solutions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apple&#8217;s Misdirection? [Updated]</title>
		<link>http://www.echo-technology.co.uk/2009/11/17/apples-misdirection/</link>
		<comments>http://www.echo-technology.co.uk/2009/11/17/apples-misdirection/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 11:59:30 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Apple Inc.]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Appy Go Lucky]]></category>
		<category><![CDATA[iTunes App Store for Mac]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=333</guid>
		<description><![CDATA[Over the last year this blog has argued the case for Apple&#8217;s mobile device strategy, I think this post sums it up nicely.
However, while I and every other tech journalist and blogger have been concentrating on the hardware, Apple has been secretly (duh!) plotting its most audacious product to-date.

NB: This is simply speculation, if anyone [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F11%2F17%2Fapples-misdirection%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F11%2F17%2Fapples-misdirection%2F" height="61" width="51" /></a></div><p>Over the last year this blog has argued the case for Apple&#8217;s mobile device strategy, I think <a href="http://www.echo-technology.co.uk/2009/08/01/apple-tablet-—-the-digital-watch-of-2010/">this post</a> sums it up nicely.</p>
<p>However, while I and every other <a href="http://www.google.com/search?client=safari&#038;rls=en&#038;q=apple+tablet&#038;ie=UTF-8&#038;oe=UTF-8">tech journalist and blogger</a> have been concentrating on the hardware, Apple has been secretly (duh!) plotting its most audacious product to-date.<br />
<span id="more-333"></span><br />
<em>NB: This is simply speculation, if anyone at Apple is reading this please don&#8217;t blacklist me I have <a href="http://www.appygolucky.co.uk/profanity/">Apps to sell.</a></em></p>
<p>Remember what everyone said about the iPod? Overpriced, under powered. Remember what everyone said about the iPhone? Overpriced, underpowered, crappy network. What will they say about the Tablet/Slate? <em>Overpriced! underpowered!</em> Can you seen the pattern?</p>
<p> But what made people buy these slow and expensive gadgets — especially when there were obviously superior competitors? <strong>iTunes.</strong> You heard me, <em>iTunes</em>, I&#8217;m no fan — believe me. Even on the Mac is a painful, bloated experience and I&#8217;ve heard on Windows is enough to dive you insane. But the <em>infrastructure</em> is what matters.</p>
<p>The humble iPod (later the iPod Classic) had one competitive advantage; a simple, (relatively) cheap and legal way to buy music. The iPhone now has 100,000+ Apps many free (FREE!) and <a href="http://www.appygolucky.co.uk/profanity/">many pointless</a>. But it has an eco-system, and Apple own the infrastructure.</p>
<p>How will this help the iDevice/SteveSlate/WebBook? Applications. Not Apps. Not Widgets. Applications, fully functioning multi-featured Applications. Like <a href="http://www.atebits.com/tweetie-mac/">Tweetie for Mac</a> or any of the excellent <a href="http://www.ambrosiasw.com/">games form Ambrosia</a>. </p>
<p>Apple is going to do for regular software what it&#8217;s done for mobile Apps. The same walled garden, with the same terrible approval process and the same $99/year fee.</p>
<p>And as a software developer, I can&#8217;t wait. Being listed on the <strong>iTunes App Store for Mac</strong> will be a sign of quality and a guarantee to users of no viruses or Trojans.</p>
<p>Developers will be able to sell more applications and make more money. Users will have access to 1000s of Apps all with a &#8216;guarantee&#8217; of quality and all in one place, rated and reviewed. Apple will be happy because it will totally own the device.</p>
<p>The process for developers will be easy, download a provisioning profile form <a href="http://developer.apple.com/">ADC</a>, recompile your application, submit to Apple (wait 4 weeks) and bingo, your application is in front of 20 million people.</p>
<p>So, while we have all been arguing about hardware specs, Apple have been <a href="http://www.datacenterknowledge.com/archives/2009/06/03/its-official-apple-to-north-carolina/">building data centres</a> and working on iTunes X (10). </p>
<p>This will change the way software is sold (certainly on the Mac) and hand Apple a massive piece of the pie. Microsoft have been trying to do this for years, but Apple have almost stumbled upon it. But I can&#8217;t help wondering if <a href="http://www.youtube.com/watch?v=kN0SVBCJqLs">Steve had this in-mind back in 2001</a>?</p>
<p>Recently Phil Schiller has defended the current App Store:</p>
<blockquote><p>&#8220;We&#8217;ve built a store for the most part that people can trust,&#8221; he says. &#8220;You and your family and friends can download applications from the store, and for the most part they do what you&#8217;d expect, and they get onto your phone, and you get billed appropriately, and it all just works.&#8221;</p></blockquote>
<p>I think this adds weight to my argument, Apple want to build a closed, secure eco-system. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2009/11/17/apples-misdirection/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iDevice 1.0</title>
		<link>http://www.echo-technology.co.uk/2009/06/02/idevice-10/</link>
		<comments>http://www.echo-technology.co.uk/2009/06/02/idevice-10/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 11:44:56 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[WWDC]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=264</guid>
		<description><![CDATA[Here is a quick rundown of what an Apple iDevice will (might) be like. I&#8217;ve been an Apple watcher for years and never been surprised by what they do and don&#8217;t release.
First off release date, its quite obvious that the release of any iDevice won&#8217;t be at this years WWDC. We haven&#8217;t seen the rash [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F06%2F02%2Fidevice-10%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F06%2F02%2Fidevice-10%2F" height="61" width="51" /></a></div><p>Here is a quick rundown of what an Apple iDevice will (might) be like. I&#8217;ve been an Apple watcher for years and never been surprised by what they do and don&#8217;t release.</p>
<p>First off <strong>release date</strong>, its quite obvious that the release of any iDevice won&#8217;t be at this years WWDC. We haven&#8217;t seen the rash of rumours (or chatter) that accompany any new Apple release. A September/October time-frame is more likely, ready for the holidays.</p>
<p>The <strong>look &#8216;n feel</strong>, is almost more important to Fanboys then price, battery or even if it exists at all. <a href="http://news.cnet.com/8301-13579_3-10252492-37.html">CNET</a> are suggesting a 7-8 inch screen, thats just wrong. 10-12 inches is the sweet spot.<br />
<span id="more-264"></span><br />
Full disclosure time, I&#8217;m an Apple developer and it means I&#8217;m bound by NDA about discussing specifics of the <strong>iPhone OS 3.0</strong>, however it&#8217;s quite obvious that more work has gone on <em>behind-the-scenes</em> than we might be lead to believe. Independent resolution, a file-system (ZFS?), external storage, multiple processes are all things we can expect in an iPhone OS deployed on any new iDevice.</p>
<p>Apple has (some what unwittingly) created an immense ecosystem with the <strong>App Store</strong>, it not about to hamstring this by releasing low-cost, low-powered devices. Expect any new device to be at least as powerful (and feature equivalent) as the current 2nd Generation iPod Touch. Any talk of no wireless or smaller screens is laughable.</p>
<p>One thing to keep in mind, Apple has been here before. It invented the <strong>Netbook</strong> with the <a href="http://en.wikipedia.org/wiki/EMate_300">eMate</a> in the late 90&#8217;s. Don&#8217;t think it&#8217;s forgotten this, expect this to be pushed in schools as e-readers, teaching aids etc.</p>
<p>The <strong>processor</strong> will be the most innovative feature of the iDevice, possible multi-processors and GPU&#8217;s all utilised by Grand Central. It won&#8217;t allow you to run Photoshop but it will allow HD movies and OpenGL ES games to sing!</p>
<p><strong>The battery</strong>, I always feel sorry for Apple when they release a new product. They always get slammed for the battery life, it&#8217;s not like they do it on purpose. If there was a 20 hour battery that weighed less than a ton and didn&#8217;t cost 1 million pounds they&#8217;d use it. Right? The other bone of contention is removable-vs-fixed. It is nearly always portrayed as a negative to have a fixed battery, never mind the increased battery life etc. Why is this, well it&#8217;s simple, Technology is written about by <em>Tech Journalists</em>. Tech Journalists travel a lot with their laptops and need 10&#8217;s of hours of battery life, so for the last decade they have all been carrying 3, 4 or 5(!) extra batteries. They think this is normal. It&#8217;s not. Batteries cost £40-£60 (well Apple batteries do), normal people can&#8217;t claim them on expenses, so we make do.</p>
<p>Expect decent battery life, but not amazing.</p>
<p>Back in the late 90&#8217;s when Steve came back to Apple he gave a Keynote (I have it on VHS somewhere), where he talked about the similarities of <strong>digital watches</strong> and computers (bare with me). He pointed out that in the 80&#8217;s the average American household had 1 digital watch and today (late 90&#8217;s) it&#8217;s 8 <em>(NB: I&#8217;m writing form memory but the point stands)</em>. This is the overriding aim for Apple; 2 x Desktop or Laptop, 4 x iDevices (including iPhones and iPods). </p>
<p>What does this last paragraph mean? The price will be such that you can buy multiple iDevices for your home and family. They might even sell them is packs of 3 or 4! And if you&#8217;ve got a Time Capsule (or other compatible NAS) your &#8216;profile&#8217; will follow you.</p>
<blockquote><p>&#8220;Pick up the iDevice in the kitchen and search for a recipe, move to the lounge and use the iDevice there to read a book downloaded from Amazon. Each of the kids will have their own for IM, Twitter, Facebook etc. You iPhone will wirelessly sync all new contacts, photos etc. After dinner you can all sit around the AppleTV and view the photos you all took on you iPhones and camera equipped iPods. Then watch a movie downloaded form iTunes.&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2009/06/02/idevice-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter + Growl = Trowel v1.0</title>
		<link>http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/</link>
		<comments>http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 17:58:29 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Growl]]></category>
		<category><![CDATA[launchd]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=79</guid>
		<description><![CDATA[You may have already read my how-to on integrating Twitter and Growl but this is the upgrade! I will go through the code for those interested, please help me improve the code by leaving a comment, good or bad.

I have some quite ambitious plans for this project, but this is not the time to bore you with promises, so vaporware it will remain &#8211; for [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F01%2F26%2Ftwitter-growl-trowel-v10%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2009%2F01%2F26%2Ftwitter-growl-trowel-v10%2F" height="61" width="51" /></a></div><p>You may have already read my <a href="http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/" target="_blank">how-to on integrating Twitter and Growl</a> but this is the upgrade! I will go through the code for those interested, please help me improve the code by leaving a comment, good or bad.</p>
<p><span id="more-79"></span></p>
<p>I have some quite ambitious plans for this project, but this is not the time to bore you with promises, so vaporware it will remain &#8211; for now.</p>
<p>I&#8217;d like to start by thanking everyone who has commented on this project so far &#8211; it&#8217;s been such a big help, keep them coming.</p>
<p> </p>
<h2>What&#8217;s new?</h2>
<p>If you can&#8217;t see a feature you requested its not because I am ignoring it, it&#8217;s simply I haven&#8217;t got round to it or it been superseded. As alway comments will always be read so you can always bug me there.</p>
<p>1. Profile images now supported</p>
<p>2. Run in the background and optionally use launchd</p>
<p>3. Sticky notifications for selected users</p>
<p>4. Loads more command line options</p>
<p> </p>
<h2>Bugs Fixed</h2>
<p>UTF-8 encoding issue.</p>
<p> </p>
<h2>Download</h2>
<p><a title="Download Code" href="http://www.echo-technology.co.uk/development/twitter+growl/trowel.txt" target="_blank">Download here</a>. Remember you&#8217;ll need some command line experience. See an example <a href="/development/twitter+growl/com.edm.trowel.plist.txt" target="_blank">launchd plist file here</a>.</p>
<p> </p>
<h2>Install</h2>
<p>Installation is relatively simple, you will need to install some Perl modules, refer to the <a href="http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/">previous post</a> for details.</p>
<p> </p>
<h2>Running</h2>
<p><em>NB: I have split this command for ease of readability.</em></p>
<pre>$ ./trowel -u &lt;&lt;EMAIL&gt;&gt; -p &lt;&lt;PASSOWRD&gt;&gt; -vv \</pre>
<pre>-I guykawasaki,twitter,stephenfry,rjstelling,macrumors,2009show \</pre>
<pre>-t twitter,stephenfry,rjstelling</pre>
<p> </p>
<p><strong>-I </strong>tells the script what to notify you about</p>
<p><strong>-t </strong>makes the notification sticky</p>
<p> </p>
<h2>Know Issues</h2>
<p>There does seem to be an issues when running in launcd mode where Tweets are duplicated, any testing and info you can supply on this bug will help no end.</p>
<p> </p>
<h2>Documentation </h2>
<pre>NAME
		trowel - display Twitter messages with Growl.

SYSOPSIS
		trowel -u -p [options]

EXAMPLES
		trowel -u &lt;username&gt; -p &lt;password&gt; -i 5 -l 180 -f "%t %d" \</pre>
<pre>		-t twitter,stephenfry,rjstelling \</pre>
<pre>		-I guykawasaki,twitter,stephenfry,rjstelling

OPTIONS
		-u, --username
			Twitter username

		-p, --password
			Twitter passord, if omitted it will be </pre>
<pre>		 	requested interactively</pre>
<pre>		-i
			interval between displaying tweets

		-l, --poll
			time between polls of Twitter feed

		-x, --exclude
			list of users to exclude

		-t, --sticky
			list of users who's tweets are sticky, </pre>
<pre>			-x and -i will override this

		-I, --include
			list of users to include

		-o
			output to STDOUT only, by-passing Growl,</pre>
<pre>			 use this for piping to another application

		-n
			initial number of Tweets to request, default is 5 

		-f "&lt;format&gt;"
			format of the Tweet
				%u - user
				%t - tweet
				%d - date time
				%l - location

		-g, --config
			a configuration file that sets command line </pre>
<pre>			parameters, this function is not implemented

		-h, --help
			show this help 

		-v
			verbose mode

		-vv
			very verbose mode

		-vvv
			debug verbose mode</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>How To: Growl and Twitter</title>
		<link>http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/</link>
		<comments>http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 11:12:08 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Web Sites]]></category>
		<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/?p=28</guid>
		<description><![CDATA[THIS POST HAS BEEN SUPERSEDED BY Twitter + Growl = Trowel v1.0
 
OK, so I&#8217;m new to Twitter. I didn&#8217;t (don&#8217;t) get it. Who wants to know what I&#8217;m doing? Well as I keep telling myself thats not the point. The point is to spread information, I had a lot of fun on Election night tweeting away about the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2008%2F11%2F11%2Fhow-to-growl-and-twitter%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2008%2F11%2F11%2Fhow-to-growl-and-twitter%2F" height="61" width="51" /></a></div><h2><strong>THIS POST HAS BEEN SUPERSEDED BY </strong><a title="Twitter + Growl = Trowel v1.0" href="http://www.echo-technology.co.uk/2009/01/26/twitter-growl-trowel-v10/"><strong>Twitter + Growl = Trowel v1.0</strong></a></h2>
<p> </p>
<p>OK, so I&#8217;m new to <a href="http://twitter.com">Twitter</a>. I didn&#8217;t (don&#8217;t) get it. Who wants to know what I&#8217;m doing? Well as I keep telling myself thats not the point. The point is to spread information, I had a lot of fun on <a href="http://twitter.com/rjstelling">Election night tweeting</a> away about the coverage and calling states (I was surprisingly accurate).</p>
<p>The one thing that did annoy me was it added another website to check &#8211; not just a lunch but a refresh every 5 minutes. Something had to be done.<span id="more-28"></span></p>
<p>For anyone who has <a href="http://www.adiumx.com">Adium</a> installed on their Mac, you will be aware of <a href="http://growl.info/">Growl</a> it&#8217;s a notification system that has yet to reach it&#8217;s full potential. As with background messages I wanted my incoming Tweets to be shown in small unobtrusive transparent bubble.</p>
<p>To cut a long story short &#8211; I couldn&#8217;t find anything. I found a few Ruby scripts (that didn&#8217;t work), I tried some nice applications but I didn&#8217;t want to run another app I wanted Growl!</p>
<p>So an hour or 2 or Googling and research for scripts I found some Perl modules that I could combine to produce the desired output.</p>
<p>My steps and code are listed below, its not 100% fool proof &#8211; please leave comments on how I can improve it.</p>
<p> </p>
<p><strong>1. Installing the Modules</strong></p>
<p>You will need only 3 modules <a href="http://search.cpan.org/~cnandor/Mac-Growl-0.67/lib/Mac/Growl.pm">Mac::Growl</a>, <a href="http://search.cpan.org/~cthom/Net-Twitter-1.17/lib/Net/Twitter.pm">Net::Twitter</a> and <a href="http://search.cpan.org/~gbarr/TimeDate-1.16/lib/Date/Format.pm">Date::Format</a>, if your lucky Date::Format might even be already installed. Type the following commands into terminal.</p>
<p>$ sudo perl -MCPAN -e shell</p>
<p>This will launch a <a href="http://cpan.org">CPAN</a> command line session to install the modules type (at the prompt):</p>
<p>&gt; install Mac::Growl</p>
<p>Agree to any dependancies, when it done type:</p>
<p>&gt; install Net::Twitter</p>
<p>Again agree to all dependancies, and lastly:</p>
<p>&gt; install Date::Format</p>
<p>&gt; exit</p>
<p>If you had any problems it may be because You need Apple&#8217;s Development tools installed, these are a free <a href="http://developer.apple.com/">download form Apple</a>. Please leave any problems in the comments.</p>
<p> </p>
<p><strong>2. Coding</strong></p>
<p>Now for the code, just copy the following into a empty text file and save as some thing sensible like growl_tweet.pl:</p>
<pre>#! /usr/bin/perl -wT

use Mac::Growl ':all';
use Net::Twitter;
use Date::Format;

my $app    = 'Growl/Twitter';
my @names  = ('New Tweet');

RegisterNotifications($app, \@names, [$names[0]]);

my $tweet = Net::Twitter-&gt;new( username=&gt;'##REPLACE WITH USERNAME##', password=&gt;'##REPLACE WITH PASSWORD##' );

my $last_id = undef;
my $switch = 0;

while(1)
{
<span> </span>my @tt = ();

<span> </span>if($last_id)
<span> </span>{
<span> </span>@tt = $tweet-&gt;friends_timeline({count =&gt; 200, since_id =&gt; $last_id });
<span> </span>}
<span> </span>else
<span> </span>{
<span> </span>@tt = $tweet-&gt;friends_timeline({count =&gt; 5 });
<span> </span>}

<span> </span>foreach my $t (@{$tt[0]})
<span> </span>{
<span> </span>if(!$switch) { $last_id = $t-&gt;{id}; $switch++; };

<span> </span>PostNotification($app, $names[0], $t-&gt;{user}{screen_name}, $t-&gt;{text});

<span> </span>printf("%s: %s\n", $t-&gt;{user}{screen_name}, $t-&gt;{text});

<span> </span>print "sleep 4\n";

<span> </span>sleep(4);
<span> </span>}

<span> </span>$switch = 0;</pre>
<pre><span> </span>print "sleep 37\n";
<span> </span>sleep(37);
}

exit;</pre>
<p> </p>
<p><strong>3. Running</strong></p>
<p>Now, simply run the script:</p>
<p>$ perl ./growl_tweet.pl</p>
<p>And bingo! All your tweets appear! Leave a comment if it works and especially if it doesn&#8217;t &#8211; if there is enough interest I might consider adding features and real installer!</p>
<p> </p>
<p><strong>4. Here&#8217;s one I made earlier</strong></p>
<p>If you would like the code, you can down load it here (with out any formatting issues).</p>
<p><a title="Growl+Twitter" href="http://www.echo-technology.co.uk/development/twitter+growl/growl.pl.txt" target="_blank">http://www.echo-technology.co.uk/development/twitter+growl/growl.pl.txt</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2008/11/11/how-to-growl-and-twitter/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>MacWorld &#8216;08 Predictions</title>
		<link>http://www.echo-technology.co.uk/2008/01/10/macworld-08-predictions/</link>
		<comments>http://www.echo-technology.co.uk/2008/01/10/macworld-08-predictions/#comments</comments>
		<pubDate>Thu, 10 Jan 2008 17:00:02 +0000</pubDate>
		<dc:creator>Richard Stelling</dc:creator>
				<category><![CDATA[Apple Inc.]]></category>
		<category><![CDATA[Apple TV]]></category>
		<category><![CDATA[Blu-Ray]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[MacBook]]></category>
		<category><![CDATA[MacTouch]]></category>
		<category><![CDATA[MacWorld]]></category>
		<category><![CDATA[Penryn]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>

		<guid isPermaLink="false">http://www.echo-technology.co.uk/2008/01/10/macworld-08-predictions/</guid>
		<description><![CDATA[There are two reasons I am writing yet another hackneyed MacWorld prediction entry:

I always get it right but never tell anyone 
Cash in on all the loverly Apple keywords, like sub-notebook, MacTouch and new iPhone

With all that unpleasantness over with I can begin. We all know Mr Jobs prides him self on secrecy and clandestine projects but [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2008%2F01%2F10%2Fmacworld-08-predictions%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.echo-technology.co.uk%2F2008%2F01%2F10%2Fmacworld-08-predictions%2F" height="61" width="51" /></a></div><p>There are two reasons I am writing yet another hackneyed <a href="http://www.macworld.com" target="_blank">MacWorld</a> prediction entry:</p>
<ol>
<li>I always get it right but never tell anyone<span style="white-space: pre"> </span></li>
<li>Cash in on all the loverly Apple keywords, like sub-notebook, <span style="font-style: italic">MacTouch</span> and new <span style="font-style: italic">iPhone</span></li>
</ol>
<p>With all that unpleasantness over with I can begin. We all know Mr Jobs prides him self on secrecy and clandestine projects but the simple fact is Apple is a business and needs to make money and a quick look over their aging product line tell us 90% of the keynote.<span id="more-5"></span></p>
<h2>Preemptive Strike   </h2>
<p>As to ruin the narrative of this entry Apple have this week released update Xserves and Mac Pros. I won&#8217;t insult your intelligence dear reader with the pretense that, if I had written this entry last month I would of predicted these update before January 12th. But I would of. <br />
So, one nil to me. Ok one all. </p>
<h2>Portable Success</h2>
<p>Lets start off with what has over the last 3 year become the bed rock of Apple&#8217;s resurgence, the MacBook Pro. The MacBook line is in desperate need of a make over but it the Pro version that you can bet the farm on.<br />
Intel announced new processors (immediately incorporated into the Desktop and Server lines) so we can reason the MacBook Pro updates will be more significant. But how significant? I&#8217;m going to stick my neck out and list all the updates I expect to see:</p>
<ol>
<li>Processor upgrade (duh!) &#8211; 45-nm Penryn procesors at 2.4GHz to 2.8GHz<span style="white-space: pre"> </span></li>
<li>Graphics upgrade &#8211; an NVIDIA with 256MB as standard up to 512MB in top models </li>
<li>Thinner enclosure &#8211; not by much maybe 20%-25%<span style="white-space: pre"> </span></li>
<li>LED backlight screen &#8211; I&#8217;m just jumping on the bandwagon with this<span style="white-space: pre"> </span></li>
<li>Longer battery life &#8211; nothing revolutionary here, all down to the processors and screen<span style="white-space: pre"> </span></li>
<li>Gesture Pad &#8211; enhanced and much bigger track pad that will respond like the iPhone interface with; stretching, pinching, scrolling and all that CoverFlow goodness.<span style="white-space: pre"> </span></li>
<li>Blu-Ray Drive &#8211; high end models only or possibly on a &#8216;built to order&#8217; only option<span style="white-space: pre"> </span></li>
<li>Mac OS X 10.5.2 &#8211; like shooting fish in a barrel!</li>
</ol>
<p>So, 8 prediction for the MacBook Pro &#8211; check back after the Keynote to see how I scored. What this will mean for the more consumer focused MacBook it&#8217;s hard to say, but here we go:<span style="white-space: pre"> </span><span style="white-space: pre"> </span></p>
<ol>
<li>Processor upgrade<span style="white-space: pre"> </span></li>
<li>Screen upgrade<span style="white-space: pre"> </span></li>
<li>Price drop</li>
</ol>
<p>Only time will tell, but I don&#8217;t expect anything more than modest upgrades to the MacBooks. The upgrades will only bring the low end portables in line with the new Sub-Notebook and help define the product lines.<br />
The real interesting thing about the new portable is its name. Looking back over the product lines we can surmise it will follow the Apple convention and take the moniker of Mini, Nano or Touch. These are surly different beasts.<br />
The MacBook Mini/Nano &#8211; a sub-notebookw with 13&#8243; screen no internal optical drive, SSD hard disk and about a micron thick.<br />
The Mac Touch &#8211; the long rumored and tablet Mac, all kinds of wireless including GMS/GPRS  and WiMax but only a 64GB SSD hard drive. It wont be locked to a carrier like the iPhone but will take an optional SIM card for true mobility. It&#8217;s just a big fat iPhone.</p>
<h2>Don&#8217;t Touch</h2>
<p> <br />
I don&#8217;t think we&#8217;re be seeing the Mac Touch this time, mainly because of the same confusion you found when reading the previous paragraph and I felt writing it. To be a success it has to have so much and still I can see no market. It would just be too expensive.</p>
<h2>Less is More</h2>
<p> <br />
So that leaves us with the The MacBook Mini/Nano &#8211; we have a Mac Mini so to avoid the confusion The MacBook Nano will be born. As far a product positioning is concerned the MacBook Nano will sit between the MacBook and MacBook Pro and be priced accordingly. Below is a list of of expected features (by no means exhaustive): <span style="white-space: pre"> </span></p>
<ol>
<li>13&#8243; Screen, LED backlight<span style="white-space: pre"> </span></li>
<li>64GB &#8211; 128GB SSD hard drive<span style="white-space: pre"> </span></li>
<li>1GB RAM<span style="white-space: pre"> </span></li>
<li>Touch interface/Trackpad similar to the new MacBook Pro&#8217;s<span style="white-space: pre"> </span></li>
<li>WiFi &#8211; all flavors a/b/g/n <span style="white-space: pre"> </span></li>
<li>USB 2.0 &#8211; possibly mini-USB<span style="white-space: pre"> </span></li>
<li>Very thin &#8211; is this a feature?<span style="white-space: pre"> </span></li>
<li>45-nm Penryn processor at 2.1GHz<span style="white-space: pre"> </span></li>
<li>Non-removable battery (but it lasts 12 hours)<span style="white-space: pre"> </span> </li>
<li>Mac OS X 10.5.2<span style="white-space: pre"> </span></li>
<li>iPod style universal docking port<span style="white-space: pre"> </span></li>
<li> Multi-Colourd &#8211; Apple uses this neat trick to reinvigorate &#8216;old&#8217; lines, expect this on updated MacBooks too.</li>
</ol>
<p>Wow! It&#8217;s like I have a crystal ball. Well, that&#8217;s not all we still have the Apple TV and Mac Mini to look at. This is where my predictions tend towards guess work as opposed to the well thought out and meticulously researched prose above.<br />
I can however, say with some degree of certainty that if the Apple TV is not update next week, it&#8217;s dead. If it does get a second bite at the home entertainment cherry it will see a <span style="font-weight: bold">MAJOR</span> upgrade; more Mac OS X like features, Safari, Blu-Ray (you heard me right!), bigger hard drive and iPod dock.</p>
<h2>Mini Minor</h2>
<p> <br />
I have even less of an idea about the Mac Mini &#8211; they are great, I&#8217;d love to see an upgrade and a price drop. But the updated Apple TV might just incorporate all the features.<br />
So there you go, 100% guaranteed to happen next week* or never. Please feel free to rant about how wrong I am going to be &#8211; I will be publishing the emails of those that make fools of them selves.<br />
One last thing&#8230; iPhone update, a new 16GB version followed by a modest price drop, oh and a iPhone Nano. <span style="font-style: italic">* Not a guarantee.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.echo-technology.co.uk/2008/01/10/macworld-08-predictions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
