<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>mtg</title>
    <subtitle>Personal website and blog.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://martinthetallguy.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://martinthetallguy.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-27T21:00:00+00:00</updated>
    <id>https://martinthetallguy.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Old content, lovingly restored</title>
        <published>2026-10-27T21:00:00+00:00</published>
        <updated>2026-10-27T21:00:00+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/old-content-lovingly-restored/"/>
        <id>https://martinthetallguy.com/blog/old-content-lovingly-restored/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/old-content-lovingly-restored/">&lt;p&gt;The old content on this blog comes from my blog called “The Empty Quarter” which was hosted on &lt;a rel=&quot;external&quot; href=&quot;http://martinhammer.com&quot;&gt;martinhammer.com&lt;/a&gt; roughly between 2009 and 2020. The purpose of that blog was to record little how-to snippets and links mainly to do with Ubuntu and Linux in general, and &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/BIRT_Project&quot;&gt;BIRT&lt;/a&gt; which is a tool I was using at work at the time. There isn’t much value in the content from a technical point of view; from the curiosity perspective it is perhaps an interesting look back in time.&lt;/p&gt;
&lt;p&gt;The content was restored from an old WordPress backup. The posts were converted into Markdown with the help of Claude AI. This site is built using the &lt;a rel=&quot;external&quot; href=&quot;http://www.getzola.org/&quot;&gt;Zola static site generator&lt;/a&gt;, using those Markdown files as input.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>SublimeText on Ubuntu 16.04</title>
        <published>2016-08-07T15:40:28+00:00</published>
        <updated>2016-08-07T15:40:28+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/sublimetext-on-ubuntu-16-04/"/>
        <id>https://martinthetallguy.com/blog/sublimetext-on-ubuntu-16-04/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/sublimetext-on-ubuntu-16-04/">&lt;p&gt;For some reason Unity in Ubuntu 16.04 and the SublimeText deb package don’t play well together and the integration is not quite right - for one the launcher says “UNREGISTERED” even after entering a valid licence key, and SublimeText does not appear in Nautilus context menu as an option to open files. &lt;a rel=&quot;external&quot; href=&quot;http://askubuntu.com/a/755041&quot;&gt;Here’s the workaround&lt;/a&gt; for this issue.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The right way to set PATH variable</title>
        <published>2016-07-15T06:17:58+00:00</published>
        <updated>2016-07-15T06:17:58+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/the-right-way-to-set-path-variable/"/>
        <id>https://martinthetallguy.com/blog/the-right-way-to-set-path-variable/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/the-right-way-to-set-path-variable/">&lt;p&gt;Great post on Stack Exchange, &lt;a rel=&quot;external&quot; href=&quot;https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path#26059&quot;&gt;How to correctly add a path to PATH?&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Network Manager woes in Ubuntu 16.04</title>
        <published>2016-07-15T06:12:40+00:00</published>
        <updated>2016-07-15T06:12:40+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/network-manager-woes-in-ubuntu-16-04/"/>
        <id>https://martinthetallguy.com/blog/network-manager-woes-in-ubuntu-16-04/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/network-manager-woes-in-ubuntu-16-04/">&lt;p&gt;Lots of issues with Network Manager in Ubuntu 16.06 LTS, in particular connecting to wifi after suspend/resume. Restarting the Network Manager service seems to work for me.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; restart&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; network-manager.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fix for Nautilus shows hidden files by default</title>
        <published>2016-01-26T04:05:15+00:00</published>
        <updated>2016-01-26T04:05:15+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/fix-for-nautilus-shows-hidden-files-by-default/"/>
        <id>https://martinthetallguy.com/blog/fix-for-nautilus-shows-hidden-files-by-default/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/fix-for-nautilus-shows-hidden-files-by-default/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://ubuntuforums.org/showthread.php?t=2133298&amp;amp;s=5a4f2f9fde9a7d0fc0491bbe59506cdf&amp;amp;p=12623240#post12623240&quot;&gt;Here’s the fix&lt;/a&gt; for a problem where Nautilus shows hidden files by default.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$ dconf-editor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;org -&amp;gt; gtk -&amp;gt; settings -&amp;gt; file-chooser&lt;/li&gt;
&lt;li&gt;Uncheck show-hidden&lt;/li&gt;
&lt;li&gt;Close Nautilus and open again&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Crayon Syntax Highlighter</title>
        <published>2014-10-26T06:36:05+00:00</published>
        <updated>2014-10-26T06:36:05+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/crayon-syntax-highlighter/"/>
        <id>https://martinthetallguy.com/blog/crayon-syntax-highlighter/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/crayon-syntax-highlighter/">&lt;p&gt;I have just installed the &lt;a rel=&quot;external&quot; title=&quot;Crayon Syntax Highlighter&quot; href=&quot;https://wordpress.org/plugins/crayon-syntax-highlighter/&quot;&gt;Crayon Syntax Highlighter&lt;/a&gt; plugin on this blog. Obviously a lot of the posts that I put here contain code snippets, so this great plugin will make that a little neater with feauters such as line numbers toggle, syntax highlight, copy into clipboard and many more. Over time I hope to update the existing content on the site to make use of the plugin.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Transpose rows to columns using awk</title>
        <published>2014-10-18T15:50:47+00:00</published>
        <updated>2014-10-18T15:50:47+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/transpose-rows-to-columns-using-awk/"/>
        <id>https://martinthetallguy.com/blog/transpose-rows-to-columns-using-awk/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/transpose-rows-to-columns-using-awk/">&lt;p&gt;In this post we look at how text data can be transposed in a shell script. Suppose you have a comma-delimited text file (csv) which looks like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-01,Reading1,20.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-01,Reading2,21.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-01,Reading3,24.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-01,Reading4,22.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-02,Reading1,20.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-02,Reading2,21.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-02,Reading3,24.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-02,Reading4,22.4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-03,Reading1,20.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-03,Reading2,21.7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-03,Reading3,24.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-03,Reading4,22.5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;…and so on. Perhaps this is a set of sensor readings over a period of time, and in this case there are four readings per day. For further analysis it might be more suitable to store each date on a single line with the four readings as columns. In other words we want to transpose rows to columns, i.e. pivot the values on date. The file should look like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-01,20.3,21.5,24.0,22.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-02,20.5,21.5,24.2,22.4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2014-10-03,20.5,21.7,24.1,22.5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since this needs to process multiple input rows of to produce one output row, sed will not be suitable. Instead we need to use awk. The following tiny script will do the trick.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; awk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;F,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;{val = val &amp;quot;,&amp;quot; $3; if( NR % 4 == 0 ) { print $1 val; val = &amp;quot;&amp;quot; } }&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, what exactly is this doing? First, we need to specify that the file is comma delimited, which is what &lt;code&gt;-F,&lt;/code&gt; does. Next, the main principle is that the code stored between the curly brackets will be executed individually for each row, however a session (including variables) is maintained throughout the execution of entire input. So &lt;code&gt;val&lt;/code&gt; is a variable into which we are storing the third field on each row (&lt;code&gt;$3&lt;/code&gt;) prepended by a comma. The if statement checks whether the row number (&lt;code&gt;NR&lt;/code&gt; is a special built in variable which holds the number of the row being currently processed) is divisible by four (&lt;code&gt;%&lt;/code&gt; is the modulo function, as in most languages). If yes, we print the date which is the first column (&lt;code&gt;$1&lt;/code&gt;) as well as the &lt;code&gt;val&lt;/code&gt; variable which now has the values from the previous three rows as well as this one, separated by commas. The variable is then reset.&lt;/p&gt;
&lt;p&gt;Obviously, we are making an assumption here that the data is uniform, i.e. that there are exactly four readings available for each day; otherwise the script would be a little more complex.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Tar gotcha: extract from multiple tar files in one go</title>
        <published>2014-10-18T07:48:47+00:00</published>
        <updated>2014-10-18T07:48:47+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/tar-gotcha-extract-from-multiple-tar-files-in-one-go/"/>
        <id>https://martinthetallguy.com/blog/tar-gotcha-extract-from-multiple-tar-files-in-one-go/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/tar-gotcha-extract-from-multiple-tar-files-in-one-go/">&lt;p&gt;Suppose you have a monthly process to archive some data such as log files etc. Each month a separate archive file is created, and so after a few months you will have several archive files - for example as shown below:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;archive.2014-08.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;archive.2014-09.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;archive.2014.10.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now if you wish to extract your data from all three files, you could run individual commands such as:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;zxvf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive.2014-08.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;zxvf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive.2014-09.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;zxvf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive.2014-10.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This works fine. However the following won’t work if you want a one-line which does them all in one short:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;xzvf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;tar:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive.2014-09.tar.gz:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Not&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; found&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;tar:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive.2014-10.tar.gz:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Not&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; found&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; archive&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Basically the way that tar command works, if more than one filename (or an expansion) is passed as an argument, it will look for the second, third, etc. files inside the first file. So the error is saying it cannot find the second and third archive file inside the first one (archive.2014-08.tar.gz). So in essence the tar command itself really does have to be called individually for each file. The way to simplify this on a one-liner is to use the xargs command which will do exactly that:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;.tar.gz&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;n1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;xzvf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fingerprint authentication in Ubuntu</title>
        <published>2013-10-25T04:56:10+00:00</published>
        <updated>2013-10-25T04:56:10+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/fingerprint-authentication-in-ubuntu/"/>
        <id>https://martinthetallguy.com/blog/fingerprint-authentication-in-ubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/fingerprint-authentication-in-ubuntu/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://launchpad.net/~fingerprint/+archive/fprint&quot;&gt;FPrint&lt;/a&gt; is a PPA with packages for fingerprint-based authentication. Website includes good documentation on how to install and set it up.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Remove old kernels and free up space in /boot partition</title>
        <published>2013-10-16T08:39:04+00:00</published>
        <updated>2013-10-16T08:39:04+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/remove-old-kernels-and-free-up-space-in-boot-partition/"/>
        <id>https://martinthetallguy.com/blog/remove-old-kernels-and-free-up-space-in-boot-partition/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/remove-old-kernels-and-free-up-space-in-boot-partition/">&lt;p&gt;This is a great one-liner which removes old kernel images and frees up space in your boot partition:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; purge&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;dpkg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; linux-{image,headers}-&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;[0-9]*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; awk&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;/ii/{print $2}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;ve&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;uname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;s/-[a-z]+//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This comes from the top answer to a question on &lt;a rel=&quot;external&quot; href=&quot;http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot&quot;&gt;ask ubuntu&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Reorder accounts in Thunderbird</title>
        <published>2013-09-20T05:15:23+00:00</published>
        <updated>2013-09-20T05:15:23+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/reorder-accounts-in-thunderbird/"/>
        <id>https://martinthetallguy.com/blog/reorder-accounts-in-thunderbird/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/reorder-accounts-in-thunderbird/">&lt;p&gt;Here’s an &lt;a rel=&quot;external&quot; href=&quot;http://advancingsf.blogspot.ae/2006/11/reorder-accounts-in-thunderbird.html&quot;&gt;article on Lego’s Land&lt;/a&gt; on how to reorder accounts in the left pane of Thunderbird.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Command line on Nokia N900</title>
        <published>2012-08-16T13:39:34+00:00</published>
        <updated>2012-08-16T13:39:34+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/command-line-on-nokia-n900/"/>
        <id>https://martinthetallguy.com/blog/command-line-on-nokia-n900/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/command-line-on-nokia-n900/">&lt;p&gt;The Nokia N900 is getting a little old now, but it still an amazing piece of kit. This post has a few pointers for making the most out of command line usage it enables.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://maemo.org/downloads/product/Maemo5/desktop-cmd-exec/&quot;&gt;Command Line Execution Widget&lt;/a&gt;: This widget lets you run commands from the desktop and outputs the results..&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://maemo.org/downloads/product/Maemo5/cmd-shortcuts/&quot;&gt;Cmd Shortcuts&lt;/a&gt;: Allows you to quickly run your own defined commands.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://maemo.org/downloads/product/Maemo5/gpodder/&quot;&gt;gPodder&lt;/a&gt;: This excellent podcast catcher comes with a command line interface. Run &lt;code&gt;gpo&lt;/code&gt; from the terminal to get the full list of options.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://maemo.org/downloads/product/Maemo5/feedingit/&quot;&gt;FeedingIt&lt;/a&gt;: This RSS aggregator can be run from the command line. The known options are &lt;code&gt;/usr/bin/FeedingIt update&lt;/code&gt; and &lt;code&gt;/usr/bin/FeedingIt status&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://maemo.org/packages/view/alarmed/&quot;&gt;Alarmed&lt;/a&gt;: This is a graphical interface to the cron scheduler. Apart from neat access to phone functionality (e.g. switching profiles, networking, and yes alarms) it also allows arbitrary shell commands to be scheduled. This is particularly useful with the gPodder and FeedingIt mentioned above. To use this tool you currently need to enable &lt;a rel=&quot;external&quot; href=&quot;http://wiki.maemo.org/Extras-testing&quot;&gt;the testing repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Read and edit JPEG Exif data from command line</title>
        <published>2012-08-11T05:41:47+00:00</published>
        <updated>2012-08-11T05:41:47+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/read-and-edit-jpeg-exif-data-from-command-line/"/>
        <id>https://martinthetallguy.com/blog/read-and-edit-jpeg-exif-data-from-command-line/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/read-and-edit-jpeg-exif-data-from-command-line/">&lt;p&gt;Most digital cameras store &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Exif&quot;&gt;Exif data&lt;/a&gt; in the JPEG photo files. This includes things like date and time, camera model and camera settings and in some cases even GPS coordinates. &lt;a rel=&quot;external&quot; href=&quot;http://www.sentex.net/~mwandel/jhead/&quot;&gt;jhead&lt;/a&gt; is a very useful command line utility which can read and edit the Exif data. For example, you may wish to remove the data from photos published online.&lt;/p&gt;
&lt;p&gt;Another useful thing is to rename photos using the date and time information stored in Exif (note: read the &lt;a rel=&quot;external&quot; href=&quot;http://www.sentex.net/~mwandel/jhead/usage.html&quot;&gt;documentation&lt;/a&gt; before running):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; jhead&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;n%Y%m%d-%H%M%S&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;.jpg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And best of all jhead is in the &lt;a rel=&quot;external&quot; href=&quot;http://packages.ubuntu.com/search?keywords=jhead&amp;amp;searchon=names&amp;amp;section=all&quot;&gt;Ubuntu universe repository,&lt;/a&gt; so installing it is as simple as:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; jhead&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Open Data Sets</title>
        <published>2012-04-20T03:21:43+00:00</published>
        <updated>2012-04-20T03:21:43+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/open-data-sets/"/>
        <id>https://martinthetallguy.com/blog/open-data-sets/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/open-data-sets/">&lt;p&gt;If you are evaluating reporting or analytics tools, or just like to mess about with them, it’s always good to get your hands on some “real world” data sets. It sure beats using the Steel Wheels, Classic Models, eFashion etc. sample databases typically shipped with the products.&lt;/p&gt;
&lt;p&gt;For a truly comprehensive list of free data sets, check out &lt;a rel=&quot;external&quot; href=&quot;http://www.quora.com/Data/Where-can-I-get-large-datasets-open-to-the-public?redirected_qid=195775&quot;&gt;this page on Quora&lt;/a&gt;. Below are some of my favourites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.data.gov/&quot;&gt;Data.gov&lt;/a&gt; (US Federal Government data)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://thedatahub.org/&quot;&gt;the Data Hub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://getthedata.org/&quot;&gt;Get the Data&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://qualitywebdata.org/&quot;&gt;Quality Web Data&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following sites are also worth following on a more ongoing basis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.guardian.co.uk/news/datablog&quot;&gt;Datablog&lt;/a&gt; on the Guardian&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.reddit.com/r/opendata/&quot;&gt;/r/opendata&lt;/a&gt; on Reddit&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Install Oracle XE on Ubuntu</title>
        <published>2012-02-04T11:21:13+00:00</published>
        <updated>2012-02-04T11:21:13+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/install-oracle-xe-on-ubuntu/"/>
        <id>https://martinthetallguy.com/blog/install-oracle-xe-on-ubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/install-oracle-xe-on-ubuntu/">&lt;p&gt;Steps to install Oracle Express Edition (XE) database 10g on Ubuntu 11.10 (Oneiric).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html&quot;&gt;Download&lt;/a&gt; the Oracle XE deb package (free registration is required).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Double click the downloaded file and select to install it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In terminal run &lt;code&gt;sudo /etc/init.d/oracle-xe configure&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will be prompted to enter the following parameters: HTTP port number, database listener port number, SYSTEM and SYS database accounts password and whether the service should be started upon boot.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Thereafter the configuration might take a few minutes. That’s it. To start the service in the future run &lt;code&gt;sudo /etc/init.d/oracle-xe start&lt;/code&gt; and to stop &lt;code&gt;sudo /etc/init.d/oracle-xe stop&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Column-wise text manipulation</title>
        <published>2011-10-17T17:02:14+00:00</published>
        <updated>2011-10-17T17:02:14+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/column-wise-text-manipulation/"/>
        <id>https://martinthetallguy.com/blog/column-wise-text-manipulation/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/column-wise-text-manipulation/">&lt;p&gt;GNU/Linux includes many utilities for working with text files through the shell. In this post we take a quick look at accessing and manipulating text files in a “column-wise” mode.&lt;/p&gt;
&lt;p&gt;Suppose you have the following two files, each with two columns separated by the TAB character.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Alice&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;   Paris&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Bob&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;     Tokyo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Mary&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    London&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;John&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    New&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; York&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; May&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Orange&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Oct&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Blue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Nov&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Feb&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Red&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The data in the two files are in fact related, i.e. file2 contains the date of birth and favourite colour of the people mentioned in file1 (assuming also that the files are sorted correctly). It would make sense to combine the two files together so that each row has the full data for each person. The &lt;code&gt;paste&lt;/code&gt; command does just that.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; paste&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Alice&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;   Paris&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;     13&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; May&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Orange&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Bob&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;     Tokyo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;     19&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Oct&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Blue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Mary&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    London&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    11&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Nov&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;John&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    New&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; York&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  29&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Feb&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Red&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Suppose that we are only interested in the name and date of birth of each person, and we can discard the hometown and favourite colour information. The &lt;code&gt;cut&lt;/code&gt; command is what we shall use:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 1,3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Alice&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;   13&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; May&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Bob&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;     19&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Oct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;Mary&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    11&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Nov&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;John&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;    29&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Feb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Our next and final requirement is to reorder the columns differently. Instead of having the name followed by date of birth, suppose we want to have the columns the other way round. Unfortunately &lt;code&gt;cat -f 3,1&lt;/code&gt; produces exactly the same output as &lt;code&gt;cut -f 1,3&lt;/code&gt;, so the &lt;code&gt;cut&lt;/code&gt; command will not be sufficient. We have to use &lt;code&gt;sed&lt;/code&gt; instead.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;s/\([^\t]*\)\t\([^\t]*\)/\2\t\1/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; May&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Alice&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Oct&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Bob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Nov&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    Mary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Feb&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    John&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How does that work? Well &lt;code&gt;\([^\t]*\)&lt;/code&gt; is a “named expression” which matches all characters except TAB. The search pattern looks for two of them, separated by TAB (&lt;code&gt;\t&lt;/code&gt;). In the replace-with part, they are referred to as &lt;code&gt;\2&lt;/code&gt; and &lt;code&gt;\1&lt;/code&gt;, again separated by &lt;code&gt;\t&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Of course if file5 was what we ultimately wanted from the beginning as our output, we could have simply piped commands together:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; paste&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 1,3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;s/\([^\t]*\)\t\([^\t]*\)/\2\t\1/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or alternatively&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; paste&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;s/\([^\t]*\)\t\([^\t]*\)\t\([^\t]*\)\t\([^\t]*\)/\3\t\1/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; file5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Remove HTML tags with sed</title>
        <published>2011-10-17T12:16:13+00:00</published>
        <updated>2011-10-17T12:16:13+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/remove-html-tags-with-sed/"/>
        <id>https://martinthetallguy.com/blog/remove-html-tags-with-sed/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/remove-html-tags-with-sed/">&lt;p&gt;Sed can be used to strip out all HTML or XML tags from a file and get the plain text version. Suppose you have file gnulinux.html with the following contents:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;The combination of &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;“/gnu/linux-and-gnu.html“&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;GNU and Linux&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; is the &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;strong&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;GNU/Linux operating system&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;strong&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;, now used by millions and sometimes incorrectly called simply “Linux“.&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tempting but incorrect - sed finds the longest possible match which in this case is the entire file, and thus will output nothing:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;s/&amp;lt;.*&amp;gt;//g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gnulinux.html&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Correct version:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;s/&amp;lt;[^&amp;gt;]*&amp;gt;//g&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gnulinux.html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;The&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; combination&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; GNU&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Linux&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; is&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; GNU/Linux&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; operating&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; system,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; now&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; used&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; by&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; millions&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sometimes&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; incorrectly&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; called&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; simply&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; “Linux“.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>TrueCrypt tray icon in Unity</title>
        <published>2011-08-16T02:16:35+00:00</published>
        <updated>2011-08-16T02:16:35+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/truecrypt-tray-icon-in-unity/"/>
        <id>https://martinthetallguy.com/blog/truecrypt-tray-icon-in-unity/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/truecrypt-tray-icon-in-unity/">&lt;p&gt;If you use &lt;a rel=&quot;external&quot; href=&quot;http://www.truecrypt.org/&quot;&gt;TrueCrypt&lt;/a&gt; under Ubuntu 11.04 Natty you would have noticed an annoying behaviour. Under previous versions an icon is present in the system tray which remains there whilst a volume is mounted even if the TrueCrypt window is closed. Under Unity the tray icon is not shown. If you accidentally close the window (instead of minimizing it), there’s no easy way of getting back to it. Launching TrueCrypt again results in a error message.&lt;/p&gt;
&lt;p&gt;The fix as suggested on &lt;a rel=&quot;external&quot; href=&quot;http://www.shocm.com/2011/06/getting-some-functionality-back-in-the-system-tray-on-ubuntu-11-04/&quot;&gt;shocm.com&lt;/a&gt; is to set the systray-whitelist property by running the following through command line (you will need to restart afterwards):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gsettings set com.canonical.Unity.Panel systray-whitelist &quot;[&#39;all&#39;]&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;However, your mileage may vary, and on my netbook this did not fix the issue. It seemed like the icon was placed in the tray, but it was rendered as a very thin strip about 1-2 pixels wide which could not be clicked.&lt;/p&gt;
&lt;p&gt;The only way I found of getting out of missing window scenario was to resort to &lt;a rel=&quot;external&quot; href=&quot;http://www.truecrypt.org/docs/?s=command-line-usage&quot;&gt;using TrueCrypt through the command line&lt;/a&gt; to dismount all mounted volumes.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;truecrypt /d&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will also exist TrueCrypt and afterwards it can be launched as usual.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Script to get Report Viewer servlet mapping</title>
        <published>2011-08-11T02:32:27+00:00</published>
        <updated>2011-08-11T02:32:27+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/script-to-get-report-viewer-servlet-mapping/"/>
        <id>https://martinthetallguy.com/blog/script-to-get-report-viewer-servlet-mapping/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/script-to-get-report-viewer-servlet-mapping/">&lt;p&gt;Sometimes it may be useful to know inside the report which &lt;a rel=&quot;external&quot; href=&quot;http://www.eclipse.org/birt/phoenix/deploy/viewerUsage2.2.php#servlets&quot;&gt;servlet mapping&lt;/a&gt; is used to run the report (e.g. frameset, run, preview).&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; sMapping&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getHttpServletRequest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getRequestURI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; nPos&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; sMapping&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; sMapping&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; nPos&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can place the above code inside a label to see the servlet mapping.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>BIRT 3.7 Released</title>
        <published>2011-06-28T14:03:48+00:00</published>
        <updated>2011-06-28T14:03:48+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/birt-3-7-released/"/>
        <id>https://martinthetallguy.com/blog/birt-3-7-released/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/birt-3-7-released/">&lt;p&gt;BIRT 3.7, previously codenamed Indigo, was released on June 22. Here are the necessary links to find out more about this latest version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.eclipse.org/birt/phoenix/project/notable3.7.php&quot;&gt;New and Notable for BIRT 3.7 Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://download.eclipse.org/birt/downloads/build.php?build=R-R1-3_7_0-201106151818&quot;&gt;BIRT 3.7.0 Download Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://wiki.eclipse.org/BIRT_Project_Plan&quot;&gt;BIRT Project Plan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Generic code to get BIRT report parameters dynamically (new and improved!)</title>
        <published>2011-06-09T16:57:31+00:00</published>
        <updated>2011-06-09T16:57:31+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically-new-and-improved/"/>
        <id>https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically-new-and-improved/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically-new-and-improved/">&lt;p&gt;In an &lt;a href=&quot;https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically/&quot; title=&quot;Generic code to get BIRT report parameters dynamically&quot;&gt;earlier post&lt;/a&gt; we discussed a generic way to dynamically get the list of report parameters at run time without having to hardcode the parameter names in the script. As was correctly pointed out in the comments, the code did not work for parameter groups (and also cascading parameters). However, it is possible to modify the code to get it working even for those cases, and the change is not a huge one.&lt;/p&gt;
&lt;p&gt;The main difference is we will use the method &lt;a rel=&quot;external&quot; href=&quot;http://www.birt-exchange.com/be/documentation/BIRT_231/EngineJavadoc/model/api/org/eclipse/birt/report/model/api/ModuleHandle.html#getAllParameters%28%29&quot;&gt;getAllParameters()&lt;/a&gt; instead of &lt;a rel=&quot;external&quot; href=&quot;http://www.birt-exchange.com/be/documentation/BIRT_231/EngineJavadoc/model/api/org/eclipse/birt/report/model/api/ModuleHandle.html#getParameters%28%29&quot;&gt;getParameters()&lt;/a&gt; of &lt;a rel=&quot;external&quot; href=&quot;http://www.birt-exchange.com/be/documentation/BIRT_231/EngineJavadoc/model/api/org/eclipse/birt/report/model/api/ReportDesignHandle.html&quot;&gt;ReportDesignHandle&lt;/a&gt;. It seems that getParameters returns only the “top level” parameters, whereas getAllParameters flattens the groups and the nested as well as top level parameters. One thing to watch out for is that the return types of the two functions are different: &lt;a rel=&quot;external&quot; href=&quot;http://download.oracle.com/javase/1.5.0/docs/api/java/util/List.html&quot;&gt;java.util.List&lt;/a&gt; (getAllParameters) vs. &lt;a rel=&quot;external&quot; href=&quot;http://www.birt-exchange.com/be/documentation/BIRT_231/EngineJavadoc/model/api/org/eclipse/birt/report/model/api/SlotHandle.html&quot;&gt;org.eclipse.birt.report.model.api.SlotHandle&lt;/a&gt; (getParameters). Also, we have included a check for the class of the parameter entry in the list, in order to exclude the groups themselves. You can comment out the if statement in case you wish to see the group names as well.&lt;/p&gt;
&lt;p&gt;Here is the updated working code:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; sOutput&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getDesignHandle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getAllParameters&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; parameterCount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;size&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt; parameterCount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;++&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; sParClass&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getClass&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;toString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sParClass&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;class org.eclipse.birt.report.model.api.ScalarParameterHandle&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sParName&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getFullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sParVal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getParameterValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sParName&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sOutput&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; sOutput&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; sParName&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; sParVal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; sOutput&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Working with the Palette in BIRT charts, Part 1</title>
        <published>2011-06-03T14:31:45+00:00</published>
        <updated>2011-06-03T14:31:45+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/working-with-the-palette-in-birt-charts-part-1/"/>
        <id>https://martinthetallguy.com/blog/working-with-the-palette-in-birt-charts-part-1/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/working-with-the-palette-in-birt-charts-part-1/">&lt;p&gt;&lt;img src=&quot;/uploads/2011/06/Screenshot-New-Chart-.png&quot; alt=&quot;Format Chart tab of the Edit Chart wizard&quot; /&gt;On this blog we have often talked about overriding the default behaviour of the BIRT chart palette by dynamically setting colours based on data values. However, it is perhaps worth looking in more detail at the palette itself to understand the default behaviour and appreciate how it can be tweaked.&lt;/p&gt;
&lt;p&gt;Each chart has a palette. The palette determines the colours used for drawing the series in the chart. From the UI perspective, the palette options are accessed on the last tab of the Edit Chart dialog (Format Chart), the first selection in the tree on left-hand-side (Series). It is worth noting that a chart only has one palette, even if the chart contains multiple series.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2011/06/Screenshot-Series-Palette-.png&quot; alt=&quot;BIRT chart series palette&quot; /&gt;By default there are 32 entries in the palette. They are used in the chart from top to bottom, i.e. in the default scenario the first category will be coloured blue, the next one red and so on. The Add and Remove buttons in the Series Palette dialog can be used to change the number of entries. What happens when the chart contains more categories than the list of palette entries? The answer is that the palette will wrap around, i.e. the 33rd category will be coloured in the same way as the first one. If the number of categories is known in advance, one can extend the palette using the Add button to create the necessary number of palette entries. (Naturally, one should question the design of such a chart, will the user really be able to extract any meaning from a chart with 32 or more different colours? In most cases, probably not.)&lt;/p&gt;
&lt;p&gt;Each palette entry itself can be edited. Not only is it possible to set one of the predefined colours, on&lt;img src=&quot;/uploads/2011/06/Screenshot-Palette-Options.png&quot; alt=&quot;BIRT chart palette editing a palette entry&quot; /&gt;e can also set a custom colour, a linear gradient based on two colours or even an image file. It is also possible to specify different colour for positive and negative values.&lt;/p&gt;
&lt;p&gt;As we already mentioned, the palette colours are applied top to bottom without any further logic, in particular they are not tied to the actual data point values themselves. Several common scenarios and scripting approaches for solving the issue have already been discussed on this blog: &lt;a href=&quot;https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically/&quot; title=&quot;Setting BIRT chart series palette dynamically&quot;&gt;Setting BIRT chart series palette dynamically&lt;/a&gt;, &lt;a href=&quot;https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-2-area-charts/&quot; title=&quot;Setting BIRT chart series palette dynamically, part 2 – area charts&quot;&gt;Setting BIRT chart series palette dynamically, part 2 – area charts&lt;/a&gt;, &lt;a href=&quot;https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-3/&quot; title=&quot;Setting BIRT chart series palette dynamically, part 3 – stacked bar charts&quot;&gt;Setting BIRT chart series palette dynamically, part 3 – stacked bar charts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the second part of this article we will look at how the palette and related objects can be manipulated programmatically, i.e. through scripting.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Removing description from Firefox bookmarks</title>
        <published>2011-04-18T12:59:14+00:00</published>
        <updated>2011-04-18T12:59:14+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/removing-description-from-firefox-bookmarks/"/>
        <id>https://martinthetallguy.com/blog/removing-description-from-firefox-bookmarks/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/removing-description-from-firefox-bookmarks/">&lt;p&gt;&lt;img src=&quot;/uploads/2011/04/firefox_bookmark_description.png&quot; alt=&quot;Description in a Firefox Bookmark&quot; /&gt;&lt;/p&gt;
&lt;p&gt;By default Firefox populates the Description field of a bookmark with the content of the page’s &lt;code&gt;&amp;lt;meta name=&quot;Description&quot; content=&quot;...&quot; /&amp;gt;&lt;/code&gt; tag. I find is a little annoying and was looking for a way to remove these descriptions.&lt;/p&gt;
&lt;p&gt;Since I have a lot of bookmarks I wanted to clean them all up in one go rather than editing them one by one. Luckily there is an easy way to do this since Firefox stores the bookmarks in an &lt;a rel=&quot;external&quot; href=&quot;https://secure.wikimedia.org/wikipedia/en/wiki/Sqlite&quot;&gt;SQLite&lt;/a&gt; database file which can be opened and manipulated.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install SQLite Database Browser (Ubuntu: &lt;code&gt;sudo apt-get install sqlitebrowser&lt;/code&gt; Windows: &lt;a rel=&quot;external&quot; href=&quot;http://sourceforge.net/projects/sqlitebrowser&quot;&gt;download&lt;/a&gt; and install from SourceForge).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IMPORTANT!&lt;/strong&gt; Export your Firefox bookmarks to have a backup in case something goes wrong.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Close Firefox (you can’t edit the bookmarks file while Firefox is running).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run SQLite Database Browser and open the places.sqlite file which is located in your &lt;a rel=&quot;external&quot; href=&quot;http://kb.mozillazine.org/Profile_folder&quot;&gt;profile folder&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following SQL which will remove the description from &lt;strong&gt;all bookmarks&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; from&lt;/span&gt;&lt;span&gt; moz_items_annos &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;where&lt;/span&gt;&lt;span&gt; anno_attribute_id &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save and close, run Firefox.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reference on the places.sqlite file can be found on &lt;a rel=&quot;external&quot; href=&quot;http://kb.mozillazine.org/Places.sqlite&quot;&gt;mozillaZine&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://developer.mozilla.org/en/The_Places_database&quot;&gt;Mozilla Developer Network&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Remove Mono from Ubuntu</title>
        <published>2010-12-29T00:49:49+00:00</published>
        <updated>2010-12-29T00:49:49+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/remove-mono-from-ubuntu/"/>
        <id>https://martinthetallguy.com/blog/remove-mono-from-ubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/remove-mono-from-ubuntu/">&lt;p&gt;After finally getting some time to fully read up on &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Mono_%28software%29&quot;&gt;Mono&lt;/a&gt; (especially on the excellent &lt;a rel=&quot;external&quot; href=&quot;http://www.the-source.com/tag/mono/&quot;&gt;The Source&lt;/a&gt;) I have decided it is best to remove it from my system. The Open Sourcerer has a nicely written up set of instructions for &lt;a rel=&quot;external&quot; href=&quot;http://www.theopensourcerer.com/2010/04/29/how-to-remove-mono-from-ubuntu-10-04-lucid-lynx/&quot;&gt;10.04 Lucid Lynx&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http://www.theopensourcerer.com/2010/10/10/how-to-remove-mono-from-ubuntu-10-10-maverick-meercat/&quot;&gt;10.10 Maverick Meerkat&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Open source BI: BIRT vs Jasper vs Pentaho</title>
        <published>2010-12-29T00:33:58+00:00</published>
        <updated>2010-12-29T00:33:58+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/open-source-bi-birt-vs-jasper-vs-pentaho/"/>
        <id>https://martinthetallguy.com/blog/open-source-bi-birt-vs-jasper-vs-pentaho/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/open-source-bi-birt-vs-jasper-vs-pentaho/">&lt;p&gt;In case you missed these, &lt;a rel=&quot;external&quot; href=&quot;http://www.innoventsolutions.com&quot;&gt;Innovent Solutions&lt;/a&gt; (one of the &lt;a rel=&quot;external&quot; href=&quot;http://www.eclipse.org/birt/phoenix/project/pmc.php#pmc&quot;&gt;corporate backers&lt;/a&gt; of Eclipse BIRT project) published papers comparing &lt;a rel=&quot;external&quot; href=&quot;http://jasperforge.org/&quot;&gt;Jasper&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http://www.pentaho.org/&quot;&gt;Pentaho&lt;/a&gt; to &lt;a rel=&quot;external&quot; href=&quot;http://www.eclipse.org/birt/phoenix/&quot;&gt;BIRT&lt;/a&gt;. Naturally, they conclude that BIRT is top of the pile in open source reporting, however they do justify this conclusion and the papers make an interesting read.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.innoventsolutions.com/birt-vs-jasper.html&quot;&gt;BIRT versus Jasper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.innoventsolutions.com/birt-vs-pentaho.html&quot;&gt;BIRT versus Pentaho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.innoventsolutions.com/birt-jasper-pentaho-comparison-matrix.html&quot;&gt;OSS Reporting Comparison Matrix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Generic code to get BIRT report parameters dynamically</title>
        <published>2010-11-18T14:42:00+00:00</published>
        <updated>2010-11-18T14:42:00+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically/"/>
        <id>https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically/">&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; For an improved version of the code which works correctly with parameter groups and cascading parameters please see &lt;a href=&quot;https://martinthetallguy.com/blog/generic-code-to-get-birt-report-parameters-dynamically-new-and-improved/&quot; title=&quot;Generic code to get BIRT report parameters dynamically (new and improved!)&quot;&gt;this updated post&lt;/a&gt;. Thank you to Stork for pointing out the problem with this code.&lt;/p&gt;
&lt;p&gt;The traditional way of accessing BIRT report parameters from script is through the expression &lt;a rel=&quot;external&quot; href=&quot;http://www.birt-exchange.com/be/documentation/BIRT_231/EngineJavadoc/enginescript/api/org/eclipse/birt/report/engine/api/script/IReportContext.html#getParameterValue%28java.lang.String%29&quot;&gt;ReportContext.getParameterValue( parameterName )&lt;/a&gt;. Naturally this method requires one to know the name of the parameter at design time (i.e. when writing the script), which is fine in most cases.&lt;/p&gt;
&lt;p&gt;There are however situations in which a more generic approach is preferable. For example, one might wish to implement a usage statistics system, where each time a report is run certain information is persisted in a usage tracking database. This will include the name of the report, the time of execution and perhaps also the selected parameter values. The obvious difficulty is that different reports are likely to have different sets of parameters. In anything but the simplest and smallest set of reports, it would be impractical to edit the code individually for each report. On the contrary, the appropriate approach is to create a generic library component which can be maintained in one place and referenced from the reports.&lt;/p&gt;
&lt;p&gt;The code below is a simple demonstration how the list of parameters and their values can be read dynamically at run-time. To see it working, simply paste it into the onPrepare method of a text element.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; sOutput&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getDesignHandle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getParameters&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; paramaterCount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getCount&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt; paramaterCount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;++&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; sParName&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; parameterArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getFullName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; sParVal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getParameterValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sParName&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  sOutput&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; sOutput&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; sParName&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; sParVal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; sOutput&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Retrieve BIRT report name in script</title>
        <published>2010-11-18T14:33:02+00:00</published>
        <updated>2010-11-18T14:33:02+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/retrieve-birt-report-name-in-script/"/>
        <id>https://martinthetallguy.com/blog/retrieve-birt-report-name-in-script/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/retrieve-birt-report-name-in-script/">&lt;p&gt;The following expression will dynamically get the file name of the report:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;reportContext.getReportRunnable().getReportName();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Two points to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The expression actually returns the full report URI rather than just the name, i.e. something like &lt;code&gt;file:/C:/BIRT/Report01.rptdesign&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The URI is &lt;a rel=&quot;external&quot; href=&quot;https://secure.wikimedia.org/wikipedia/en/wiki/Percent-encoding&quot;&gt;percent-encoded&lt;/a&gt; and so space characters will be returned as %20 and so on for other special characters, e.g. &lt;code&gt;file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%205.5/webapps/birt-viewer/Report01.rptdesign&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Remove empty lines from file</title>
        <published>2010-09-22T16:50:07+00:00</published>
        <updated>2010-09-22T16:50:07+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/remove-empty-lines-from-file/"/>
        <id>https://martinthetallguy.com/blog/remove-empty-lines-from-file/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/remove-empty-lines-from-file/">&lt;p&gt;Here’s a quick way to remove empty lines from a file using the Linux command line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cat file1 | sed /^$/d &amp;gt; file2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Where file1 is the input file containing empty lines and file2 is a newly created file with empty lines removed.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting BIRT chart series palette dynamically, part 3 – stacked bar charts</title>
        <published>2010-09-09T13:09:49+00:00</published>
        <updated>2010-09-09T13:09:49+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-3/"/>
        <id>https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-3/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-3/">&lt;p&gt;In what is rapidly becoming a mini-series, we have so far discussed how to set BIRT chart palette dynamically (based on category values) for &lt;a href=&quot;https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically/&quot;&gt;pie charts&lt;/a&gt; and &lt;a href=&quot;https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-2-area-charts/&quot;&gt;area charts&lt;/a&gt;. Today we cover stacked bar charts, i.e. bar charts with the Optional Grouping data element.&lt;/p&gt;
&lt;p&gt;Once again, let’s start with a quick recap. In what is a fairly common scenario, one chooses the palette colours to match with particular category values. For example, in the chart below “High” is represented in green, “Mid” in orange and “Low” in red.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/09/barchart_01.png&quot; alt=&quot;Stacked bar chart with carefully selected=&quot; title=&quot;Stacked bar chart&quot; /&gt;&lt;/p&gt;
&lt;p&gt;However, if for a particular dataset one of the of category values is not present, the palette colours are still used in the same order, meaning the “Mid” area is now shown as red and “High” as orange. This is confusing for the end user:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/09/barchart_02.png&quot; alt=&quot;Stacked bar chart with only two categories, palette colours are confusing&quot; title=&quot;Stacked bar chart&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As in the previous examples, we solve this problem by adding a little bit of script to override the chart’s default behaviour.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawDataPoint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; dph&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; fill&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; dph&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesDisplayValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; set( R, G, B, alpha )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1-Low&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 242&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 88&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 106&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;2-Mid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 232&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 172&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 57&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;3-High&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We also need to override the &lt;code&gt;beforeDrawLegendItem&lt;/code&gt; method, so that colours in the legend match the chart colours.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawLegendItem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; lerh&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; bounds&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; lerh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getCaption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; fill&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; lerh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getFill&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; set( R, G, B, alpha )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1-Low&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 242&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 88&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 106&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;2-Mid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 232&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 172&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 57&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;3-High&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The palette colours are now assigned dynamically based on actual category values. The rendered chart looks as shown below, independent of the colours selected in Chart Wizard and their order.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/09/barchart_03.png&quot; alt=&quot;Stacked bar chart with two categories and dynamically assigned palette colours&quot; title=&quot;Stacked bar chart&quot; /&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Selectively hiding series labels in BIRT area chart</title>
        <published>2010-09-09T12:43:49+00:00</published>
        <updated>2010-09-09T12:43:49+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/selectively-hiding-series-labels-in-birt-area-chart/"/>
        <id>https://martinthetallguy.com/blog/selectively-hiding-series-labels-in-birt-area-chart/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/selectively-hiding-series-labels-in-birt-area-chart/">&lt;p&gt;Series labels can be shown in BIRT area charts by opening the Chart Wizard and navigating to the Format Chart tab, then selecting Series &amp;gt; Value (Y) Series &amp;gt; Show Series Labels checkbox. The result will look as shown in the screenshot below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/09/arealabels_01.png&quot; alt=&quot;Area chart with series labels shown for all series (default)&quot; title=&quot;Area chart with series labels&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Often there is one particular grouping (series) which is especially important and we want to draw the report viewer’s attention to it by showing the labels for that series only. This cannot be achieved through the Chart Wizard UI but can be done with a bit of scripting.&lt;/p&gt;
&lt;p&gt;The method which needs to be overriden is beforeDrawSeries. In this example, series labels will be shown for the “1-Low” series and hidden for the other ones.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawSeries&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; series&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; isr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; get class of the renderer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getClass&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;toString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; check for area chart renderer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;class org.eclipse.birt.chart.render.Area&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesRenderingHints&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getDataPoints&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesDisplayValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1-Low&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      series&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setVisible&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; true&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      series&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setVisible&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; false&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The result looks as follows:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/09/arealabels_02.png&quot; alt=&quot;Area chart with series labels shown for one series only&quot; title=&quot;Area chart with series labels&quot; /&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to change SSH port number on Ubuntu server</title>
        <published>2010-09-03T08:56:48+00:00</published>
        <updated>2010-09-03T08:56:48+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/how-to-change-ssh-port-number-on-ubuntu-server/"/>
        <id>https://martinthetallguy.com/blog/how-to-change-ssh-port-number-on-ubuntu-server/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/how-to-change-ssh-port-number-on-ubuntu-server/">&lt;p&gt;Changing the port number of SSH daemon is a quick way of reducing the number of SSH brute force attacks your server might face (check the file &lt;code&gt;/var/log/auth.log&lt;/code&gt; to see if there are many failed SSH login attempts).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Just to be on the safe side, create a backup copy of the SSH daemon config file.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/ssh/sshd_config&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/ssh/sshd_config.vanilla&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the config file.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; vi&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/ssh/sshd_config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the port number on the following line, e.g. to 2201 or some other unused port. Make sure you note down the port number.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;ssh-config&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;Port&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 22&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the SSH daemon. You might get kicked out of your existing session.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/init.d/ssh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When you login next remember to include the correct port.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; youruser@yourserver&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 2201&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Disable Update Manager pop-up in Ubuntu</title>
        <published>2010-08-07T05:56:20+00:00</published>
        <updated>2010-08-07T05:56:20+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/disable-update-manager-pop-up-in-ubuntu/"/>
        <id>https://martinthetallguy.com/blog/disable-update-manager-pop-up-in-ubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/disable-update-manager-pop-up-in-ubuntu/">&lt;p&gt;Here’s how to disable the annoying Update Manager pop-up (technically a “pop-under”) and instead have the update icon displayed in the notification area.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hit Alt-F2 to open the “Run Application” dialog.&lt;/li&gt;
&lt;li&gt;Type in &lt;code&gt;gconf-editor&lt;/code&gt; to run the GNOME Configuration Editor.&lt;/li&gt;
&lt;li&gt;Navigate to Apps &amp;gt; Update Notifier.&lt;/li&gt;
&lt;li&gt;Untick the &lt;code&gt;auto_launch&lt;/code&gt; checkbox.&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Thunderbird: Notifications and Indicator Applet in Ubuntu Lucid</title>
        <published>2010-08-05T14:59:53+00:00</published>
        <updated>2010-08-05T14:59:53+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/thunderbird-notifications-and-indicator-applet-in-ubuntu-lucid/"/>
        <id>https://martinthetallguy.com/blog/thunderbird-notifications-and-indicator-applet-in-ubuntu-lucid/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/thunderbird-notifications-and-indicator-applet-in-ubuntu-lucid/">&lt;p&gt;This post is an update on integrating &lt;a rel=&quot;external&quot; href=&quot;http://www.mozillamessaging.com/thunderbird/&quot;&gt;Thunderbird&lt;/a&gt; with Ubuntu’s notification system. For Ubuntu 10.04 Lucid Lynx it supersedes my &lt;a href=&quot;https://martinthetallguy.com/blog/jaunty-notifications-in-thunderbird-and-firefox/&quot;&gt;earlier post on the topic&lt;/a&gt; which was applicable previous versions of Ubuntu (Jaunty and Karmic).&lt;/p&gt;
&lt;p&gt;The big difference in Lucid Lynx is the &lt;a rel=&quot;external&quot; href=&quot;https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators&quot;&gt;Indicator Applet&lt;/a&gt; and the “Me Menu”, both of these incorporating features related to the “social from the start” marketing tagline. In particular, the Indicator Applet integrates with &lt;a rel=&quot;external&quot; href=&quot;http://projects.gnome.org/evolution/&quot;&gt;Evolution&lt;/a&gt;, Ubuntu’s default mail client, to show new email notifications and allow quick access to the mail client. Once again, no out-of-the-box integration with Thunderbird. So the challenge is twofold: integrate with the notification mechanism (black pop-ups) as well as the Indicator Applet. The &lt;a rel=&quot;external&quot; href=&quot;http://www.nongnu.org/mailnotify/&quot;&gt;Mail Notification&lt;/a&gt; extension unfortunately falls short in the latter part.&lt;/p&gt;
&lt;p&gt;Luckily, Ruben Verweij has developed libnotify-mozilla, a Thunderbird extension which works just great for both of the above requirements. Be sure to check out the blog (&lt;a rel=&quot;external&quot; href=&quot;http://ubublogger.wordpress.com/libnotify-for-mozilla/&quot;&gt;here&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http://ubublogger.wordpress.com/tag/libnotify-mozilla/&quot;&gt;here&lt;/a&gt;) and the project’s &lt;a rel=&quot;external&quot; href=&quot;http://ubublogger.wordpress.com/libnotify-for-mozilla/&quot;&gt;Launchpad page&lt;/a&gt; to get the details and latest news. Here are the steps to set up the extension:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the &lt;a rel=&quot;external&quot; href=&quot;https://addons.mozilla.org/en-US/thunderbird/addon/11530/&quot;&gt;Mozilla Notifications Extensions&lt;/a&gt; .xpi file and save it in a temporary location on your system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Thunderbird and install the extension (Tools &amp;gt; Add-ons &amp;gt; Install).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable the native Thunderbird notifications by unticking “When messages arrive: Show an alert” in Edit &amp;gt; Preferences.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install libnotify-bin package (execute in Terminal):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; libnotify-bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In order to have Thunderbird entry in the menu even when it is not running. First create a new file as follows (run from Terminal):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.config/indicators/messages/applications&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;gksudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gedit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.config/indicators/messages/applications/thunderbird&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then paste the following text in the file and save it:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/usr/share/applications/thunderbird.desktop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(optional) If you wish you can remove the Evolution entries from the indicator menu. Note: because of &lt;a rel=&quot;external&quot; href=&quot;https://bugs.launchpad.net/ubuntu/+source/indicator-messages/+bug/533021&quot;&gt;bug 533021&lt;/a&gt;, this is a workaround which will remove Evolution from the menu for all users on the system, not just yourself.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.config/indicators/messages/applications-blacklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /usr/share/indicators/messages/applications/evolution&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.config/indicators/messages/applications-blacklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(Once the above bug is resolved in the future, move the file back to its original location and create a softlink to it from the blacklist directory: &lt;code&gt;ln -s /usr/share/indicators/messages/applications/evolution ~/.config/indicators/messages/applications-blacklist/evolution&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log out from your user session and back in.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Keeping track of scripts in BIRT reports</title>
        <published>2010-08-03T14:21:38+00:00</published>
        <updated>2010-08-03T14:21:38+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/keeping-track-of-scripts-in-birt-reports/"/>
        <id>https://martinthetallguy.com/blog/keeping-track-of-scripts-in-birt-reports/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/keeping-track-of-scripts-in-birt-reports/">&lt;p&gt;&lt;img src=&quot;/uploads/2010/08/BIRT_Eclipse_Scripts.png&quot; alt=&quot;Outline fast view with Sripts item expanded&quot; /&gt;The ability to add custom scripts to report elements is a very powerful feature of BIRT. It allows the report developer to modify or override the default behaviour of the element; this blog features &lt;a href=&quot;/tags/birt/&quot;&gt;many examples&lt;/a&gt; of when this might be useful. However, as the number of scripts in a report increases, the report becomes harder and harder to maintain.&lt;/p&gt;
&lt;p&gt;The Layout view or the Property Editor window do not indicate whether and what scripts exist on a particular element, and so it would seem the only way to check is to select the element and switch to the Script tab and look through the methods. Of course this would be incredibly tedious and impractical in a complex report.&lt;/p&gt;
&lt;p&gt;Luckily, the Outline fast view has a Scripts item tucked away at the bottom of the list. When expanded, this shows all items in the report which contain custom scripts (expanding the item shows the overridden methods). Right-click brings up an option to go to the report element in the report Layout, and thus actually figure out which item it is referring to.&lt;/p&gt;
&lt;p&gt;The deeper lesson is that one should use scripts only when necessary and if there is no other way to implement the required functionality. And of course thorough documentation also helps with maintenance…&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Alternate row styling for summary rows</title>
        <published>2010-08-02T13:14:37+00:00</published>
        <updated>2010-08-02T13:14:37+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/alternate-row-styling-for-summary-rows/"/>
        <id>https://martinthetallguy.com/blog/alternate-row-styling-for-summary-rows/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/alternate-row-styling-for-summary-rows/">&lt;p&gt;The &lt;a href=&quot;https://martinthetallguy.com/blog/alternate-row-styling-in-birt/&quot;&gt;technique for alternate row styling&lt;/a&gt; described in a previous post is applicable for tables with detail rows (a detail row in a table corresponds to a row in the bound data set). However, it is often the case that the table does not contain any detail rows at all and instead displays only aggregated data, i.e. header or footer rows of a group.&lt;/p&gt;
&lt;p&gt;In such scenario the &lt;code&gt;row.__rownum&lt;/code&gt; value cannot be used, because &lt;code&gt;__rownum&lt;/code&gt; is incremented for each row in the data set, meaning its value will depend on how many rows are being aggregated into the summary row.&lt;/p&gt;
&lt;p&gt;Instead, the highlight logic can be defined using a variable incremented on each summary row.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, initialize the variable. This can be done e.g. in the &lt;code&gt;onCreate&lt;/code&gt; method of a label in the static column header.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setPersistentGlobalVariable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;aggRowNum&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In an object on the summary row (either a label, aggreation or the row itself) the following code is placed in the &lt;code&gt;onCreate&lt;/code&gt; method to increment the value of the variable (the funny stuff is to force explicit conversion between string and number and back):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;var&lt;/span&gt;&lt;span&gt; n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getPersistentGlobalVariable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;aggRowNum&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setPersistentGlobalVariable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;aggRowNum&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; n&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally, the highlight property of the row is set as follows:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;reportContext.getPersistentGlobalVariable( &amp;quot;aggRowNum&amp;quot; ) % 2; | equal to | 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Managing Passwords with KeePass and KeePassX</title>
        <published>2010-07-31T04:07:33+00:00</published>
        <updated>2010-07-31T04:07:33+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/managing-passwords-with-keepass-and-keepassx/"/>
        <id>https://martinthetallguy.com/blog/managing-passwords-with-keepass-and-keepassx/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/managing-passwords-with-keepass-and-keepassx/">&lt;p&gt;Password proliferation is a serious problem on the web today. Most websites require users to register and create a username/password combination for future authentication. Unfortunately not many websites support reusable logins such as &lt;a rel=&quot;external&quot; href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The main problem is that of human memory. It is of course not reasonable to expect the user to remember 100+ unique passwords. In most cases, the end result is that users will reuse the same password for multiple sites and systems. The issues with this are obvious: if a malicious third party gets hold of one password, it compromises all where the password was used; also, by piecing together the other bits of data entered at registration (such as date of birth, gender, physical address, mother’s maiden name etc.) for different sites, the attacker might be able to create a very accurate profile which could then be used to gain access to even those systems where a different password was used.&lt;/p&gt;
&lt;p&gt;That’s why I use a password management program, in particular &lt;a rel=&quot;external&quot; href=&quot;http://keepass.info/&quot;&gt;KeePass&lt;/a&gt;/&lt;a rel=&quot;external&quot; href=&quot;http://www.keepassx.org/&quot;&gt;KeePassX&lt;/a&gt;. It allows one to securely store credentials and is itself protected by strong encryption and can only be accessed using a password. In reality one finds that on a daily basis it is sufficient to remember 5-10 most frequently used passwords (computer login, email, Google, social network, internet banking and of course the password manager itself) and the rest can be referred to from KeePass. The program has a feature to generate random passwords, which is ideal to have strong passwords for infrequently accessed systems where one might not even realise the account was hacked for a long period of time. KeePass can even be installed in portable mode, which means you can carry the program and your encrypted passwords file on a USB stick.&lt;/p&gt;
&lt;p&gt;I found that &lt;a rel=&quot;external&quot; href=&quot;http://keepass.info/&quot;&gt;KeePass&lt;/a&gt; (version 1 for Windows) and &lt;a rel=&quot;external&quot; href=&quot;http://www.keepassx.org/&quot;&gt;KeePassX&lt;/a&gt; (Linux and Mac) suit my needs perfectly. There is also a version for Android and iPhone (refer to the &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Keepass&quot;&gt;Wikipedia article&lt;/a&gt;). Best of all? It’s &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Free_software&quot;&gt;free software&lt;/a&gt; licensed under &lt;a rel=&quot;external&quot; href=&quot;http://keepass.info/help/v1/license.html&quot;&gt;GPL&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>VMware Player in Lucid Lynx</title>
        <published>2010-05-19T14:42:07+00:00</published>
        <updated>2010-05-19T14:42:07+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/vmware-player-in-lucid-lynx/"/>
        <id>https://martinthetallguy.com/blog/vmware-player-in-lucid-lynx/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/vmware-player-in-lucid-lynx/">&lt;p&gt;As always after a kernel update, VMware Player 2.5.xx asks to be recompiled after upgrading to Ubuntu 10.04 (Lucid). However during the compilation I got errors about virtual network device, even after trying to recompile several times including from command line.&lt;/p&gt;
&lt;p&gt;After struggling for some time, I thought I would check on the &lt;a rel=&quot;external&quot; href=&quot;http://www.vmware.com/&quot;&gt;VMware website&lt;/a&gt; whether there is a new version of the software; and indeed VMware Player is now in version 3. After installing it (by &lt;a rel=&quot;external&quot; href=&quot;http://www.vmware.com/go/downloadplayer/&quot;&gt;downloading&lt;/a&gt; and running the .bundle file) everything works fine in Lucid. As a side note, the compilation dialogue does not come up and the look and feel of the Player is also quite different.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Disable cookies in Thunderbird</title>
        <published>2010-05-15T08:35:02+00:00</published>
        <updated>2010-05-15T08:35:02+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/disable-cookies-in-thunderbird/"/>
        <id>https://martinthetallguy.com/blog/disable-cookies-in-thunderbird/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/disable-cookies-in-thunderbird/">&lt;p&gt;Recently I discovered that by default Thunderbird accepts cookies from web content (version 3.0.4 in Ubuntu 10.04 Lucid). I am a bit baffled by what would be a valid use case for storing cookies in an email client, and so here are steps for disabling this option.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Edit &amp;gt; Preferences.&lt;/li&gt;
&lt;li&gt;Select Security icon and “Web Content” tab.&lt;/li&gt;
&lt;li&gt;Untick “Accept cookies from sites”.&lt;/li&gt;
&lt;li&gt;While you’re there, also check “Show Cookies” and “Remove All Cookies” to get rid of whatever has been stored up until now.&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Change date format in Thunderbird</title>
        <published>2010-05-15T08:20:33+00:00</published>
        <updated>2010-05-15T08:20:33+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/change-date-format-in-thunderbird/"/>
        <id>https://martinthetallguy.com/blog/change-date-format-in-thunderbird/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/change-date-format-in-thunderbird/">&lt;p&gt;In order to show dates as yyyy-mm-dd instead of the default (for US locale) mm/dd/yyyy I use the following script to launch Thunderbird in Ubuntu (tested with Thunderbird 3.0.4 on Lucid):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;/bin/sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;export&lt;/span&gt;&lt;span&gt; LC_TIME&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span&gt;en_DK&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;utf8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;LC_ALL&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;LC_TIME&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; unset&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; LC_ALL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; thunderbird&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This handy tip comes from &lt;a rel=&quot;external&quot; href=&quot;http://kb.mozillazine.org/Date_display_format&quot;&gt;mozillaZine&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Thunderbird &quot;Could not initialize the browser&#39;s security component&quot;</title>
        <published>2010-04-11T12:53:40+00:00</published>
        <updated>2010-04-11T12:53:40+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/thunderbird-could-not-initialize-the-browsers-security-component/"/>
        <id>https://martinthetallguy.com/blog/thunderbird-could-not-initialize-the-browsers-security-component/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/thunderbird-could-not-initialize-the-browsers-security-component/">&lt;p&gt;UPDATE: The issue has been fixed in a subsequent Ubuntu system update, so there should be no reason to go through the steps below if your system is up-to-date.&lt;/p&gt;
&lt;p&gt;After a recent system update in Ubuntu 9.10 (Karmic) I started getting an error message in Thunderbird starting with “Could not initialize the browser’s security component”. Among other things, this means that &lt;a href=&quot;https://martinthetallguy.com/blog/goodbye-webmail-hello-pop/&quot;&gt;Hotmail integration with Thunderbird&lt;/a&gt; no longer works.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/04/thunderbird-nss.png&quot; alt=&quot;Thunderbird error message&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The error dialog itself has a few suggestions, however none of these fixes the issue.&lt;/p&gt;
&lt;p&gt;Luckily the solution can be found on Ubuntu forums and is very straightforward. All that is required is to remove the package “libnss3-0d”. This can be achieved from Synaptic (System &amp;gt; Administration &amp;gt; Synaptic Package Manager) or from the command line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get remove libnss3-0d&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here is the link to the &lt;a rel=&quot;external&quot; href=&quot;http://ubuntuforums.org/showthread.php?t=1451551&quot;&gt;original post&lt;/a&gt; on Ubuntu forums and the &lt;a rel=&quot;external&quot; href=&quot;https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/559881&quot;&gt;corresponding bug&lt;/a&gt; on Launchpad.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Export Outlook contacts as vCard</title>
        <published>2010-03-30T16:23:27+00:00</published>
        <updated>2010-03-30T16:23:27+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/export-outlook-contacts-as-vcard/"/>
        <id>https://martinthetallguy.com/blog/export-outlook-contacts-as-vcard/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/export-outlook-contacts-as-vcard/">&lt;p&gt;Microsoft Outlook allows saving of contact in vCard format (vcf) only one at a time through the Save As… dialog. The Import and Export menu options do not provide the ability to export all contacts as vCard. Obviously with a large address book it would be very impractical to go through the contacts and save them one by one. Luckily it’s not too difficult to script this functionality through a macro. The quick-and-dirty macro below does just that. Note that the script considers the “current” folder, i.e. you need to be in the Contacts folder you want to export when executing the macro.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;vb&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;Sub&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; save_as_vcf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  Dim&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);font-weight: bold;&quot;&gt;,&lt;/span&gt;&lt;span&gt; ncount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; As&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Integer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  Dim&lt;/span&gt;&lt;span&gt; fullname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; As&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; String&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  Set &lt;/span&gt;&lt;span&gt;ofolder&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; Application&lt;/span&gt;&lt;span&gt;.ActiveExplorer.CurrentFolder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  Set &lt;/span&gt;&lt;span&gt;oitems&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; ofolder.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;Items&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ncount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; oitems.Count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  MsgBox&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Count is &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt; ncount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  For&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; To&lt;/span&gt;&lt;span&gt; ncount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    Set &lt;/span&gt;&lt;span&gt;oitem&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; oitems.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;Item&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fullname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; oitem.fullname&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    oitem.SaveAs &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;D:Export&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt; fullname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;.vcf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; olVCard&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  Next&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  MsgBox&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Done&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;End Sub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Reading cookies in BIRT</title>
        <published>2010-03-01T13:29:15+00:00</published>
        <updated>2010-03-01T13:29:15+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/reading-cookies-in-birt/"/>
        <id>https://martinthetallguy.com/blog/reading-cookies-in-birt/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/reading-cookies-in-birt/">&lt;p&gt;It is fairly straightforward to read a value stored in a cookie. This can have many uses, for example if the landing page for your reporting application needs to pass some values to your reports but you don’t want them visible in the URL.&lt;/p&gt;
&lt;p&gt;The code sample below retrieves the value of a cookie and stores it in a global variable. The code could be placed in one of the startup methods, such as the report’s &lt;code&gt;initialize&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// name of the cookie to read var cookiename = &quot;birtcookie&quot;; // variable to hold cookie value var cookieval = &quot;&quot;; // get the value from the cookie var request = reportContext.getHttpServletRequest(); var cookies = request.getCookies(); for( var i = 0; i &amp;lt; cookies.length; i++ ) {   if( cookies[i].getName().equals( cookiename ) )   {     cookieval = cookies[i].getValue();   } } // store value in a global variable reportContext.setPersistentGlobalVariable( &quot;cookieval&quot;, cookieval );&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting BIRT chart series palette dynamically, part 2 – area charts</title>
        <published>2010-02-18T14:08:23+00:00</published>
        <updated>2010-02-18T14:08:23+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-2-area-charts/"/>
        <id>https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-2-area-charts/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically-part-2-area-charts/">&lt;p&gt;In a &lt;a href=&quot;https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically/&quot;&gt;previous post&lt;/a&gt; we described how to set the series palette dynamically for a pie chart. A slightly different approach is required for area charts.&lt;/p&gt;
&lt;p&gt;Let’s recap on the problem at hand: in what is a fairly common scenario, one chooses the palette colours to match with particular category values. For example, in the chart below “High” is represented in green, “Mid” in orange and “Low” in red.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/02/dynpal05.png&quot; alt=&quot;Area chart with three categories&quot; /&gt;&lt;/p&gt;
&lt;p&gt;However, if for a particular dataset of the of category values is not present, the palette colours are still used in the same order, meaning the “Mid” area is now shown as red and “High” as orange. This is confusing for the end user.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/02/dynpal06.png&quot; alt=&quot;Area chart with only two categories, palette colours are confusing&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once again we can solve this issue with some scripting of the chart. In this approach, we will override the &lt;code&gt;beforeDrawSeries&lt;/code&gt; method to check for category value and set the fill colour based on that:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawSeries&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; series&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; isr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; get class of the renderer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  var&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getClass&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;toString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;  //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; check for area chart renderer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;class org.eclipse.birt.chart.render.Area&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; get global counter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; 1* forces conversion to int&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; *&lt;/span&gt;&lt;span&gt; icsc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getExternalContext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getScriptable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getPersistentGlobalVariable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;seriesCounter&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; get category value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesRenderingHints&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getDataPoints&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesDisplayValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; set fill colour based on category value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1-Low&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesDefinition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesPalette&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getEntries&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 242&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 88&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 106&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;2-Mid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesDefinition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesPalette&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getEntries&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 232&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 172&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 57&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;3-High&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      isr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesDefinition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesPalette&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getEntries&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; increment global counter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; &amp;quot;&amp;quot; forces conversion to string&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    icsc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getExternalContext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getScriptable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setPersistentGlobalVariable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;seriesCounter&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may have noticed that a global variable &lt;code&gt;seriesCounter&lt;/code&gt; is used to hold the reference to the current series. This is because the &lt;code&gt;beforeDrawSeries&lt;/code&gt; method is called several times, once for each category value present in the data. Another bit of code is therefore required to define the &lt;code&gt;seriesCounter&lt;/code&gt; variable in the &lt;code&gt;initialize&lt;/code&gt; method of the report:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;reportContext&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setPersistentGlobalVariable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;seriesCounter&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One more point to note is that &lt;code&gt;reportContext.setPersistentGlobalVariable&lt;/code&gt; only accepts string values, hence the “hack” to convert between a number and a string every time the value is retrieved or stored.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/02/dynpal07.png&quot; alt=&quot;Area chart with only two categories, palette colours dynamically set&quot; /&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting BIRT chart series palette dynamically</title>
        <published>2010-01-13T18:05:03+00:00</published>
        <updated>2010-01-13T18:05:03+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically/"/>
        <id>https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/setting-birt-chart-series-palette-dynamically/">&lt;p&gt;BIRT series palette is static by default, meaning colours are applied in the specified order without being tied to the actual category values. This is ok in most cases, however consider the following scenario. In our data we expect three category values, “1-Low”, “2-Mid” and “3-High” and the chart series palette has been set to reflect this. Red colour is first in the list, so it will used for the first category value (“1-Low”) etc.:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/01/dynpal01.png&quot; alt=&quot;Chart series palette&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With all three category values in the dataset everything works as expected:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/01/dynpal02.png&quot; alt=&quot;Pie chart with static palette colours and all categories&quot; /&gt;&lt;/p&gt;
&lt;p&gt;However, suppose that for a particular dataset the value “1-Low” is not present (perhaps a month when the business is performing well?). In this case the palette colours will still be applied in the same order starting with red, leading to inconsistency and quite possibly confusing the users:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/01/dynpal03.png&quot; alt=&quot;Pie chart with colours from a static palette&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This problem can be overcome by dynamically scripting the series colours based on the category value. Two methods need to be scripted, one for the chart itself and the other for the legend (otherwise the chart and the legend will not match!).&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawDataPoint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; dph&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; fill&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; dph&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getBaseDisplayValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1-Low&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 242&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 88&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 106&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;2-Mid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 232&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 172&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 57&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;3-High&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawLegendItem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; lerh&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; bounds&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; lerh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getCaption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; fill&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; lerh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getFill&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1-Low&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 242&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 88&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 106&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;2-Mid&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 232&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 172&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 57&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sValue&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;3-High&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 128&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 255&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;set&lt;/code&gt; method can take either three integer parameters with values between 0 and 255 for Red, Green, Blue or four integer parameters (RGB + Alpha channel for opacity). After including the above scripts the chart is generated with the correct colours for the category values:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2010/01/dynpal04.png&quot; alt=&quot;Pie chart with colours dynamically reflecting category values&quot; /&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting BIRT chart title dynamically</title>
        <published>2010-01-13T12:55:10+00:00</published>
        <updated>2010-01-13T12:55:10+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/setting-birt-chart-title-dynamically/"/>
        <id>https://martinthetallguy.com/blog/setting-birt-chart-title-dynamically/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/setting-birt-chart-title-dynamically/">&lt;p&gt;It is possible to set the title of a chart dynamically, for example based on parameter values, using a little bit of scripting. The example below assumes that two parameters are defined (“Year” and “Month” with values such as “2010” and “Jan”).&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeGeneration&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; chart&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sYear&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; 	=&lt;/span&gt;&lt;span&gt; icsc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getExternalContext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getScriptable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getParameterValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Year&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sMonth&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; 	=&lt;/span&gt;&lt;span&gt; icsc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getExternalContext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getScriptable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getParameterValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Month&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; sTitle&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;	=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Chart for &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; sMonth&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span&gt; sYear&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getTitle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getCaption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; sTitle&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The title of the chart will be set dynamically based on report parameter values.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>VMware Player mouse issues in Karmic</title>
        <published>2010-01-12T13:43:12+00:00</published>
        <updated>2010-01-12T13:43:12+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/vmware-player-mouse-issues-in-karmic/"/>
        <id>https://martinthetallguy.com/blog/vmware-player-mouse-issues-in-karmic/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/vmware-player-mouse-issues-in-karmic/">&lt;p&gt;VMware Player experiences mouse capture problems when run under Ubuntu 9.10 Karmic host. Inside the guest window, the mouse pointer works fine in a top-left rectangle of the window (640x480 pixels?) but outside of this area the mouse pointer switches its focus to the host. Add the following line to the file &lt;code&gt;/etc/vmware/bootstrap&lt;/code&gt; to fix it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;export VMWARE_USE_SHIPPED_GTK=yes&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; VMware code needs to be recompiled each time the Linux kernel is updated and this entry may prevent it from compiling successfully. The additional line should be removed or commented out prior to building VMware Player and then put back in back again.&lt;/p&gt;
&lt;p&gt;For a discussion see &lt;a rel=&quot;external&quot; href=&quot;http://ubuntuforums.org/showthread.php?p=8177063&quot;&gt;this thread&lt;/a&gt; on Ubuntu forums.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>BIRT Report Viewer documentation</title>
        <published>2010-01-11T14:15:26+00:00</published>
        <updated>2010-01-11T14:15:26+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/birt-report-viewer-documentation/"/>
        <id>https://martinthetallguy.com/blog/birt-report-viewer-documentation/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/birt-report-viewer-documentation/">&lt;p&gt;Eclipse BIRT comes with Report Viewer, a J2EE application used for generating and displaying reports. Whilst deploying and using the out-of-the-box application on Tomcat is &lt;a rel=&quot;external&quot; href=&quot;http://www.eclipse.org/birt/phoenix/deploy/viewerSetup.php&quot;&gt;straightforward&lt;/a&gt;, there are fairly rich configuration and parametrization options which are non-obvious. The following two documents describe how the viewer works and how to control its behaviour.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.birt-exchange.org/modules/wfdownloads/visit.php?cid=5&amp;amp;lid=492&quot;&gt;BIRT Viewer User’s Guide&lt;/a&gt; (covers version 2.3, PDF)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.eclipse.org/birt/phoenix/deploy/viewerUsage2.2.php&quot;&gt;Using the BIRT Report Viewer&lt;/a&gt; (covers version 2.2)&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Change Firefox address bar search engine</title>
        <published>2010-01-11T14:10:36+00:00</published>
        <updated>2010-01-11T14:10:36+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/change-firefox-address-bar-search-engine/"/>
        <id>https://martinthetallguy.com/blog/change-firefox-address-bar-search-engine/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/change-firefox-address-bar-search-engine/">&lt;p&gt;Follow these steps to change the search engine used by Firefox 3 address bar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enter &lt;code&gt;about:config&lt;/code&gt; in the browser’s address bar and accept a warning dialog if it appears.&lt;/li&gt;
&lt;li&gt;In the filter box type in &lt;code&gt;keyword.URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Double click the entry and paste in your prefered search engine URL (e.g. &lt;code&gt;http://www.bing.com/search?q=&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can always revert back to the default Google search by right-clicking the entry and selecting the Reset menu option.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Tuxradar: Command line tricks for smart geeks</title>
        <published>2009-12-16T13:46:40+00:00</published>
        <updated>2009-12-16T13:46:40+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/tuxradar-command-line-tricks-for-smart-geeks/"/>
        <id>https://martinthetallguy.com/blog/tuxradar-command-line-tricks-for-smart-geeks/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/tuxradar-command-line-tricks-for-smart-geeks/">&lt;p&gt;Good article on Tuxradar with some clever command line hacks: &lt;a rel=&quot;external&quot; href=&quot;http://www.tuxradar.com/content/command-line-tricks-smart-geeks&quot;&gt;Command line tricks for smart geeks&lt;/a&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fill missing values in BIRT charts</title>
        <published>2009-11-19T18:26:24+00:00</published>
        <updated>2009-11-19T18:26:24+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/fill-missing-values-in-birt-charts/"/>
        <id>https://martinthetallguy.com/blog/fill-missing-values-in-birt-charts/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/fill-missing-values-in-birt-charts/">&lt;p&gt;The BIRT chart wizard provides an option to skip missing values in a series and connect them with the series line; however, there is no option to substitute a default value for the missing data. The screenshot below shows a chart where the series value is missing for category value 03-MAR and the “Connect Missing Values” option has been selected under the value series options:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2009/11/chart_fill_before.png&quot; alt=&quot;chart_fill_before&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There is no option in the chart wizard to fill in the missing values, i.e. replace them with a default. However, it is possible to achieve this with a simple script. In this case we check for the series name and replace the missing values with 0. To use the script, highlight the chart in the UI and click the Script tab along the bottom of the main window. Then simply paste the script below and save the report.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; afterDataSetFilled&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; series&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; dataSet&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;  if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; series&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getSeriesIdentifier&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Series 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; dataSet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getValues&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; var&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;      if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; null&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        list&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The screenshot below shows the chart with the script included:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2009/11/chart_fill_after.png&quot; alt=&quot;chart_fill_after&quot; /&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Use commandline to find CentOS version</title>
        <published>2009-11-18T17:58:42+00:00</published>
        <updated>2009-11-18T17:58:42+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/use-commandline-to-find-centos-version/"/>
        <id>https://martinthetallguy.com/blog/use-commandline-to-find-centos-version/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/use-commandline-to-find-centos-version/">&lt;p&gt;Here’s how to find the version of your CentOS system from the command line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;more /etc/redhat-release&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Ctrl-Alt-Backspace to restart X in Karmic</title>
        <published>2009-11-07T05:43:55+00:00</published>
        <updated>2009-11-07T05:43:55+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/ctrl-alt-backspace-to-restart-x-in-karmic/"/>
        <id>https://martinthetallguy.com/blog/ctrl-alt-backspace-to-restart-x-in-karmic/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/ctrl-alt-backspace-to-restart-x-in-karmic/">&lt;p&gt;In a &lt;a href=&quot;https://martinthetallguy.com/blog/enable-ctrl-alt-backspace-to-restart-x/&quot;&gt;previous post&lt;/a&gt; I described to how to enable the Ctrl-Alt-Backspace key combination to restart the X server. However, those steps were applicable to Ubuntu 9.04 only and have no effect in Ubuntu 9.10 (Karmic Koala). The necessary changes to enable Ctrl-Alt-Backspace to restart X in Karmic are below.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Preferences &amp;gt; Keyboard and select the Layouts tab.&lt;/li&gt;
&lt;li&gt;Click the Layout Options… button.&lt;/li&gt;
&lt;li&gt;In the dialog window expand the “Key sequence to kill X server” entry and select the checkbox.&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Set screen to grayscale with Compiz</title>
        <published>2009-10-23T16:00:07+00:00</published>
        <updated>2009-10-23T16:00:07+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/set-screen-to-grayscale-with-compiz/"/>
        <id>https://martinthetallguy.com/blog/set-screen-to-grayscale-with-compiz/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/set-screen-to-grayscale-with-compiz/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.compiz.org/&quot;&gt;Compiz&lt;/a&gt; sometimes gets bad press because of the gimmicky, bling nature of some of the plugins. Whilst it’s hard to see the real-world benefit of painting fire or rain drops on the screen, on the other hand it has to be said that Compiz gives Linux the wow factor that certain users are drawn to. And of course there is the odd practical thing one can achieve with it.&lt;/p&gt;
&lt;p&gt;One of these which I have found after a bit of searching is a very simple and straightforward way of turning the screen into grayscale (or monochrome). You might ask why anyone would want to turn their screen into grayscale, and my answer is: it is a welcome respite for tired eyes, especially when working at night or in a dark environment.&lt;/p&gt;
&lt;p&gt;To achieve this effect, you need to have Compiz itself installed, as well as the &lt;code&gt;compizconfig-settings-manager&lt;/code&gt; package. This gives you an entry in System &amp;gt; Preferences called CompizConfig Settings Manager. One of the plugins available under the Accessibility section of the Settings Manager is “Color filter”. It comes with a set of predefined filter files one of which is grayscale. Key bindings are available for active window or the whole screen and for switching between the filters.&lt;/p&gt;
&lt;p&gt;Depending on your preference, you can either cyclicaly switch to the grayscale filter or just remove the other filters. For reference, the default filter files including grayscale are kept in &lt;code&gt;/usr/share/compiz/filters&lt;/code&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Open the &#39;Safely Remove Hardware&#39; dialog manually</title>
        <published>2009-10-05T14:13:53+00:00</published>
        <updated>2009-10-05T14:13:53+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/open-the-safely-remove-hardware-dialog-manually/"/>
        <id>https://martinthetallguy.com/blog/open-the-safely-remove-hardware-dialog-manually/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/open-the-safely-remove-hardware-dialog-manually/">&lt;p&gt;Sometimes the Windows system tray icon used to safely remove USB hardware disappears. It is not a good idea to simply unplug the USB device, especially a memory stick or hard drive, since this can lead to data loss or corruption. Also, the disk will not be unmounted cleanly and you may face issues when trying to mount it later in Linux.&lt;/p&gt;
&lt;p&gt;To open the dialog manually and remove the device cleanly, run the following command from the Windows Run dialog (Start &amp;gt; Run):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RUNDLL32.EXE SHELL32.DLL,Control_RunDLL HotPlug.dll&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Change virtual terminal font size</title>
        <published>2009-09-21T05:28:14+00:00</published>
        <updated>2009-09-21T05:28:14+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/change-virtual-terminal-font-size/"/>
        <id>https://martinthetallguy.com/blog/change-virtual-terminal-font-size/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/change-virtual-terminal-font-size/">&lt;p&gt;This post is about how to change the resolution (i.e. font size) of virtual terminals or “tty” in Linux. Virtual terminal is the basic command line interface which you see when you press &amp;lt;Ctrl&amp;gt;&amp;lt;Alt&amp;gt;&amp;lt;F1&amp;gt; (note: to get back to your existing Gnome or KDE session press &amp;lt;Alt&amp;gt;&amp;lt;F7&amp;gt;). This is different from the Terminal emulator, such as the Terminal application in Gnome.&lt;/p&gt;
&lt;p&gt;To change the font size of the virtual terminal it is necessary to set the vga parameter in the entry used by the Grub bootloader to start up Linux. Follow the steps below to set the entry correctly.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, intall the hwinfo utility through Synaptic or Terminal:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; hwinfo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then run the following command in Terminal:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; hwinfo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-framebuffer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The command will output some information about your graphics system. Skip the top bit and you should see a list of entries like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0300: 640x400 (+640), 8 bits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0301: 640x480 (+640), 8 bits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0303: 800x600 (+800), 8 bits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0305: 1024x768 (+1024), 8 bits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0307: 1280x1024 (+1280), 8 bits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0317: 1024x768 (+2048), 16 bits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode 0x0318: 1024x768 (+4096), 24 bits&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review the list which might be quite long, select the resolution you want to use and copy the hexadecimal number after Mode. For example, for 24 bit 1024x786 resolution the number is 0x0318.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Still in the Terminal emulator, run the following command to edit the Grub bootloader configuration file:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;gksudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gedit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /boot/grub/menu.lst&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Find the entry you want to edit (or copy an existing entry and give it a different name) and change the line which begins with “kernel”. As a precaution, make sure you have at least one entry left in the file without the new resolution so you can still safely boot and edit the file again if necessary.
 
Original entry:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kernel		/boot/vmlinuz-2.6.28-15-server root=/dev/sda3 ro quiet splash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;New entry:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kernel		/boot/vmlinuz-2.6.28-15-server root=/dev/sda3 ro quiet vga=0x0318 splash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reboot your computer and at the Grub menu select the entry which was edited. You may notice some difference during the boot process, to verify that the resolution and font size are suitable press &amp;lt;Ctrl&amp;gt;&amp;lt;Alt&amp;gt;&amp;lt;F8&amp;gt; once you are at the login screen. This will take you to tty8 which should display messages from the boot process.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Greasemonkey for beginners</title>
        <published>2009-09-21T04:36:15+00:00</published>
        <updated>2009-09-21T04:36:15+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/greasemonkey-for-beginners/"/>
        <id>https://martinthetallguy.com/blog/greasemonkey-for-beginners/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/greasemonkey-for-beginners/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.tuxradar.com&quot;&gt;Tuxradar&lt;/a&gt;, a site worth keeping an eye on, published a basic &lt;a rel=&quot;external&quot; href=&quot;http://www.tuxradar.com/content/greasemonkey-beginners&quot;&gt;Greasemonkey for beginners&lt;/a&gt; tutorial a little while back. Greasemonkey is a Firefox plugin which allows you to add little scripts which are executed when you browse to a particular page. The script can manipulate the page itself, e.g. to show additional content or to hide annoying ads or whitespace, change style and much much more. Many thousands of scripts have been published and if you know Javascript and browser scripting it’s very easy to created your own. Here’s a couple of other Greasemonkey links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.tuxradar.com/content/greasemonkey-beginners&quot;&gt;Greasemonkey for beginners&lt;/a&gt; (Tuxradar)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.greasespot.net/&quot;&gt;Greasespot&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://diveintogreasemonkey.org/&quot;&gt;Dive Into Greasemonkey&lt;/a&gt; (the definite reference)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://userscripts.org/&quot;&gt;userscripts.org&lt;/a&gt; (a script repository)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Split large files</title>
        <published>2009-09-18T14:33:20+00:00</published>
        <updated>2009-09-18T14:33:20+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/split-large-files/"/>
        <id>https://martinthetallguy.com/blog/split-large-files/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/split-large-files/">&lt;p&gt;Sometimes it is necessary to split a large file into several smaller ones, for example so that they fit on a CD or USB disk or can be attached to email. It’s very easy to do this from command line.&lt;/p&gt;
&lt;p&gt;Suppose you have a file of 500 MiB called “large_file” and to split it into 5 files of 100 MiB each:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;split --bytes=100m large_file large_file_part_&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will create 5 files with names as follows:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;large_file_part_aa&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;large_file_part_ab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;large_file_part_ac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;large_file_part_ad&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;large_file_part_ae&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The following command would then be used to join the parts back together:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cat large_file_part_* &amp;gt; large_file&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>JDBC drivers in BIRT Viewer on Tomcat</title>
        <published>2009-08-31T14:54:15+00:00</published>
        <updated>2009-08-31T14:54:15+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/jdbc-drivers-in-birt-viewer-on-tomcat/"/>
        <id>https://martinthetallguy.com/blog/jdbc-drivers-in-birt-viewer-on-tomcat/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/jdbc-drivers-in-birt-viewer-on-tomcat/">&lt;p&gt;JDBC drivers need to be put in the following location to be available in BIRT Viewer. Putting them into &lt;code&gt;&amp;lt;TOMCAT HOME&amp;gt;/common/lib&lt;/code&gt; does not work in BIRT and you will get a “cannot load JDBC driver” error.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;TOMCAT HOME&amp;gt;/webapps/birt/WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc_2.3.1.v20080827/drivers&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The Tomcat path and version number will depend on your environment.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fix DOSBox keyboard mapping in Ubuntu</title>
        <published>2009-08-01T04:59:39+00:00</published>
        <updated>2009-08-01T04:59:39+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/fix-dosbox-keyboard-mapping-in-ubuntu/"/>
        <id>https://martinthetallguy.com/blog/fix-dosbox-keyboard-mapping-in-ubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/fix-dosbox-keyboard-mapping-in-ubuntu/">&lt;p&gt;If your keyboard doesn’t seem to be working correctly in DOSBox running on Ubuntu (for example, if arrow and page up keys don’t work), try the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Check if a file called .dosboxrc exists in your home directory, e.g. by running&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;more&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.dosboxrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create or edit this file by running&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;gedit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.dosboxrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following text to the file and save:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sdl&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;usescancodes&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Formatting chart legend value entry</title>
        <published>2009-07-28T17:11:57+00:00</published>
        <updated>2009-07-28T17:11:57+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/formatting-chart-legend-value-entry/"/>
        <id>https://martinthetallguy.com/blog/formatting-chart-legend-value-entry/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/formatting-chart-legend-value-entry/">&lt;p&gt;In the legend properties for BIRT meter charts (accessed via Format Chart &amp;gt; Chart Area &amp;gt; Legend) there is a Show Value checkbox which controls displaying the series value together with its name. For some reason, in the Entries the dialog the Format control appears to be disabled, and so there is no way to control the format of the value. This is especially a problem when the computed value contains a lot of decimal places, as shown below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2009/07/BIRT-Meter-Legend-01.png&quot; alt=&quot;BIRT Meter Legend 01&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My solution to get around this problem is to add a little bit of script to the chart. Simply paste the following code to the charts onRender event (select the chart, click the Script tab at the bottom of the main editor window, select onRender in the first dropdown and beforeDrawLegendItem in the second one):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; beforeDrawLegendItem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; lerh&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; bounds&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; icsc&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;    var&lt;/span&gt;&lt;span&gt; nVal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; lerh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getValueLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getCaption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    nVal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; =&lt;/span&gt;&lt;span&gt; Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;round&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; nVal&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    lerh&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getValueLabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;getCaption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;setValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; nVal&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The result is a nicely formatted percentage value:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2009/07/BIRT-Meter-Legend-02.png&quot; alt=&quot;BIRT Meter Legend 02&quot; /&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Reducing wasted whitespace in meter charts</title>
        <published>2009-07-28T15:50:09+00:00</published>
        <updated>2009-07-28T15:50:09+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/reducing-wasted-whitespace-in-meter-charts/"/>
        <id>https://martinthetallguy.com/blog/reducing-wasted-whitespace-in-meter-charts/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/reducing-wasted-whitespace-in-meter-charts/">&lt;p&gt;BIRT has a wonderful meter chart type which is very useful for building KPI-based performance dashboards. However, it can be a little tricky to get the visual layout of the chart right. With default settings most of the chart is empty blank space with a relatively small dial in the middle. This is because the meter (dial) appears to be taking only a small portion of the overall area and also the distances between the chart title, legend and the dial are too big. This can look disjointed in a dashboard-style report. See the screenshot below, which shows a meter chart with a legend below and otherwise default settings. The background colour is set to blue to highlight the amount of empty space wasted:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/uploads/2009/07/BIRT-Meter-01-Before.png&quot; alt=&quot;BIRT Meter 01 - Before&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The trick to make the dial take up a larger portion of the overall chart area is to set a couple of “inset” entries to negative values. The values below worked well for me for a chart with width of 4.5 in and height 3 in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To move the legend closer to the meter, go to Format Chart &amp;gt; Chart Area &amp;gt; Legend &amp;gt; Layout and set Insets (points) &amp;gt; Top to -20. This assumes that the legend Position is set to Below.&lt;/li&gt;
&lt;li&gt;To move the dial closer to the title, go to Format Chart &amp;gt; Chart Area &amp;gt; Plot &amp;gt; Area Format and set Insets (points) &amp;gt; Top to -30.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The screenshot below shows the same chart with the above two changes:
&lt;img src=&quot;/uploads/2009/07/BIRT-Meter-02-After.png&quot; alt=&quot;BIRT Meter 02 - After&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The exact values may need some trial and error playing around to get the layout exactly right, but the general principle is: don’t be afraid of setting negative inset values.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Start Eclipse without splash image</title>
        <published>2009-07-21T13:33:48+00:00</published>
        <updated>2009-07-21T13:33:48+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/start-eclipse-without-splash-image/"/>
        <id>https://martinthetallguy.com/blog/start-eclipse-without-splash-image/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/start-eclipse-without-splash-image/">&lt;p&gt;Recently it’s happened a few times that the splash image, normally only shown while Eclipse is being loaded, remains visible even after Eclipse is fully loaded (using Eclipse 3.2.2 on Ubuntu 9.04). Even though it is only a minor annoyance since the splash can be closed from the Window List (aka task bar), I prefer no to show the splash image at all. This can be achieved by editing the file &lt;code&gt;/usr/lib/eclipse/eclipse.ini&lt;/code&gt; and adding &lt;code&gt;-nosplash&lt;/code&gt; on top.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fixing Eclipse BIRT PermGen space errors on Ubuntu</title>
        <published>2009-07-18T05:08:33+00:00</published>
        <updated>2009-07-18T05:08:33+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/fixing-eclipse-birt-permgen-space-errors-on-ubuntu/"/>
        <id>https://martinthetallguy.com/blog/fixing-eclipse-birt-permgen-space-errors-on-ubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/fixing-eclipse-birt-permgen-space-errors-on-ubuntu/">&lt;p&gt;Unfortunately the default memory settings for Eclipse are not sufficient to run BIRT properly on Ubuntu. Editing BIRT reports was fine on my machine, but the preview always crashed or froze Eclipse. When run from the command line, errors like these came up:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Exception in thread &amp;quot;SocketListener0-0&amp;quot; java.lang.OutOfMemoryError: PermGen space&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Exception in thread &amp;quot;SocketListener0-1&amp;quot; java.lang.OutOfMemoryError: PermGen space&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Exception in thread &amp;quot;SocketListener0-2&amp;quot; java.lang.OutOfMemoryError: PermGen space&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;java.lang.OutOfMemoryError: PermGen space&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Googling for these errors reveals that it is sadly a common problem with Eclipse. The fix is to increase the memory available to the Java process. This can be done in three different ways: Passing vmargs parameters from command line (not practical), editing the /usr/lib/eclipse/eclipse.ini file (did not work for me) or setting the parameters in the user’s eclipserc file (see below).&lt;/p&gt;
&lt;p&gt;After some trial and error and more googling, the third option is what I went for:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Close Eclipse if it is running.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check whether the following file already exists: &lt;code&gt;~/.eclipse/eclipserc&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If yes, skip to step 4. However, it looks like a bug that this file is not created by default and moreover there is no sample in Ubuntu install. To get the vanilla file, copy and paste it from &lt;a rel=&quot;external&quot; href=&quot;http://ubuntuforums.org/showthread.php?t=190384&quot;&gt;this post on Ubuntu forums&lt;/a&gt; and save it in the above location.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the file and change this line&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VMARGS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;-Xmx256M&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to something like&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VMARGS&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;-Xmx256M -XX:PermSize=256M -XX:MaxPermSize=512M&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These values worked fine for me but you may have to tweak them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the file and start Eclipse. You should now be able to run preview of BIRT reports.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>BIRT chart scrollbars in Firefox</title>
        <published>2009-07-15T15:27:55+00:00</published>
        <updated>2009-07-15T15:27:55+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/birt-chart-scrollbars-in-firefox/"/>
        <id>https://martinthetallguy.com/blog/birt-chart-scrollbars-in-firefox/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/birt-chart-scrollbars-in-firefox/">&lt;p&gt;There’s a strange bug in BIRT charting with Firefox on Linux. Some charts are rendered with horizontal and vertical scrollbars, sort of like an embedded frame which is too big to fit in the allocated space.&lt;/p&gt;
&lt;p&gt;The fix for this annoyance is straightforward, simply change the output format from SVG to PNG on the first tab of the chart dialog. This also makes scrolling smoother and improves overall responsiveness of Firefox when a report with a lot of charts is displayed.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Installing Apache Tomcat on Ubuntu server</title>
        <published>2009-06-23T16:33:49+00:00</published>
        <updated>2009-06-23T16:33:49+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/installing-apache-tomcat-on-ubuntu-server/"/>
        <id>https://martinthetallguy.com/blog/installing-apache-tomcat-on-ubuntu-server/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/installing-apache-tomcat-on-ubuntu-server/">&lt;p&gt;Here’s how to install &lt;a rel=&quot;external&quot; href=&quot;http://tomcat.apache.org/&quot;&gt;Apache Tomcat&lt;/a&gt; version 5.5 on an Ubuntu machine (note that there is nothing Ubutu specific in these steps). This will form one of the foundation steps for a series of posts in which we will build a fully open-source business intelligence platform.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, install Java JDK. I am using Sun’s version mainly for stability and to avoid any compatibility issues.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; sun-java6-jdk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download Apache Tomcat and check for integrity.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;wget&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; http://mirrors.sirium.net/pub/apache/tomcat/tomcat-5/v5.5.27/bin/apache-tomcat-5.5.27.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;wget&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; http://mirrors.sirium.net/pub/apache/tomcat/tomcat-5/v5.5.27/bin/apache-tomcat-5.5.27.tar.gz.md5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;md5sum&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apache-tomcat-5.5.27.tar.gz.md5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the archive file.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;tar&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; xvzf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apache-tomcat-5.5.27.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Move the unpacked directory to its permanent location. I use /opt but this is only a personal preference.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mv&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apache-tomcat-5.5.27&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /opt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a simple startup and shutdown script. Run &lt;code&gt;sudo vi /etc/init.d/tomcat&lt;/code&gt; and save it with the following content:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;#!&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #6A737D);&quot;&gt; Tomcat startup script&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;export&lt;/span&gt;&lt;span&gt; JAVA_HOME&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;usr&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;jvm&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;java-6-sun&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;case&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt; $&lt;/span&gt;&lt;span style=&quot;color: light-dark(#E36209, #FFAB70);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;	sh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /opt/apache-tomcat-5.5.27/bin/startup.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;	sh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /opt/apache-tomcat-5.5.27/bin/shutdown.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #DBEDFF);&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;	sh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /opt/apache-tomcat-5.5.27/bin/shutdown.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;	sh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /opt/apache-tomcat-5.5.27/bin/startup.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;*)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;	echo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Usage: /etc/init.d/tomcat {start|stop|restart}&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;	exit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;esac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don’t forget to make this script executable.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 755&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/init.d/tomcat&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now we can finally start Tomcat.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;/etc/init.d/tomcat&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally, check that everything worked correctly by opening the Tomcat default page (http://&amp;lt;servername&amp;gt;:8080) in a web browser.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>DOSBox mount C drive at startup</title>
        <published>2009-06-17T14:53:19+00:00</published>
        <updated>2009-06-17T14:53:19+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/dosbox-mount-c-drive-at-startup/"/>
        <id>https://martinthetallguy.com/blog/dosbox-mount-c-drive-at-startup/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/dosbox-mount-c-drive-at-startup/">&lt;p&gt;Here’s a tip to save typing the mount command each time you start &lt;a rel=&quot;external&quot; href=&quot;http://www.dosbox.com/&quot;&gt;DOSBox&lt;/a&gt;. Simply create a file called .dosboxrc in your home directory and save it with the following content:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;autoexec&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOUNT C ~/OldApps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;c:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Where &lt;code&gt;~/OldApps&lt;/code&gt; is the directory with MS-DOS executables. &lt;a rel=&quot;external&quot; href=&quot;http://www.dosgames.com/forum/post-93360.html&quot;&gt;Here’s a how-to&lt;/a&gt; with more information about DOSBox under Linux.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Goodbye WebMail, hello POP</title>
        <published>2009-06-10T15:52:21+00:00</published>
        <updated>2009-06-10T15:52:21+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/goodbye-webmail-hello-pop/"/>
        <id>https://martinthetallguy.com/blog/goodbye-webmail-hello-pop/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/goodbye-webmail-hello-pop/">&lt;p&gt;For a long time the only way to access and use a &lt;a rel=&quot;external&quot; href=&quot;http://www.hotmail.com&quot;&gt;Hotmail&lt;/a&gt; account from Thunderbird was the &lt;a rel=&quot;external&quot; href=&quot;http://webmail.mozdev.org/&quot;&gt;WebMail&lt;/a&gt; extension. All in all, this is a great solution but it always seemed a bit of a workaround since in the background it “pretends” to be a browser, downloads the Hotmail HTML and parses it to get and send emails.&lt;/p&gt;
&lt;p&gt;This has recently changed since the Hotmail team has come to its senses and now once again &lt;a rel=&quot;external&quot; href=&quot;http://help.live.com/Help.aspx?market=en-US&amp;amp;project=MailClassic&amp;amp;querytype=topic&amp;amp;query=WL_Mail_PROC_OEDAV.htm&quot;&gt;allows POP3 and SMTP access&lt;/a&gt; to the service. This means it is now straightforward to configure Thunderbird to use Hotmail, and no extensions are required.&lt;/p&gt;
&lt;p&gt;As summarized by poster vtel57 on &lt;a rel=&quot;external&quot; href=&quot;http://groups.google.com/group/thunderbird-webmail-extension/browse_thread/thread/abb1f38709ea8e09&quot;&gt;Google Groups&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;incoming server: pop3.live.com - port 995 - SSL
outgoing server: smtp.live.com - port 587 - TLS
Be sure that Secure Password Authentication is NOT checked.
Works like a champ! :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Indeed it does, and we will even forgive vtel57 &lt;a rel=&quot;external&quot; href=&quot;http://tafkac.org/afu/smileys/smileys_the_new_republic.html&quot;&gt;the use of a smiley&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One more thing to note is that once configured to use POP, Thunderbird will download the entire contents of your Hotmail inbox. So it is a good idea to do a bit of a clean up by deleting old items or moving them to an archive folder.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setting simple table borders in BIRT</title>
        <published>2009-06-07T16:18:13+00:00</published>
        <updated>2009-06-07T16:18:13+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/setting-simple-table-borders-in-birt/"/>
        <id>https://martinthetallguy.com/blog/setting-simple-table-borders-in-birt/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/setting-simple-table-borders-in-birt/">&lt;p&gt;Here’s how to create simple uniform table borders in BIRT. This seems very obvious once you know how to do it, but messing around again and again with cell and row borders without getting the right result can be very frustrating!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hover over the table to get the “Table” handle in the bottom left corner.
&lt;img src=&quot;/uploads/2009/06/birt-01-table-hover.png&quot; alt=&quot;birt-01-table-hover&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Click on the “Table” handle to get the row / column handles.
&lt;img src=&quot;/uploads/2009/06/birt-02-table-handles.png&quot; alt=&quot;birt-02-table-handles&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Click on the top-left corner and this will select the whole table (although in the Properties window you will see “Cell”!).
&lt;img src=&quot;/uploads/2009/06/birt-03-table-select.png&quot; alt=&quot;birt-03-table-select&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Now set the desired border setting in the Properties window and they will be applied uniformly (Excel style) on all cells in the table.
&lt;img src=&quot;/uploads/2009/06/birt-04-table-border.png&quot; alt=&quot;birt-04-table-border&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mount NTFS disk from commandline</title>
        <published>2009-06-07T15:56:09+00:00</published>
        <updated>2009-06-07T15:56:09+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/mount-ntfs-disk-from-commandline/"/>
        <id>https://martinthetallguy.com/blog/mount-ntfs-disk-from-commandline/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/mount-ntfs-disk-from-commandline/">&lt;p&gt;Nautilus and Thunar sometimes refuse to mount NTFS disk (e.g. a USB hard drive) when it was previously not unmounted cleanly from Windows. It is still possible to mount it from terminal shell by using the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mount -t ntfs-3g -o force /dev/sdc1 /media/myntfsdisk&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Where &lt;code&gt;/dev/sdc1&lt;/code&gt; is the device you want to mount and &lt;code&gt;/media/myntfsdisk&lt;/code&gt; is the mount point.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Full Circle</title>
        <published>2009-06-03T02:37:05+00:00</published>
        <updated>2009-06-03T02:37:05+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/full-circle/"/>
        <id>https://martinthetallguy.com/blog/full-circle/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/full-circle/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://fullcirclemagazine.org/&quot;&gt;Full Circle&lt;/a&gt; is a free online monthly magazine covering all things Ubuntu. Featuring tips, interviews, reviews and opinions, it’s worth checking out.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Check installed packages from commandline</title>
        <published>2009-05-28T13:31:24+00:00</published>
        <updated>2009-05-28T13:31:24+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/check-installed-packages-from-commandline/"/>
        <id>https://martinthetallguy.com/blog/check-installed-packages-from-commandline/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/check-installed-packages-from-commandline/">&lt;p&gt;To check for installed packages from the command line, use the &lt;code&gt;dpkg&lt;/code&gt; command with the &lt;code&gt;--get-selections&lt;/code&gt; option. This returns all packages installed on your system (most likely a lot!). So it is best to use &lt;code&gt;grep&lt;/code&gt; to narrow down the search results. For example, the following command lists all packages with “fire” in the package name:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;dpkg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-get-selections&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; fire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;firefox&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;                        install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;firefox-3.0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;                    install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;firefox-3.0-branding&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;           install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;firefox-3.0-dom-inspector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;      install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;firefox-dom-inspector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;          install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;mozilla-firefox-locale-en-gb&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;   install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An alternative which shows more information, including the exact version of the package and a description is the &lt;code&gt;-l&lt;/code&gt; option. Because &lt;code&gt;grep&lt;/code&gt; works with the output of the &lt;code&gt;dpkg&lt;/code&gt; command, this will also include packages where the search term appears in the description, such as ufw on the last line in the output below because of “firewall”.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; dpkg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; fire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;                         3.0.10+nobinonly-0ubuntu0.9.04.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              meta&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; popular&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mozilla&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; web&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; bro&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox-3.0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;                     3.0.10+nobinonly-0ubuntu0.9.04.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              safe&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; easy&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; web&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; browser&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Mozilla&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox-3.0-branding&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;            3.0.10+nobinonly-0ubuntu0.9.04.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              Package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; that&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ships&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; branding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox-3.0-dom-inspector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;       3.0.10+nobinonly-0ubuntu0.9.04.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              dummy&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; upgrade&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox-3.0-dom-in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox-dom-inspector&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;           3.0.10+nobinonly-0ubuntu0.9.04.1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              meta&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firefox-dom-inspector&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mozilla-firefox-locale-en-gb&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;    2.0.0.7+1-0ubuntu4&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              Mozilla&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Firefox&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; English&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; language/region&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; pack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ufw&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;                             0.27-0ubuntu2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;              program&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; managing&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; netfilter&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; firewall&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using the above commands can be a faster and more efficient alternative to searching for installed packages in Synaptic.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Stop system beep in VMware Player</title>
        <published>2009-05-25T13:41:52+00:00</published>
        <updated>2009-05-25T13:41:52+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/stop-system-beep-in-vmware-player/"/>
        <id>https://martinthetallguy.com/blog/stop-system-beep-in-vmware-player/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/stop-system-beep-in-vmware-player/">&lt;p&gt;Here’s how to stop the annoying beep (system bell) in VMware Player. These steps were tested with VMware Player 2.5 running a Debian Lenny server (guest) under Windows XP Professional (host).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the following file in Notepad: &lt;code&gt;C:\Documents and Settings\&amp;lt;your user&amp;gt;\Application Data\VMware\preferences.ini&lt;/code&gt; (the drive might be different depending on your setup).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following line at the end and save:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;mks.noBeep&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;TRUE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the virtual machine’s VMX configuration file in Notepad.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following line (same as above) at the end and save:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;mks.noBeep&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;TRUE&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch VMware Player and run the virtual machine - the beep should be gone!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Jaunty notifications in Thunderbird and Firefox</title>
        <published>2009-05-23T17:45:08+00:00</published>
        <updated>2009-05-23T17:45:08+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/jaunty-notifications-in-thunderbird-and-firefox/"/>
        <id>https://martinthetallguy.com/blog/jaunty-notifications-in-thunderbird-and-firefox/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/jaunty-notifications-in-thunderbird-and-firefox/">&lt;p&gt;One of the major new features in Ubuntu 9.04 (Jaunty) has of course been the &lt;a rel=&quot;external&quot; href=&quot;http://www.markshuttleworth.com/archives/265&quot;&gt;new notification system&lt;/a&gt;. For what it’s worth, I think it’s a pretty good, bold piece of work and the notifications look pretty good. The trouble is, as with any new framework, that not all applications out there are using the new notifications, leaving the overall impression somewhat disjointed. Good news is that with a bit of tweaking Firefox and Thunderbird can be made to send their messages to the notification area.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Firefox:&lt;/strong&gt; Credit for this tip to the &lt;a rel=&quot;external&quot; href=&quot;http://d0od.blogspot.com/2009/05/firefox-use-notification-jaunty.html&quot;&gt;OMG! Ubuntu blog&lt;/a&gt;: For Firefox, there is an &lt;a rel=&quot;external&quot; href=&quot;https://addons.mozilla.org/en-US/firefox/addon/9622&quot;&gt;add-on&lt;/a&gt; (currently experimental) which sends the “Download complete” messages to the notification area. You should also change the &lt;code&gt;browser.download.manager.showAlertOnComplete&lt;/code&gt; setting to &lt;code&gt;false&lt;/code&gt; under about:config to stop Firefox’s native little notification from popping up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thunderbird:&lt;/strong&gt; For Thunderbird’s “New email” notification, I found that the &lt;a rel=&quot;external&quot; href=&quot;http://www.nongnu.org/mailnotify/&quot;&gt;GNOME Mail Notification&lt;/a&gt; applet works very well. Follow these steps to set it up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First install Mail Notification by running&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mail-notification&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once installed, open the Mail Notification config dialog from System &amp;gt; Preferences &amp;gt; Mail Notification.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the first tab (General) click the Add button and browse to the Inbox file of the Thunderbird mail account for which you want to display notifications. The Inbox file should be under location similar to this one :&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/home/&amp;lt;your user&amp;gt;/.mozilla-thunderbird/&amp;lt;random code&amp;gt;.default/Mail/&amp;lt;your account&amp;gt;/Inbox&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(.mozilla-thunderbird is a hidden directory in your home directory).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that on the last tab (Message Popups) the “Enable message popups” check box is ticked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now configure Mail Notification to run on session start up: open System &amp;gt; Preferences &amp;gt; Startup Applications and click Add. Name and Description can be set to anything, under command enter&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;mail-notification&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;-sm-disable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Last step is to open Thunderbird and disable its native notification messages by going to Edit &amp;gt; Preferences and on the General tab uncheck “Show an alert”.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All going well you should now have Thunderbird using the new notifications and a cool applet in your notification area showing you if there are any unread messages in your Inbox.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>LinuxLinks: 20 of the Best Free Linux Books</title>
        <published>2009-05-20T13:22:18+00:00</published>
        <updated>2009-05-20T13:22:18+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/linuxlinks-20-of-the-best-free-linux-books/"/>
        <id>https://martinthetallguy.com/blog/linuxlinks-20-of-the-best-free-linux-books/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/linuxlinks-20-of-the-best-free-linux-books/">&lt;p&gt;I recently came across an article on &lt;a rel=&quot;external&quot; href=&quot;http://www.linuxlinks.com/&quot;&gt;LinuxLinks&lt;/a&gt; with links to a selection of &lt;a rel=&quot;external&quot; href=&quot;http://www.linuxlinks.com/portal/news/article.php?story=20090405162708127&quot;&gt;20 of the Best Free Linux Books&lt;/a&gt; available for download. Worth checking out.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Remove OC4J auto-startup after installing OBIEE</title>
        <published>2009-05-19T15:29:54+00:00</published>
        <updated>2009-05-19T15:29:54+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/remove-oc4j-auto-startup-after-installing-obiee/"/>
        <id>https://martinthetallguy.com/blog/remove-oc4j-auto-startup-after-installing-obiee/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/remove-oc4j-auto-startup-after-installing-obiee/">&lt;p&gt;Installing Oracle BI Enterprise Edition (OBIEE) will by default also install the OC4J application server. On Windows machines, it is not installed as a service, instead it runs in a dedicated command shell window. By default, OC4J will start automatically at the session startup, not only bringing up the annoying command line window but also slowing down your system. There is no setting in the installer to prevent this.&lt;/p&gt;
&lt;p&gt;To prevent the automatic startup, open Registry Editor and remove the value “oc4j” under the key &lt;code&gt;HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There is also a way to &lt;a rel=&quot;external&quot; href=&quot;http://radio.weblogs.com/0132383/stories/2004/04/28/oc4jAsAWindowsService.html&quot;&gt;make OC4J into a Windows service&lt;/a&gt;, although I haven’t tried this myself.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Tracker: corrupted index, high CPU</title>
        <published>2009-05-17T14:04:30+00:00</published>
        <updated>2009-05-17T14:04:30+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/tracker-corrupted-index-high-cpu/"/>
        <id>https://martinthetallguy.com/blog/tracker-corrupted-index-high-cpu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/tracker-corrupted-index-high-cpu/">&lt;p&gt;My only issue after an otherwise smooth upgrade to Ubuntu 9.04 (Jaunty) has been with &lt;a rel=&quot;external&quot; href=&quot;http://projects.gnome.org/tracker/&quot;&gt;Tracker&lt;/a&gt;. After logging in I noticed high disk and CPU usage, and eventually an error came up regarding corrupted index. I have tried several times to re-index, this did not work; also pausing all indexing in the tracker applet has no effect on the CPU usage by the trackerd process.&lt;/p&gt;
&lt;p&gt;The error and solution are &lt;a rel=&quot;external&quot; href=&quot;http://ubuntuforums.org/showthread.php?t=1138029&quot;&gt;discussed in more detail&lt;/a&gt; on Ubuntu Forums. The following suggestion fixed the problem for me:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; tracker-utils&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;tracker-processes&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;r&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then letting tracker rebuild the index at the start of next session. Note that the above command will remove all existing tracker files (this should not be a problem since they’re causing the issue in the first place) and that depending on how much data needs to be indexed it can take a while to recreate the index.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>BADSIG error in Ubuntu Update Manager</title>
        <published>2009-05-14T15:56:29+00:00</published>
        <updated>2009-05-14T15:56:29+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/badsig-error-in-ubuntu-update-manager/"/>
        <id>https://martinthetallguy.com/blog/badsig-error-in-ubuntu-update-manager/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/badsig-error-in-ubuntu-update-manager/">&lt;p&gt;Here are a few things you can try if you get the BADSIG error in Update Manager:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands from terminal shell:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; clean&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; Acquire::http::No-Cache=True&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the Ubuntu server from which updates are downloaded: System &amp;gt; Software Sources &amp;gt; Ubuntu Software tab &amp;gt; change the selected server in the “Download from” dropdown.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Resize and rotate images in Nautilus</title>
        <published>2009-05-14T12:57:16+00:00</published>
        <updated>2009-05-14T12:57:16+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/resize-and-rotate-images-in-nautilus/"/>
        <id>https://martinthetallguy.com/blog/resize-and-rotate-images-in-nautilus/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/resize-and-rotate-images-in-nautilus/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://packages.ubuntu.com/jaunty/nautilus-image-converter&quot;&gt;nautilus-image-converter&lt;/a&gt; is a helpful package which adds two entries to the Nautilus context menu for resizing and rotating images. It works for selections of multiple images, too, and has options for creating copies or editing the images in place.&lt;/p&gt;
&lt;p&gt;To install from command line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install nautilus-image-converter&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mount an ISO CD-ROM image in Windows</title>
        <published>2009-05-10T15:00:49+00:00</published>
        <updated>2009-05-10T15:00:49+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/mount-an-iso-cd-rom-image-in-windows/"/>
        <id>https://martinthetallguy.com/blog/mount-an-iso-cd-rom-image-in-windows/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/mount-an-iso-cd-rom-image-in-windows/">&lt;p&gt;In a half-unofficial way, Microsoft offers a driver and a small utility to mount ISO CD-ROM images as a drive in Windows XP and Vista. It can be downloaded from a &lt;a rel=&quot;external&quot; href=&quot;http://support.microsoft.com/kb/916902&quot;&gt;posting on Microsoft support site&lt;/a&gt; (here is the link &lt;a rel=&quot;external&quot; href=&quot;http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe&quot;&gt;directly to the self-extracting archive&lt;/a&gt;). The instructions are included in the “readme.txt” file. Although the program comes without any support from Microsoft it seemed to work fine for me.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Prompt for variables in Oracle SQL*Plus</title>
        <published>2009-05-09T10:02:31+00:00</published>
        <updated>2009-05-09T10:02:31+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/prompt-for-variables-in-oracle-sqlplus/"/>
        <id>https://martinthetallguy.com/blog/prompt-for-variables-in-oracle-sqlplus/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/prompt-for-variables-in-oracle-sqlplus/">&lt;p&gt;To prompt the user for a value when running SQL statements in SQL*Plus use the &amp;amp; symbol. The query below will prompt for variable “name” twice:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Hello &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;amp;name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; from&lt;/span&gt;&lt;span&gt; dual&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;union all&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Goodbye &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;amp;name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; from&lt;/span&gt;&lt;span&gt; dual;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To prompt for any given variable only once and use the entered value multiple times use two ampersands instead of one. The query below will prompt for the variable “name” once only:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Hello &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;amp;&amp;amp;name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; from&lt;/span&gt;&lt;span&gt; dual&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;union all&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Goodbye &lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;amp;&amp;amp;name&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; from&lt;/span&gt;&lt;span&gt; dual;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To prevent prompting altogeher, use the &lt;code&gt;set define&lt;/code&gt; command:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;set&lt;/span&gt;&lt;span&gt; define &lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;off&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;Hello world &amp;amp; dog&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; from&lt;/span&gt;&lt;span&gt; dual;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A few useful grep examples</title>
        <published>2009-05-06T13:41:23+00:00</published>
        <updated>2009-05-06T13:41:23+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/a-few-useful-grep-examples/"/>
        <id>https://martinthetallguy.com/blog/a-few-useful-grep-examples/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/a-few-useful-grep-examples/">&lt;p&gt;There is a &lt;a rel=&quot;external&quot; href=&quot;http://arstechnica.com/open-source/news/2009/05/command-line-made-easy-five-simple-recipes-for-grep.ars&quot;&gt;simple tutorial&lt;/a&gt; on Ars Technica’s &lt;a rel=&quot;external&quot; href=&quot;http://arstechnica.com/open-source/&quot;&gt;Open Ended&lt;/a&gt; site with several useful examples of the &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Grep&quot;&gt;grep command&lt;/a&gt;. Further examples can be found in the &lt;a rel=&quot;external&quot; href=&quot;http://episteme.arstechnica.com/eve/forums?a=dl&amp;amp;f=174096756&amp;amp;x_id=mtid37406&quot;&gt;comments section&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Convert DICOM images to JPEG</title>
        <published>2009-05-06T13:27:27+00:00</published>
        <updated>2009-05-06T13:27:27+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/convert-dicom-images-to-jpeg/"/>
        <id>https://martinthetallguy.com/blog/convert-dicom-images-to-jpeg/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/convert-dicom-images-to-jpeg/">&lt;p&gt;Medical images, e.g. X-Rays, are commonly stored in the &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Dicom&quot;&gt;DICOM format&lt;/a&gt;. By default you won’t be able to open these in Ubuntu, but there is actually a &lt;a rel=&quot;external&quot; href=&quot;http://packages.ubuntu.com/jaunty/dcmtk&quot;&gt;package in the repositories&lt;/a&gt; which lets you convert DICOM image files to more common formats, e.g. JPEG, PNG or bitmap.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; dcmtk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;dcmj2pnm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; +oj&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; img00000&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; img00000.jpg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above commands will install the &lt;a rel=&quot;external&quot; href=&quot;http://packages.ubuntu.com/jaunty/dcmtk&quot;&gt;dcmtk package&lt;/a&gt; and take a DICOM image img00000 and convert it to &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Jpeg#JPEG_compression&quot;&gt;lossy JPEG&lt;/a&gt; image img00000.jpg. The &lt;code&gt;dcmj2pnm&lt;/code&gt; command also supports other output formats, e.g. PNG. To print the help text simply run&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dcmj2pnm -h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There are other commands in the dcmtk package, e.g. &lt;code&gt;dcmcjpeg&lt;/code&gt; which provides a lot of JPEG encoding options.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Lightweight Xubuntu</title>
        <published>2009-05-04T12:59:19+00:00</published>
        <updated>2009-05-04T12:59:19+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/lightweight-xubuntu/"/>
        <id>https://martinthetallguy.com/blog/lightweight-xubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/lightweight-xubuntu/">&lt;p&gt;The latest issue of &lt;a rel=&quot;external&quot; href=&quot;http://distrowatch.com/weekly.php?issue=20090504&quot;&gt;DistroWatch Weekly&lt;/a&gt; has a feature on &lt;a rel=&quot;external&quot; href=&quot;http://distrowatch.com/weekly.php?issue=20090504#feature&quot;&gt;reducing the memory footprint of Xubuntu 9.04&lt;/a&gt;. This is in response to an &lt;a rel=&quot;external&quot; href=&quot;http://distrowatch.com/weekly.php?issue=20090427#feature&quot;&gt;earlier comparison&lt;/a&gt; of performance and memory consumption between Xubuntu and Debian with Xfce, published in the previous edition of DistroWatch Weekly.&lt;/p&gt;
&lt;p&gt;Unfortunately the sequence of steps starts by installing a minimal Ubuntu setup with command line only and then adding to it bit by bit, meaning a reinstall. I would also like to see the steps of simplifying a full blown Xubuntu setup by removing unnecessary components.&lt;/p&gt;
&lt;p&gt;As an aside, I am typing this post on a fairly old laptop with only 256 MB RAM running Xubuntu 9.04 (Jaunty), and I have to say that for light everyday use (ie. Firefox, Thunar, Terminal, Mousepad) it is absolutely fine. I have been toying with the idea of installing Zenwalk or Debian (with Xfce of course!), we’ll see.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Problems with USB memory stick in Xubuntu 9.04</title>
        <published>2009-05-02T06:59:49+00:00</published>
        <updated>2009-05-02T06:59:49+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/problems-with-usb-memory-stick-in-xubuntu-904/"/>
        <id>https://martinthetallguy.com/blog/problems-with-usb-memory-stick-in-xubuntu-904/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/problems-with-usb-memory-stick-in-xubuntu-904/">&lt;p&gt;After upgrading from Xubuntu 8.04 (Hardy) to 9.04 (Jaunty), the automount feature stopped working for a particular USB memory stick. It wasn’t even listed when I ran commands like&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo fdisk -l&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;&lt;code&gt;more /proc/partitions&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But interestingly, when I plugged in my camera via a USB cable, the memory card inside it was automounted, and even the troublesome USB stick was then recognized and mounted!&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;http://ubuntuforums.org/showthread.php?t=311816&quot;&gt;solution&lt;/a&gt; turned out to be manually updating the initramfs image of the new kernel 2.6.28-11 installed as part of the Jaunty upgrade. After running the command below and rebooting the machine, the USB stick is now recognized and automounted immediately after inserting it.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo update-initramfs -u -k `uname -r`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note the &lt;a rel=&quot;external&quot; href=&quot;http://rute.2038bug.com/node10.html.gz#SECTION0010120000000000000000&quot;&gt;backward quotes&lt;/a&gt; in the above command.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Login as someone else</title>
        <published>2009-04-30T16:03:38+00:00</published>
        <updated>2009-04-30T16:03:38+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/login-as-someone-else/"/>
        <id>https://martinthetallguy.com/blog/login-as-someone-else/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/login-as-someone-else/">&lt;p&gt;Sometimes you may want to log in with a different user account in Terminal without logging out from your X session or switching to an unused virtual console. There are two different approaches to do this in Ubuntu: interestingly, it is possible without even knowing the other user’s password.&lt;/p&gt;
&lt;p&gt;Approach 1: if you know the password of the other account (&lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; is replaced with the account you want to log in as, e.g. &lt;code&gt;bob&lt;/code&gt; or &lt;code&gt;pinky&lt;/code&gt; or whatever):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;su -l &amp;lt;username&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Approach 2: if you don’t know their password. This only works if you have administrative privileges, i.e. your account is in the sudoers file. The password you are prompted for is your own one:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo -i -u &amp;lt;username&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or even execute the command from our approach 1 with sudo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo sh -c &#39;su -l &amp;lt;username&amp;gt;&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note: It goes without saying that you should behave responsibly and not abuse this to gain access to other user’s data.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Two quick changes in Firefox about:config</title>
        <published>2009-04-29T12:41:54+00:00</published>
        <updated>2009-04-29T12:41:54+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/two-quick-changes-in-firefox-aboutconfig/"/>
        <id>https://martinthetallguy.com/blog/two-quick-changes-in-firefox-aboutconfig/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/two-quick-changes-in-firefox-aboutconfig/">&lt;p&gt;Here are two quick and simple changes which I always make on a fresh Firefox install. They are both accessed through the about:config URI. Simply type about:config to the Firefox address bar and accept the disclaimer. This reveals a lot of “hidden” settings which cannot be changed directly through the preferences dialogs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To make backspace button go back in history (this is default in Windows but not in Linux), change the value of &lt;code&gt;browser.backspace_action&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To open the result of search from the search bar in a new tab change the value of &lt;code&gt;browser.search.openintab&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A reference of these and other about:config parameters can be found in the &lt;a rel=&quot;external&quot; href=&quot;http://kb.mozillazine.org/Firefox_:_FAQs_:_About:config_Entries&quot;&gt;MozillaZine Knowledge Base&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>BIRT: Prevent text wrapping</title>
        <published>2009-04-29T12:34:31+00:00</published>
        <updated>2009-04-29T12:34:31+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/birt-prevent-text-wrapping/"/>
        <id>https://martinthetallguy.com/blog/birt-prevent-text-wrapping/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/birt-prevent-text-wrapping/">&lt;p&gt;The property which controls text wrapping (line breaks) in table cells and other objects in BIRT is accessed in the Properties Editor window under Properties &amp;gt; Advanced &amp;gt; Text &amp;gt; Whitespace. Simply set the value to “No Wrapping” and the contents of the cell will be displayed on a single line.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Disable laptop touchpad tapping in Xubuntu 9.04</title>
        <published>2009-04-27T16:00:43+00:00</published>
        <updated>2009-04-27T16:00:43+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu-904/"/>
        <id>https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu-904/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu-904/">&lt;p&gt;In a &lt;a href=&quot;https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu/&quot;&gt;previous post&lt;/a&gt; I detailed steps on how to disable touchpad tapping in Xubuntu 8.04. Unfortunately the package gsynaptics-mcs-plugin which provides the Xfce Settings Manager plugin is obsolete in Xubuntu 9.04 (Jaunty) and therefore the annoyance of touchpad tapping and scrolling is back after upgrading from Hardy. Also, it turns out that the responsibility of managing input devices has been moved from the X server to HAL (Hardware Abstraction Layer) and so different steps are required in Xubuntu 9.04 / Xfce 4.6:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Confirm that HAL is aware of the touchpad by running:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;lshal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; synaptics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The command should produce output similar to this&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;input.x11_driver = &amp;#39;synaptics&amp;#39;  (string)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to create a new file to enable the SHMConfig option in HAL&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mousepad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/hal/fdi/policy/shmconfig.fdi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Paste the following into the file and save:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;xml&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;ISO-8859-1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;deviceinfo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;device&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; key&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;input.x11_driver&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; string&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;synaptics&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;merge&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; key&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;input.x11_options.SHMConfig&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;merge&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;match&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;device&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#22863A, #85E89D);&quot;&gt;deviceinfo&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reboot your machine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to verify that HAL has picked up the setting&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;lshal&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; x11_options&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should produce output like this&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   input.x11_options.SHMConfig = &amp;#39;True&amp;#39;  (string)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following command&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;synclient&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; TouchpadOff=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that touchpad tapping and scrolling are now disabled.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The same command has to be run at the startup of each session. To do this, go to Applications &amp;gt; Settings &amp;gt; Session and Startup and on the Application Autostart tab add a new entry. Name and Description can be set to whatever, Command is the same as above:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;synclient&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; TouchpadOff=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Versions</title>
        <published>2009-04-25T06:56:23+00:00</published>
        <updated>2009-04-25T06:56:23+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/versions/"/>
        <id>https://martinthetallguy.com/blog/versions/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/versions/">&lt;p&gt;Here are a few useful commands for finding version information of various system components.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Linux distribution name and version&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;lsb_release&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;idrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;System information, including kernel version&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;uname&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;X.org version&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Java version&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;java&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Package version&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;dpkg&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; package&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Enable Ctrl-Alt-Backspace to restart X</title>
        <published>2009-04-25T06:15:28+00:00</published>
        <updated>2009-04-25T06:15:28+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/enable-ctrl-alt-backspace-to-restart-x/"/>
        <id>https://martinthetallguy.com/blog/enable-ctrl-alt-backspace-to-restart-x/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/enable-ctrl-alt-backspace-to-restart-x/">&lt;p&gt;UPDATE: These steps work fine for Ubuntu 9.04 (Jaunty). For more recent Ubuntu versions you should take a look at &lt;a href=&quot;https://martinthetallguy.com/blog/ctrl-alt-backspace-to-restart-x-in-karmic/&quot;&gt;this later post&lt;/a&gt; which has the correct steps.&lt;/p&gt;
&lt;p&gt;The Ctrl-Alt-Backspace key combination which restarts X is by default disabled in X version 1.6 (and hence in Ubuntu 9.04). Follow the steps below to re-enable it.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt; Make a backup of your xorg.conf file. Note: messing up this file is not a good idea, so make a backup and be careful with it.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/X11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; xorg.conf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; xorg.conf.backup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open xorg.conf for editing (substitute &lt;code&gt;gedit&lt;/code&gt; for &lt;code&gt;mousepad&lt;/code&gt; if you are on Ubuntu)&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mousepad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/X11/xorg.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following section at the bottom of the file:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Section &amp;quot;ServerFlags&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Option    &amp;quot;DontZap&amp;quot;    &amp;quot;no&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EndSection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the file, log out and back in. You can try the Ctrl-Alt-Backspase combination at the login window to make sure it works as expected.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mount an ISO CD-ROM image</title>
        <published>2009-04-24T04:14:02+00:00</published>
        <updated>2009-04-24T04:14:02+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/mount-an-iso-cd-rom-image/"/>
        <id>https://martinthetallguy.com/blog/mount-an-iso-cd-rom-image/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/mount-an-iso-cd-rom-image/">&lt;p&gt;Most CD-ROM downloads come as ISO images which can be burned onto a CD. They can also be mounted as drives without actually burning them onto a disk by using the mount loopback command. The command below mounts the image foobar.iso in user’s home directory as /media/cdrom:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; loop&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/foobar.iso&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /media/cdrom&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This assumes that a /media/cdrom directory exists on you system (it does on Ubuntu). However, it’s easy enough to use a different directory, e.g.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; foobar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; loop&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; foobar.iso&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; foobar&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The command to unmount is also straightforward&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; unmount&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /media/cdrom&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fix Wine&#39;s Browse C: Drive</title>
        <published>2009-04-23T14:22:00+00:00</published>
        <updated>2009-04-23T14:22:00+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/fix-wines-browse-c-drive/"/>
        <id>https://martinthetallguy.com/blog/fix-wines-browse-c-drive/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/fix-wines-browse-c-drive/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.winehq.org/&quot;&gt;Wine&lt;/a&gt; adds a menu entry “Browse C: Drive” in the Applications menu. By default, this doesn’t work and produces an error message in Xubuntu 8.04. Here’s how to fix it.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to open the configuration file which controls what the menu entry does:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mousepad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /usr/share/applications/wine-browsedrive.desktop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Replace the line&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;desktop&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;Exec&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span&gt;xdg-open ~/.wine/drive_c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;with the line&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;desktop&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;Exec&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;=&lt;/span&gt;&lt;span&gt;xdg-open $HOME/.wine/drive_c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save, log out and back in (or Ctrl-Alt-Backspace to restart X) and the menu should now open the drive_c directory in Thunar.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And what is the unfamiliar &lt;code&gt;xdg-open&lt;/code&gt; command, one might ask? According to its man page, it opens a URL (file, http, ftp) in the user’s preferred application. But apparently it does not recognize the ~ shorthand for the current user’s home directory.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Alternate row styling in BIRT</title>
        <published>2009-04-22T12:57:56+00:00</published>
        <updated>2009-04-22T12:57:56+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/alternate-row-styling-in-birt/"/>
        <id>https://martinthetallguy.com/blog/alternate-row-styling-in-birt/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/alternate-row-styling-in-birt/">&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The technique documented in this post is applicable for alternating styles of detail rows. For a way of achieving the effect in a table consisting of summary rows only, please refer to &lt;a href=&quot;https://martinthetallguy.com/blog/alternate-row-styling-for-summary-rows/&quot;&gt;this later post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To set different styles for alternate table detail rows in BIRT:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the detail row - hover over the table, then click the table button which appears in the bottom left corner and finally click the row handle on the left hand side. The Property Editor window&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Property Editor go to the Highlights tab (last horizontal tab) and click Add. This will open the Highlight Rule dialog.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter the following condition (use 0 for styling the even rows or 1 for odd rows)&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;row.__rownum % 2 | Equal to | 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now set the styling you want, for example different background colour, and finally click OK to close the dialog window.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Change Oracle XE web ports</title>
        <published>2009-04-21T13:48:56+00:00</published>
        <updated>2009-04-21T13:48:56+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/change-oracle-xe-web-ports/"/>
        <id>https://martinthetallguy.com/blog/change-oracle-xe-web-ports/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/change-oracle-xe-web-ports/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.oracle.com/technology/products/database/xe/index.html&quot;&gt;Oracle Database XE&lt;/a&gt; (Express Edition, sometimes also referred to as Apex) comes with an embedded web interface for administration. By default the HTTP port of this web interface is 8080. This can be checked by running the query below when logged in as system:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SQL&amp;gt; select dbms_xdb.gethttpport from dual;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In order to change the port number, run the following SQL (the port is changed to 8181 in the example below) and restart the database:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;SQL&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; begin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;dbms_xdb&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;sethttpport&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;8181&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;end&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want to disable the HTTP access altogether, you can set the port number to 0.&lt;/p&gt;
&lt;p&gt;There are also similar methods &lt;code&gt;dbms_xdb.getftpport&lt;/code&gt; and &lt;code&gt;dbms_xdb.setftpport&lt;/code&gt;, although I am not sure in what context FTP is used with Oracle XE. By default the port is 0, i.e. disabled.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>This incident will be reported</title>
        <published>2009-04-21T01:23:12+00:00</published>
        <updated>2009-04-21T01:23:12+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/this-incident-will-be-reported/"/>
        <id>https://martinthetallguy.com/blog/this-incident-will-be-reported/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/this-incident-will-be-reported/">&lt;p&gt;My &lt;a href=&quot;https://martinthetallguy.com/blog/add-user-to-group-using-usermod-command/&quot;&gt;recent misadventures&lt;/a&gt; with adding a group membership for my user and in the process managing to remove all other groups (including admin) got me thinking about the message “&lt;code&gt;... is not in the sudoers file. This incident will be reported.&lt;/code&gt;” Exactly where and how and to whom is this reported?&lt;/p&gt;
&lt;p&gt;Well, according to &lt;a rel=&quot;external&quot; href=&quot;http://www.linuxquestions.org/questions/ubuntu-63/this-incident-will-be-reported-683421/&quot;&gt;clever people on linuxquestions.org&lt;/a&gt;, the log file where unsuccessful sudo attempts are logged (as well as other things related to authentication) is &lt;code&gt;/var/log/auth.log&lt;/code&gt;. The command below will show you just those entries for unsucessful sudo attempts:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grep &quot;user NOT in sudoers&quot; /var/log/auth.log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note also that a new file is created once the log reaches a certain size, and older files are archived. So if you need to check properly you will also want to look into the archived files (listing from my old Xubuntu laptop shown below):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /var/log/auth.log&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;-rw-r-----&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; syslog&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; adm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  2319&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 2009-04-20&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 21:38&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /var/log/auth.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;-rw-r-----&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; syslog&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; adm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 68936&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 2009-04-20&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 06:33&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /var/log/auth.log.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;-rw-r-----&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; syslog&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; adm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  3697&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 2009-04-13&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 06:17&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /var/log/auth.log.1.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;-rw-r-----&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; syslog&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; adm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  1182&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 2009-04-04&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 10:17&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /var/log/auth.log.2.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;-rw-r-----&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; syslog&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; adm&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;  2088&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 2009-03-26&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; 19:04&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /var/log/auth.log.3.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Commands for Gnome Power Manager and Network Manager</title>
        <published>2009-04-20T12:48:12+00:00</published>
        <updated>2009-04-20T12:48:12+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/commands-for-gnome-power-manager-and-network-manager/"/>
        <id>https://martinthetallguy.com/blog/commands-for-gnome-power-manager-and-network-manager/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/commands-for-gnome-power-manager-and-network-manager/">&lt;p&gt;Every now and then the Power Manager and/or Network Manager applets crash and disappear from the notification area on my old Xubuntu 8.04 laptop. There have been some bugs posted about this on &lt;a rel=&quot;external&quot; href=&quot;https://launchpad.net/&quot;&gt;Launchpad&lt;/a&gt;, and it seems as if it should be fixed in more recent releases. Leaving that aside, here are the commands to run the two applets from command line.&lt;/p&gt;
&lt;p&gt;Gnome Network Manager applet:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nm-applet &amp;amp;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Gnome Power Manager:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gnome-power-manager&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or alternatively (this one will also open the preferences dialog):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gnome-power-preferences&lt;/code&gt;&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Securing SSH</title>
        <published>2009-04-20T02:35:02+00:00</published>
        <updated>2009-04-20T02:35:02+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/securing-ssh/"/>
        <id>https://martinthetallguy.com/blog/securing-ssh/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/securing-ssh/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.theregister.co.uk/2009/04/17/ssh_attacks/&quot;&gt;This article&lt;/a&gt; on The Register has a link to a very good page on CentOS website with &lt;a rel=&quot;external&quot; href=&quot;http://wiki.centos.org/HowTos/Network/SecuringSSH&quot;&gt;tips on securing OpenSSH&lt;/a&gt;. The tips are applicable for all distros, not just CentOS, and are definitely worth going through and implementing if you have SSH enabled on your server.&lt;/p&gt;
&lt;p&gt;Good luck and stay secure.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Add user to group with usermod</title>
        <published>2009-04-18T10:12:30+00:00</published>
        <updated>2009-04-18T10:12:30+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/add-user-to-group-using-usermod-command/"/>
        <id>https://martinthetallguy.com/blog/add-user-to-group-using-usermod-command/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/add-user-to-group-using-usermod-command/">&lt;p&gt;Here is a very simple one which caught me out: you want to add your user to a group through command line. The command is very straightforward:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo usermod -aG tools hammer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This adds the user “hammer” to the group “tools”. Notice the -a switch (for add). This means “hammer” will become member of “tools” and keep his exiting group memberships. However, if you run the command without the -a switch:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo usermod -G tools hammer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then “hammer” becomes member of “tools” (all well and good) but has lost its other group associations defined previously - including on Ubuntu the group “admin”. So that next time you log in (you need to log out and back in for the group memberships to be reflected properly) and try to run sudo something you get a nice message like so:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hammer is not in the sudoers file. This incident will be reported.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Luckily, I had another user with admin priviledges on the machine and so was able to add all the groups which I removed by mistake. In any case, I will now remember to include the -a option next time I run usermod to add user to a group!&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Greasemonkey script to get book ISBN number using GM_xmlhttpRequest</title>
        <published>2009-04-17T19:21:52+00:00</published>
        <updated>2009-04-17T19:21:52+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/greasemonkey-script-to-get-book-isbn-number-using-gm-xmlhttprequest/"/>
        <id>https://martinthetallguy.com/blog/greasemonkey-script-to-get-book-isbn-number-using-gm-xmlhttprequest/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/greasemonkey-script-to-get-book-isbn-number-using-gm-xmlhttprequest/">&lt;p&gt;A bit of background: for a while now I have been buying books from the &lt;a rel=&quot;external&quot; href=&quot;http://www.orionbooks.co.uk/Masterworks-SF-list.aspx&quot;&gt;SF Masterworks&lt;/a&gt; series from Orion Publishing, mainly when I am in a bookshop and I see a book from the series which I don’t yet have. So far I have bought sixteen of the books, and I though it would be nice to have the whole series (perhaps they will be considered collectable one day, who knows). Having spoken to my local bookshop, it turn out they would happy to order the rest of the series for me if I supply them with the books’ ISBN numbers.&lt;/p&gt;
&lt;p&gt;Now, the &lt;a rel=&quot;external&quot; href=&quot;http://www.orionbooks.co.uk/Masterworks-SF-list.aspx&quot;&gt;SF Masterworks&lt;/a&gt; series page has a nice table with the books titles and authors as well as links to a more detailed page for each book. The table on the page can be nicely copied and pasted into a spreadsheet (&lt;a rel=&quot;external&quot; href=&quot;http://docs.google.com&quot;&gt;Google Docs&lt;/a&gt; in my case) but the problem is that the ISBN numbers are not displayed on this over page, but on each book’s detailed page. Rather then having to click and copy &amp;amp; paste 70 times, I thought this would be a good opportunity to play with the &lt;a rel=&quot;external&quot; href=&quot;http://diveintogreasemonkey.org/api/gm_xmlhttprequest.html&quot;&gt;GM_xmlhttpRequest&lt;/a&gt; functionality in &lt;a rel=&quot;external&quot; href=&quot;http://www.greasespot.net/&quot;&gt;Greasemonkey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The script is &lt;a rel=&quot;external&quot; href=&quot;http://userscripts.org/scripts/show/46923&quot;&gt;uploaded&lt;/a&gt; on &lt;a rel=&quot;external&quot; href=&quot;http://userscripts.org/&quot;&gt;userscripts.org&lt;/a&gt; (together with a &lt;a rel=&quot;external&quot; href=&quot;http://userscripts.org/users/41964/scripts&quot;&gt;few of my other scripts&lt;/a&gt;), although being targetted for a one-off job I don’t think it will become a hit!&lt;/p&gt;
&lt;p&gt;So, what are the learnings from this little exercice?&lt;/p&gt;
&lt;p&gt;At a high level, the logic being the script is something along the lines:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Loop through the table&lt;/li&gt;
&lt;li&gt;On each row get the link to the detailed page&lt;/li&gt;
&lt;li&gt;Get the page via GM_xmlhttpRequest&lt;/li&gt;
&lt;li&gt;Process the page to get the ISBN number&lt;/li&gt;
&lt;li&gt;Display the ISBN number on the master page&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Naively, I fell into the trap of calling GM_xmlhttpRequest from a for loop. This doesn’t work because GM_xmlhttpRequest works in an asynchronous fashion, meaning that the rest of the code will not wait for it to finish.&lt;/p&gt;
&lt;p&gt;I then read up quite a bit on the related topic of closures and scope in JavaScript and ultimately decided that whilst it’s a very interesting topic, for getting things done I needed an quicker and (for me ) an easier solution.&lt;/p&gt;
&lt;p&gt;The way I decided to go was good old recursion (“you can’t understand recursion unless you understand recursion”). So an array of links to the detailed pages is built up first, then we iterate over them - but rather than having GM_xmlhttpRequest in the loop itself, I let its callback function increment the loop counter and call the next iteration. The counter and the array of links are global variables, to get around this tricky problem with closures.&lt;/p&gt;
&lt;p&gt;As far as processing the results of GM_xmlhttpRequest, it is a bit of a letdown that they come as a text and it is not possible to use DOM (it can be done for XML with &lt;a rel=&quot;external&quot; href=&quot;http://diveintogreasemonkey.org/patterns/parse-xml.html&quot;&gt;DOMParser&lt;/a&gt; but there is nothing in Greasemonkey for parsing HTML text). So to retrieve the value of the ISBN number from the detailed page it is back to plain old string search.&lt;/p&gt;
&lt;p&gt;It’s probably not the cleanest solution out there, but given that the objective was to save some time and effort with manual copy &amp;amp; paste for a one-off job, it works great. Following the &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/KISS_principle&quot;&gt;KISS principle&lt;/a&gt;, I try not over-engineer something which is ultimately throwaway. At the same time, I got to play with GM_xmlhttpRequest for the first time, so the learning bonus is still there.&lt;/p&gt;
&lt;p&gt;Now it’s off to the shop to get those books ordered - happy reading!&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Restore menu bar in Xubuntu Terminal</title>
        <published>2009-04-17T12:11:31+00:00</published>
        <updated>2009-04-17T12:11:31+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/restore-menu-bar-in-xubuntu-terminal/"/>
        <id>https://martinthetallguy.com/blog/restore-menu-bar-in-xubuntu-terminal/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/restore-menu-bar-in-xubuntu-terminal/">&lt;p&gt;To save a bit of space, you can remove the menu bar in Xubuntu Terminal (Edit &amp;gt; Preferences &amp;gt; Appearance &amp;gt; uncheck “Display menubar in new window”. Here are the steps to restore it later on (since you can’t access the Preferences dialog without the menu itself!).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the following command to open the terminal configuration file in Mousepad:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;mousepad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; ~/.config/Terminal/terminalrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the line &lt;code&gt;MiscMenubarDefault=FALSE&lt;/code&gt; to &lt;code&gt;MiscMenubarDefault=TRUE&lt;/code&gt; and save the file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;That’s it - restart your Terminal and marvel at the beauty of its menu bar.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Disable laptop touchpad tapping in Xubuntu</title>
        <published>2009-04-17T12:03:53+00:00</published>
        <updated>2009-04-17T12:03:53+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu/"/>
        <id>https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu/">&lt;p&gt;UPDATE: These steps work fine for Xubuntu 8.04 (Hardy). For more recent Xubuntu versions you should take a look at &lt;a href=&quot;https://martinthetallguy.com/blog/disable-laptop-touchpad-tapping-in-xubuntu-904/&quot;&gt;this later post&lt;/a&gt; which has the correct steps.&lt;/p&gt;
&lt;p&gt;One of the things I find very annoying is the default “tap to click” behaviour of laptop touchpads. Here are easy steps how to configure Xubuntu to stop the touchpad tapping. It will also let you configure other touchpad settings. It comes courtesy of the &lt;a rel=&quot;external&quot; href=&quot;http://goodies.xfce.org/&quot;&gt;Xfce goodies project&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the gsynpatics plugin for Xubuntu Settings Manager&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; gsynaptics-mcs-plugin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt; Make a backup of your xorg.conf file. Note: messing up this file is not a good idea, so make a backup and be careful with it.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /etc/X11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; xorg.conf&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; xorg.conf.backup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open xorg.conf (in vi or mousepad or whatever)&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; mousepad&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; xorg.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Look for a block starting with &lt;code&gt;Section &quot;InputDevice&quot;&lt;/code&gt;, with &lt;code&gt;Identifier    &quot;Synaptics Touchpad&quot;&lt;/code&gt; on second line and ending with &lt;code&gt;EndSection&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the above block (e.g. just above the EndSection line) add the following line:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Option		&amp;quot;SHMConfig&amp;quot;		&amp;quot;on&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the file xorg.conf&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart X (Ctrl+Alt+Backspace)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the Applications menu, go to Settings &amp;gt; Settings Manager. This opens the in the Xfce Settings Manager where you should see a new entry called “Synaptics settings”.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open this and to disable tapping simply uncheck “Enable tapping” on the middle tab.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Good luck and happy Xubuntuing on your laptops.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Install RealPlayer as a Firefox plug-in in Xubuntu</title>
        <published>2009-04-17T11:42:16+00:00</published>
        <updated>2009-04-17T11:42:16+00:00</updated>
        
        <author>
          <name>Martin Hammer</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://martinthetallguy.com/blog/install-realplayer-in-xubuntu-as-firefox-plug-in/"/>
        <id>https://martinthetallguy.com/blog/install-realplayer-in-xubuntu-as-firefox-plug-in/</id>
        
        <content type="html" xml:base="https://martinthetallguy.com/blog/install-realplayer-in-xubuntu-as-firefox-plug-in/">&lt;p&gt;I used the following steps to install RealPlayer in order to listen to &lt;a rel=&quot;external&quot; href=&quot;http://www.bbc.co.uk/iplayer/radio&quot;&gt;BBC Radio&lt;/a&gt;. Although I did this on Xubuntu 8.04, it should also work for Ubuntu and other distros.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download and install RealPlayer for Linux from &lt;a rel=&quot;external&quot; href=&quot;http://www.real.com/linux&quot;&gt;Real&lt;/a&gt;. I downloaded the deb package and installed it through gdebi.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My install path was now &lt;code&gt;/opt/real/RealPlayer.&lt;/code&gt; Check that the following two files exist:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/opt/real/RealPlayer/mozilla/nphelix.so&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/opt/real/RealPlayer/mozilla/nphelix.xpt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy those two files to the Firefox plugins directory (the code below should be a single line):&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; cp&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /opt/real/RealPlayer/mozilla/nphelix.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; /usr/lib/firefox-addons/plugins/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart Firefox. You can verify that Firefox has picked up the plugin under Tools &amp;gt; Add-ons &amp;gt; Plugins. It should say something along the lines of “Helix DNA Plugin: RealPlayer G2 Plug-In Compatible”.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Good luck and happy listening.&lt;/p&gt;
</content>
        
    </entry>
</feed>
