<?xml version="1.0" encoding="utf-8"?>
<feed
    xmlns="http://www.w3.org/2005/Atom"
    xmlns:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xml:lang="en">
    <title>Grant McLean’s blog</title>
    <link rel="self" type="application/atom+xml" title="Grant McLean’s blog (Atom)" href="http://grantmclean.vox.com/library/posts/tags/catalyst/page/1/atom.xml" />
    <link rel="alternate" type="text/html" title="Grant McLean’s blog" href="http://grantmclean.vox.com/library/posts/tags/catalyst/page/1/"/> 
    <link rel="service.post" type="application/atom+xml" title="Grant McLean’s blog" href="http://www.vox.com/services/atom/svc=post/collection_id=6a010980c4d981000b0109d0f99307000f" /> 
    <link rel="service.subscribe" type="application/atom+xml" title="Grant McLean’s blog" href="http://grantmclean.vox.com/library/posts/tags/catalyst/atom.xml" />   
    <link rel="last" type="application/atom+xml" title="Grant McLean’s blog" href="http://grantmclean.vox.com/library/posts/tags/catalyst/page/1/atom.xml" />  
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/?_c=feed-atom-full" label="catalyst" /> 
    <generator uri="http://www.vox.com/">Vox</generator>
    <updated>2009-09-18T20:13:58Z</updated> 
    <author>
        <name>Grant McLean</name>
        <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
    </author> 
    <id>tag:vox.com,2006:6p010980c4d981000b/tags/catalyst/</id> 
    <subtitle>Irregular posts from 41° South</subtitle>  
    
    <entry>
        <title>SSHMenu 3.18 adds command-line support</title>   
        <link rel="alternate" type="text/html" title="SSHMenu 3.18 adds command-line support" href="http://grantmclean.vox.com/library/post/sshmenu-318-add-command-line-support.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="SSHMenu 3.18 adds command-line support" href="http://grantmclean.vox.com/library/post/sshmenu-318-add-command-line-support.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="SSHMenu 3.18 adds command-line support" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b011016c6c9e1860d" />            <id>tag:vox.com,2009-08-24:asset-6a010980c4d981000b011016c6c9e1860d</id>
        <published>2009-08-24T10:55:12Z</published>
        <updated>2009-09-18T20:13:58Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>Since the last release of <a href="http://sshmenu.sourceforge.net/">SSHMenu</a> went so smoothly, I thought I might as well do another...</p><p>SSHMenu is somewhat of an enigma - it&#39;s a GUI tool for people who work at the command-line. In theory it shouldn&#39;t appeal to the point-and-click crowd (since they don&#39;t use command-lines) and it also shouldn&#39;t appeal to the command-line crowd (since they don&#39;t use GUIs). Of course the world is not black and white and most people choose the combination of tools that work best for them.</p><p>I lean strongly towards the command-line myself and yet I developed SSHMenu because I wanted a GUI solution to a particular problem. I wanted to be able to easily initiate a new SSH connection in a new terminal window. I wanted the ability to define the position and size of the new window and to use colours to indicate the class of machine the window was connected to (eg: production vs test vs development). The solution that worked for me was to implement an applet that provides a menu of frequently used connections.</p><p>It turns out that there are some people who also want to be able to set up profiles for frequently used connections, but they don&#39;t want to use a menu. When they&#39;re typing at a command prompt and want a new SSH window, they don&#39;t want to reach for the mouse - they&#39;d prefer to type a command. Release 3.18 of SSHMenu adds a feature to support this group of users. Now they can use SSHMenu&#39;s GUI dialog for the infrequent task of defining a new connection, but for the frequent task of initiating a connection they can use the command-line.</p><p>Here&#39;s an example. Say you have a server called &#39;fitzy&#39; that hosts your web development environment. Perhaps you frequently connect to this host to run &#39;tail&#39; against the Apache error log. Since the lines of output tend to be quite long you prefer to use a small font and a wide window positioned across the the bottom of your screen. You can set that all up using SSHMenu&#39;s &#39;Host&#39; dialog:</p>
    
    
    

    
    
    

    
    
    

    
    
    

    
    
    

    
    
    
<div at:enclosure="asset" at:xid="6a010980c4d981000b011016c6c938860d" at:format="extra-large" at:align="center"
    class="enclosure enclosure-center enclosure-extra-large photo-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="padding: 9px; border: 1px solid; width: px; margin: 10px auto;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item photo-asset last">
    
            <div class="enclosure-image">
        
                <a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011016c6c938860d.html"><img src="http://a0.vox.com/6a010980c4d981000b011016c6c938860d-500pi" alt="SSHMenu Host Dialog" title="SSHMenu Host Dialog" /></a>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"><a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011016c6c938860d.html" title="SSHMenu Host Dialog">SSHMenu Host Dialog</a></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->





<p><br />And now you can initiate the connection in a new window with this command:</p><p><span style="color: #333333">&#160;&#160;&#160; <strong>sshmenu-gnome fitzy</strong></span></p><p>Of course &#39;sshmenu-gnome&#39; is rather a long and unweildy command to type frequently so it&#39;s likely that you&#39;d alias it to something shorter like &#39;connect&#39; or &#39;sshm&#39;. The SSHMenu distribution includes a bash completion function called _sshmenu which allows you to do tab completion of host definition titles from the command line. If you set up an alias for the main command, you&#39;ll want to associate the completion function with your alias as well:</p><p><span style="color: #333333"><strong>&#160;&#160;&#160; alias sshm=sshmenu-gnome<br />&#160;&#160;&#160; complete -F _sshmenu sshm</strong></span></p><p>So there you go. If you like to use multiple terminal windows it might be a useful addition to your toolbox.<br /><div><br /></div></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/sshmenu-318-add-command-line-support.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b011016c6c9e1860d?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="ruby" scheme="http://grantmclean.vox.com/tags/ruby/" label="ruby" /> 
    <category term="shell" scheme="http://grantmclean.vox.com/tags/shell/" label="shell" /> 
    <category term="ssh" scheme="http://grantmclean.vox.com/tags/ssh/" label="ssh" /> 
    <category term="gnome" scheme="http://grantmclean.vox.com/tags/gnome/" label="gnome" /> 
    <category term="bash" scheme="http://grantmclean.vox.com/tags/bash/" label="bash" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    <category term="sshmenu" scheme="http://grantmclean.vox.com/tags/sshmenu/" label="sshmenu" /> 
    </entry> 
    
    <entry>
        <title>SSHMenu 3.17 adds a command-line with auto-completion</title>   
        <link rel="alternate" type="text/html" title="SSHMenu 3.17 adds a command-line with auto-completion" href="http://grantmclean.vox.com/library/post/sshmenu-317-adds-a-command-line-with-auto-completion.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="SSHMenu 3.17 adds a command-line with auto-completion" href="http://grantmclean.vox.com/library/post/sshmenu-317-adds-a-command-line-with-auto-completion.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="SSHMenu 3.17 adds a command-line with auto-completion" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b01101862bce8860f" />              <id>tag:vox.com,2009-08-16:asset-6a010980c4d981000b01101862bce8860f</id>
        <published>2009-08-16T06:55:09Z</published>
        <updated>2009-08-16T09:29:56Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>I finally got around to pushing out a new release of <a href="http://sshmenu.sourceforge.net/">SSHMenu</a>. It includes some bug fixes, minor tweaks and <strong>one particularly cool new feature</strong>. As I&#39;m sure you&#39;ll recall SSHMenu is a very simple GNOME panel applet that provides a menu of hosts for you to connect to via SSH. Point ... click ... shell window appears:<br />
    
    
    

    
    
    

    
    
    

    
    
    

    
    
    
<div at:enclosure="asset" at:xid="6a010980c4d981000b011016437e02860b" at:format="extra-large" at:align="center"
    class="enclosure enclosure-center enclosure-extra-large photo-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="padding: 9px; border: 1px solid; width: px; margin: 10px auto;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item photo-asset last">
    
            <div class="enclosure-image">
        
                <a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011016437e02860b.html"><img src="http://a2.vox.com/6a010980c4d981000b011016437e02860b-500pi" alt="Selecting a host from the menu" title="Selecting a host from the menu" /></a>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"><a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011016437e02860b.html" title="Selecting a host from the menu">Selecting a host from the menu</a></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->




The advantage of this system is that when you define a host connection you get to specify things like the window size and position, terminal profile (for font size and colour, etc.), SSH connection parameters (e.g.: username or port forwarding options) and even a command to run on the target host (e.g.: tailing a log file).</p><p>The disadvantage of course, is that you <strong><em>have to</em></strong> define at least some of those things - you can&#39;t use SSHMenu to connect to a host unless you&#39;ve defined a connection. Following <a href="http://utcc.utoronto.ca/%7Ecks/space/blog/linux/GnomeCustomizations">a suggestion from Chris Siebenmann</a>, release 3.17 has changed that. Now the applet includes a handy little text entry box.&#160; Type a hostname in the box, hit Enter and you&#39;re connected. Even better, the text box does auto-completion so if you&#39;ve connected to a host before then you can type in the first few letters and select the host from the list:<br />
    
    
    

    
    
    

    
    
    

    
    
    

    
    
    
<div at:enclosure="asset" at:xid="6a010980c4d981000b01101688562a860c" at:format="extra-large" at:align="center"
    class="enclosure enclosure-center enclosure-extra-large photo-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="padding: 9px; border: 1px solid; width: px; margin: 10px auto;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item photo-asset last">
    
            <div class="enclosure-image">
        
                <a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b01101688562a860c.html"><img src="http://a2.vox.com/6a010980c4d981000b01101688562a860c-500pi" alt="Type a hostname with auto-completion" title="Type a hostname with auto-completion" /></a>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"><a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b01101688562a860c.html" title="Type a hostname with auto-completion">Type a hostname with auto-completion</a></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->




The available options for auto-completion include:<br /><ul><li>hostnames you&#39;ve typed in the box previously</li><li>hosts that are already defined in your menu</li><li>an option to take the hostname you&#39;ve just typed and add it to your menu</li></ul>The history file for the auto-completion box lives in <strong>$HOME/.sshmenu_history</strong>. You can open this file in a text editor and paste in a list of hostnames from your DNS zone file to pre-seed the auto-completion list. At this stage there&#39;s no way to remove things from your history file other than with a text editor but I hope to fix that in a future release.</p><p>Now for the <strong>bad news</strong> ...</p><p>You can&#39;t actually use this cool new feature yet.&#160; Earlier this year <a href="http://det.cable.nu/blog/blog.rbx">Detlef Reichl</a>  did some work on the Ruby-GTK bindings to add some features to the panelapplet library that he needed for his <a href="http://det.cable.nu/teatime/index.rbx">teatime applet</a>. His patches were accepted and released in version 0.19 of the bindings. Two of those patches are required to run the new features in SSHMenu. Version 0.19 of the bindings has made it into Debian &#39;unstable&#39; and hopefully will be in the next Ubuntu release. Until then, if you want this feature then you&#39;re going to have to build the libraries yourself.</p><p>And finally ... while I was developing this new feature I took the opportunity to move the source code from Subversion to Git. What a blessed relief!<br /></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/sshmenu-317-adds-a-command-line-with-auto-completion.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b01101862bce8860f?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="ruby" scheme="http://grantmclean.vox.com/tags/ruby/" label="ruby" /> 
    <category term="git" scheme="http://grantmclean.vox.com/tags/git/" label="git" /> 
    <category term="ssh" scheme="http://grantmclean.vox.com/tags/ssh/" label="ssh" /> 
    <category term="gnome" scheme="http://grantmclean.vox.com/tags/gnome/" label="gnome" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    <category term="sshmenu" scheme="http://grantmclean.vox.com/tags/sshmenu/" label="sshmenu" /> 
    </entry> 
    
    <entry>
        <title>History of Programming Languages</title>   
        <link rel="alternate" type="text/html" title="History of Programming Languages" href="http://grantmclean.vox.com/library/post/history-of-programming-languages.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="History of Programming Languages" href="http://grantmclean.vox.com/library/post/history-of-programming-languages.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="History of Programming Languages" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b0110182191e1860f" />          <id>tag:vox.com,2009-05-09:asset-6a010980c4d981000b0110182191e1860f</id>
        <published>2009-05-09T22:27:36Z</published>
        <updated>2009-05-12T02:44:15Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>Just in case there&#39;s a programmer left on the planet who hasn&#39;t seen this link:</p><blockquote><p><a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html">James Iry&#39;s ‘A Brief, Incomplete, and Mostly Wrong History of Programming Languages’</a><br /></p></blockquote><p><br />Yes, it&#39;s geek humour but it&#39;s very funny geek humour!<br /></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/history-of-programming-languages.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b0110182191e1860f?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="perl" scheme="http://grantmclean.vox.com/tags/perl/" label="perl" /> 
    <category term="programming" scheme="http://grantmclean.vox.com/tags/programming/" label="programming" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    </entry> 
    
    <entry>
        <title>But CSS *IS* Awesome</title>   
        <link rel="alternate" type="text/html" title="But CSS *IS* Awesome" href="http://grantmclean.vox.com/library/post/but-css-is-awesome.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="But CSS *IS* Awesome" href="http://grantmclean.vox.com/library/post/but-css-is-awesome.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="But CSS *IS* Awesome" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b0110163d04f0860c" />            <id>tag:vox.com,2009-04-08:asset-6a010980c4d981000b0110163d04f0860c</id>
        <published>2009-04-08T08:09:37Z</published>
        <updated>2009-04-08T08:13:43Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p><a href="http://www.zazzle.com/css_is_awesome_mug-168716435071981928">This link</a> has been doing the rounds.&#160; Apparently it&#39;s hilarious. I like to think I have a sense of humour, but I just don&#39;t get the joke.</p><p>My best guess is that it&#39;s &#39;funny&#39; because the text doesn&#39;t fit in the box. There are two fairly obvious possibilities: either the box isn&#39;t big enough or the text font size is too big. Either one would be trivial to fix with a line of CSS. In fact you could easily do it in such a way that if the user chose to increase their browser font size the box width would increase too. An alternative possibility is that the wrong text is in the box. The box might have been designed to contain a certain type of data and the text that&#39;s ended up there is not what the box was designed to cope with. Maybe in this case the best thing to do is to simply hide the &#39;overflow&#39; since it shouldn&#39;t be there anyway. Once again, you can achieve that easily with one line of CSS.</p><p>Still guessing here, it&#39;s probably also &#39;funny&#39; because this would never happen if you laid out your page with tables instead of CSS. I&#39;m not sure if that&#39;s actually true but if you did specify a width on your table and then you put data in it that was too big then most browsers <em>would</em> ignore your width setting and increase the table size. Is that the right thing for the browser to do? Probably not. It certainly has the potential to screw up the rest of your page layout and relying on the browser to do something <em>other than</em> the specific thing you asked it to do would seem a risky proposition at best.</p><p>The whole tables vs CSS &#39;dichotomy&#39; is nonsense anyway. They are not mutually exclusive and they each have their strengths (I certainly don&#39;t want to try and lay out tabular data using only CSS). At least with CSS you have this option:</p>
    
    
    

    
    
    

    
    
    

    
    
    
<div at:enclosure="asset" at:xid="6a010980c4d981000b011017b88584860e" at:format="large" at:align="center"
    class="enclosure enclosure-center enclosure-large photo-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="padding: 9px; border: 1px solid; width: px; margin: 10px auto;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item photo-asset last">
    
            <div class="enclosure-image">
        
                <a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011017b88584860e.html"><img src="http://a4.vox.com/6a010980c4d981000b011017b88584860e-320pi" alt="CSS *IS* Awesome" title="CSS *IS* Awesome" /></a>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"><a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011017b88584860e.html" title="CSS *IS* Awesome">CSS *IS* Awesome</a></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->



<p><br /> <div><br /></div></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/but-css-is-awesome.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b0110163d04f0860c?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="css" scheme="http://grantmclean.vox.com/tags/css/" label="css" /> 
    <category term="awesome" scheme="http://grantmclean.vox.com/tags/awesome/" label="awesome" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    </entry> 
    
    <entry>
        <title>Mending The Bitter Absence of Reasoned Technical Discussion</title>   
        <link rel="alternate" type="text/html" title="Mending The Bitter Absence of Reasoned Technical Discussion" href="http://grantmclean.vox.com/library/post/mending-the-bitter-absence-of-reasoned-technical-discussion.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="Mending The Bitter Absence of Reasoned Technical Discussion" href="http://grantmclean.vox.com/library/post/mending-the-bitter-absence-of-reasoned-technical-discussion.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="Mending The Bitter Absence of Reasoned Technical Discussion" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b0110163c2dab860c" />          <id>tag:vox.com,2009-04-05:asset-6a010980c4d981000b0110163c2dab860c</id>
        <published>2009-04-05T05:44:18Z</published>
        <updated>2009-04-05T05:44:18Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p><a href="http://al3x.net/2009/04/04/reasoned-technical-discussion.html">Alex Payne writes</a>:</p><blockquote><p><em>&quot;In practice, the conversations that are most widely heard in the tech
community are full of inaccuracies, manufactured drama, ignorance, and
unbridled opinion.&quot;</em><br /></p></blockquote><p>It&#39;s a good read and Alex has some great ideas about what you can do to improve the state of technical discussions in today&#39;s social media forums.<br /></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/mending-the-bitter-absence-of-reasoned-technical-discussion.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b0110163c2dab860c?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="ruby" scheme="http://grantmclean.vox.com/tags/ruby/" label="ruby" /> 
    <category term="blogs" scheme="http://grantmclean.vox.com/tags/blogs/" label="blogs" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    </entry> 
    
    <entry>
        <title>The ‘Faces’ of Wellington Perl Mongers</title>   
        <link rel="alternate" type="text/html" title="The ‘Faces’ of Wellington Perl Mongers" href="http://grantmclean.vox.com/library/post/the-faces-of-wellington-perl-mongers.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="The ‘Faces’ of Wellington Perl Mongers" href="http://grantmclean.vox.com/library/post/the-faces-of-wellington-perl-mongers.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="The ‘Faces’ of Wellington Perl Mongers" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b011017b34b01860e" />            <id>tag:vox.com,2009-03-20:asset-6a010980c4d981000b011017b34b01860e</id>
        <published>2009-03-20T09:37:56Z</published>
        <updated>2009-03-20T09:48:08Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p><a href="http://wellington.pm.org/">Wellington Perl Mongers</a> had a fun evening last week - our annual Lightning Talk meeting.&#160; As usual the talk schedule was looking pretty thin in the days leading up to the event but with a bit of encouragement people did step up and the evening went well.&#160; <a href="http://wellington.pm.org/archive/index.html">The talks</a> covered a range of Perl modules; a bit on Erlang and CouchDB (thanks Lenz); mountain biking and mapping (Donovan); and Perl on the iPhone (Tobi). We even got to see the beginnings of Matt&#39;s robot army (doesn&#39;t look like we have anything to fear yet) and Srdjan gave us his sermon entitled &quot;If statements considered harmful&quot;.&#160; I asked Matt to take some photos.&#160; The lighting wasn&#39;t great so not many came out but here&#39;s a montage:</p>
    
    
    

    
    
    

    
    
    
<div at:enclosure="asset" at:xid="6a010980c4d981000b011015f2fd59860b" at:format="medium" at:align="center"
    class="enclosure enclosure-center enclosure-medium photo-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="padding: 9px; border: 1px solid; width: px; margin: 10px auto;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item photo-asset last">
    
            <div class="enclosure-image">
        
                <a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011015f2fd59860b.html"><img src="http://a1.vox.com/6a010980c4d981000b011015f2fd59860b-200pi" alt="The ‘Faces’ of Wellington Perl Mongers" title="The ‘Faces’ of Wellington Perl Mongers" /></a>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"><a href="http://grantmclean.vox.com/library/photo/6a010980c4d981000b011015f2fd59860b.html" title="The ‘Faces’ of Wellington Perl Mongers">The ‘Faces’ of Wellington Perl Mongers</a></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->


<p><br />As a group, it&#39;s clear that there&#39;s one key thing we can all do to improve our delivery - <strong>turn and face the audience</strong>.&#160; The one exception pictured is the guy speaking without slides.<br /><div><br /></div></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/the-faces-of-wellington-perl-mongers.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b011017b34b01860e?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="perl" scheme="http://grantmclean.vox.com/tags/perl/" label="perl" /> 
    <category term="presentations" scheme="http://grantmclean.vox.com/tags/presentations/" label="presentations" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    </entry> 
    
    <entry>
        <title>Terrible TV3 Coverage of S92A Protest</title>   
        <link rel="alternate" type="text/html" title="Terrible TV3 Coverage of S92A Protest" href="http://grantmclean.vox.com/library/post/terrible-tv3-coverage-of-s92a-protest.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="Terrible TV3 Coverage of S92A Protest" href="http://grantmclean.vox.com/library/post/terrible-tv3-coverage-of-s92a-protest.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="Terrible TV3 Coverage of S92A Protest" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b0110166a6f9f860d" />          <id>tag:vox.com,2009-02-20:asset-6a010980c4d981000b0110166a6f9f860d</id>
        <published>2009-02-20T20:24:45Z</published>
        <updated>2009-02-20T20:34:04Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>As <a href="http://www.coffee.geek.nz/one-news-versus-3news-blackout.html">Brenda</a> pointed out, the <a href="http://www.3news.co.nz/News/Blackout-protest-over-controversial-copyright-law-reaches-Parliament/tabid/311/articleID/91933/cat/185/Default.aspx">coverage by TV3</a> of the S92A protest at parliament this week was terrible and totally missed the point.&#160; I would like to comment on their site but the signup system seems to be broken and I can&#39;t log in.&#160; So instead I shall ineffectually shake my fist at them from a distance via my blog ...</p><blockquote><p>As one of the people involved in the protest at parliament I would like to clarify that MY objection to this law has nothing whatsoever to do with downloading music or movies on the internet.</p><p>If someone accused me of stealing a car then the police would investigate the facts, a judicial process would be followed in which my guilt would need to be proven to the satisfaction of a judge and jury, and I would have the right to a defence and if necessary an appeal.</p><p>With this new law, if someone accuses me of downloading copyrighted material without appropriate permission then the police are not involved, there is no judicial process, I am assumed to be guilty unless I can prove myself innocent and the punishment will be handed down by my ISP.</p><p>I know of no other law on the NZ statutes which presumes a person guilty unless they can prove their innocence and which bypasses judicial hearings and appeals processes in favour of having punishments dished out by a commercial entity.</p><p>This is bad law which sets dangerous precendents.&#160; THAT is what I was protesting against.<br /></p></blockquote><p><br /> </p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/terrible-tv3-coverage-of-s92a-protest.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b0110166a6f9f860d?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="copyright" scheme="http://grantmclean.vox.com/tags/copyright/" label="copyright" /> 
    <category term="protest" scheme="http://grantmclean.vox.com/tags/protest/" label="protest" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    <category term="tv3" scheme="http://grantmclean.vox.com/tags/tv3/" label="tv3" /> 
    </entry> 
    
    <entry>
        <title>Special Guests at Wellington.pm</title>   
        <link rel="alternate" type="text/html" title="Special Guests at Wellington.pm" href="http://grantmclean.vox.com/library/post/special-guests-at-wellingtonpm.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="Special Guests at Wellington.pm" href="http://grantmclean.vox.com/library/post/special-guests-at-wellingtonpm.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="Special Guests at Wellington.pm" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b011015e746e0860b" />          <id>tag:vox.com,2009-02-07:asset-6a010980c4d981000b011015e746e0860b</id>
        <published>2009-02-07T10:11:34Z</published>
        <updated>2009-02-07T10:11:34Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>This Tuesday evening (Feb 10th) Wellington Perl Mongers are very pleased to welcome Jacinta Richardson and Paul Fenwick from <a href="http://perltraining.com.au/">Perl Training Australia</a>.&#160; They&#39;re over here on vacation (as well as for <a href="http://baacamp.org/">Baa Camp</a>) and have kindly offered to come along and speak at our February meeting.</p><p>Jacinta and Paul are active members of Melbourne Perl Mongers; were instrumental in getting the ODSC (Open Source Developers Conference) off the ground in Australia and have spoken at other conferences including SAGE-AU, Linux.conf.au and OSCON.</p><p>So what are they going to be talking about? Well it might surprise you to hear it&#39;s <strong>not about Perl</strong>. Jacinta is going to tell us how to give a good talk.&#160; And Paul is going to tell us about the &#39;Illustrated History of Failure&#39;.</p><p>So rock on up to Catalyst for a 6:00pm start and lets make these Aussies feel welcome.<br /></p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/special-guests-at-wellingtonpm.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b011015e746e0860b?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="perl" scheme="http://grantmclean.vox.com/tags/perl/" label="perl" /> 
    <category term="conference" scheme="http://grantmclean.vox.com/tags/conference/" label="conference" /> 
    <category term="talks" scheme="http://grantmclean.vox.com/tags/talks/" label="talks" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    <category term="aussies" scheme="http://grantmclean.vox.com/tags/aussies/" label="aussies" /> 
    </entry> 
    
    <entry>
        <title>Remember Your Responsibilities </title>   
        <link rel="alternate" type="text/html" title="Remember Your Responsibilities " href="http://grantmclean.vox.com/library/post/remember-your-responsibilities.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="Remember Your Responsibilities " href="http://grantmclean.vox.com/library/post/remember-your-responsibilities.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="Remember Your Responsibilities " href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b01101665216e860d" />          <id>tag:vox.com,2009-01-31:asset-6a010980c4d981000b01101665216e860d</id>
        <published>2009-01-31T07:18:40Z</published>
        <updated>2009-04-06T11:40:20Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>A colleague encountered an odd problem with some Perl code the other day.&#160; It took us a while to realise what was going on, you&#39;ll probably work it out much quicker ...</p><p>Here&#39;s a simplified version of what we were dealing with:</p><p><span style="color: #339933">&#160; &#160; use strict;<br />&#160;&#160;&#160; use warnings;</p><p>&#160; &#160; eval {<br />&#160;&#160; &#160;&#160;&#160;&#160; my $obj = SomeClass-&gt;new();<br />&#160;&#160; &#160;&#160;&#160;&#160; die &quot;Code Red!\n&quot;;<br />&#160; &#160; };</p><p>&#160; &#160; if($@) {<br />&#160;&#160; &#160;&#160;&#160;&#160; print &quot;Exception caught: $@\n&quot;;<br />&#160; &#160; }<br />&#160; &#160; else {<br />&#160;&#160; &#160;&#160;&#160;&#160; print &quot;No exception occurred\n&quot;<br />&#160; &#160; }</span></p><p>We both expected it to output:</p><p><span style="color: #339933">&#160; &#160; Exception caught: Code Red!</span></p><p>but instead we got:</p><p><span style="color: #339933">&#160;&#160;&#160; No exception occurred</span></p><p>You probably worked it out straightaway but for the record, here&#39;s what was happening ...</p><p>The die statement <em><strong>did</strong></em> generate an exception and the message <em><strong>was</strong></em> stored in $@. Of course the code in the eval block stopped executing immediately but when control flow exited the block, any lexcial variables declared in the block went out of scope.&#160; In this case there was only one: $obj.&#160; What we didn&#39;t realise is that $obj&#39;s class defined a destructor method (&#39;DESTROY&#39;).&#160; This method is called when the object goes out of scope and apparently in our case the method<br />wrapped something in an eval.&#160; Whatever that something was, it completed without generating an exception, so $@ ended up empty - indicating no error and overwriting the exception message that our code put there..</p><p>So, if you write a destructor method and it needs to use eval, please remember to use local($@) to restore the previous value of $@ when your routine completes.</p>    <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/remember-your-responsibilities.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b01101665216e860d?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="perl" scheme="http://grantmclean.vox.com/tags/perl/" label="perl" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    </entry> 
    
    <entry>
        <title>New Release of SSHMenu</title>   
        <link rel="alternate" type="text/html" title="New Release of SSHMenu" href="http://grantmclean.vox.com/library/post/new-release-of-sshmenu.html?_c=feed-atom-full" />  
        <link rel="service.post" type="application/atom+xml" title="New Release of SSHMenu" href="http://grantmclean.vox.com/library/post/new-release-of-sshmenu.html?_c=feed-atom-full#comments" /> 
        <link rel="service.edit" type="application/atom+xml" title="New Release of SSHMenu" href="http://www.vox.com/atom/svc=post/asset_id=6a010980c4d981000b0109811f7a37000c" />          <id>tag:vox.com,2009-01-17:asset-6a010980c4d981000b0109811f7a37000c</id>
        <published>2009-01-17T22:16:07Z</published>
        <updated>2009-01-17T22:27:05Z</updated>
    
        <author>
            <name>Grant McLean</name>
            <uri>http://grantmclean.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://grantmclean.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
        <p>I pushed out a new release of <a href="http://sshmenu.sourceforge.net/">SSHMenu</a> the other night.&#160; Given that it&#39;s been over a year since the last release you might wonder what monumental new feature prompted the release - and that would be a sad story.</p><p>The truth is that I fell off the &quot;Release often&quot; wagon.&#160; There have been a number of very minor changes.&#160; The most important is a patch to disable drag-n-drop for reordering menu items (because it&#39;s buggy and can cause a busy loop).&#160; The reason I hadn&#39;t rolled up a release and pushed it out was simply because it was &#39;hard&#39;.&#160; Not really hard of course, just not trivially easy.&#160; I couldn&#39;t just push a button and have the release go out.&#160; Rolling up a tarball was automated with a makefile but creating the .debs and adding them to the APT repository involved manual steps.&#160; As did the updates to the RDoc documentation files.&#160; To make matters worse, some of the files involved in publishing the .debs were not in source control and consequently were lost when my hard disk died last year.&#160; So even though there were changes I could have published, I hadn&#39;t bothered because of the effort required.</p><p>So what finally prompted me into action was <strong>an unfortunate accident</strong>.</p><p>Earlier in the month, Nicolas Roman sent me an <a href="http://sshmenu.sourceforge.net/articles/terminator.html">article he&#39;d written</a> for the SSHMenu web site.&#160; He&#39;s been using <a href="https://launchpad.net/terminator">Terminator</a> rather than GNOME-Terminal and had hacked SSHMenu to support the Terminator command line arguments.&#160; So I added his article into the source control for the web site and ran the publish script - at which point <strong>everything went horribly wrong</strong>.</p><p>SourceForge made a few changes to their project web hosting and shell access last year.&#160; So my first attempt to publish did nothing.&#160; Once I&#39;d sorted out the new username and directory path requirements I ran the script again.&#160; It mostly worked, but because it used rsync and because the <a href="http://sshmenu.sourceforge.net/debian/dists/stable/contrib/binary-all/">APT repository files</a> and <a href="http://sshmenu.sourceforge.net/dev/rdoc/">generated RDoc files</a> were not in source control and not present in my local tree (due to the disk crash) the rsync deleted those files off the server. Oops.</p><p>I didn&#39;t have a copy of the original .deb files.&#160; I could have regenerated them but if I was going to that trouble I decided I might as well roll up a new release.&#160; So I worked out what steps I previously performed manually, added them to scripts in the project source control and pushed out a new copy of everything.</p><p>So every cloud has a silver lining.&#160; Accidentally deleting the public repository file prompted me to fix up my processes for making a new release. And the moral of the story: <strong>if you can automate something you probably should</strong>.&#160; It&#39;ll mean you don&#39;t have to remember the manual steps and will also make it easier to delegate that task to someone else if required.</p>   <p style="clear:both;"> 
    <a href="http://grantmclean.vox.com/library/post/new-release-of-sshmenu.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a010980c4d981000b0109811f7a37000c?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content> 
    <category term="ruby" scheme="http://grantmclean.vox.com/tags/ruby/" label="ruby" /> 
    <category term="apt" scheme="http://grantmclean.vox.com/tags/apt/" label="apt" /> 
    <category term="ssh" scheme="http://grantmclean.vox.com/tags/ssh/" label="ssh" /> 
    <category term="gnome" scheme="http://grantmclean.vox.com/tags/gnome/" label="gnome" /> 
    <category term="catalyst" scheme="http://grantmclean.vox.com/tags/catalyst/" label="catalyst" /> 
    <category term="rdoc" scheme="http://grantmclean.vox.com/tags/rdoc/" label="rdoc" /> 
    <category term="sshmenu" scheme="http://grantmclean.vox.com/tags/sshmenu/" label="sshmenu" /> 
    </entry> 
</feed>


