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

<channel>
	<title>echofish</title>
	<atom:link href="http://blog.echofish.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.echofish.org</link>
	<description></description>
	<lastBuildDate>Sat, 04 Sep 2010 11:40:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Why do people hate PHP?</title>
		<link>http://blog.echofish.org/?p=503</link>
		<comments>http://blog.echofish.org/?p=503#comments</comments>
		<pubDate>Fri, 20 Aug 2010 14:44:19 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.echofish.org/?p=503</guid>
		<description><![CDATA[I personally like PHP quite well, but I have seen much dislike for PHP on forums, IRC channels etc. So now I have asked a little around to find out what&#8217;s wrong with PHP&#8230; The naming of functions seem to cause much hatred. Why is it called str_shuffle(), str_repeat() and str_replace(), but strlen(), strpos() and [...]]]></description>
			<content:encoded><![CDATA[<p>I personally like PHP quite well, but I have seen much dislike for PHP on forums, IRC channels etc. So now I have asked a little around to find out what&#8217;s wrong with PHP&#8230;</p>
<p>The naming of functions seem to cause much hatred. Why is it called <em>str_shuffle()</em>, <em>str_repeat()</em> and <em>str_replace()</em>, but <em>strlen()</em>, <em>strpos()</em> and <em>strrev()</em>?</p>
<p>The order of parameters also seem to piss people off, for instance <em>array_filter ( array $input [, callback $callback ] )</em> and then we look at <em>array_map ( callback $callback , array $arr1 [, array $... ] )</em>. Doesn&#8217;t make sense.</p>
<p>The need to use <a href="http://php.net/curl">cURL</a> if you need to work with cookies.</p>
<p>The use if php.ini where you can set magic_quotes, register_globals and safe mode on / off does not make the code very portable. Say you write a program with safe mode = on in the back of your head and then the program are used on another server with safe mode off&#8230; </p>
<p>And then we have PEAR as quoted on a dude at <a href="http://reddit.com">reddit.com</a> &#8220;Oh, and then there is PEAR. Hey, I&#8217;d like to install 5,000 buggy libraries on my website.&#8221;</p>
<p>And there is the dollar sign ($) which seems like waste of space, the lack of the opportunity to use threads and it&#8217;s easy to write bad and sloppy code, while other languages forces the user to write better code.</p>
<p>But the main reason I personally think is that there are some many people learning PHP as their first language (including myself) and then the language is associated with newbies.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=503</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Golf Tips &amp; Tricks</title>
		<link>http://blog.echofish.org/?p=478</link>
		<comments>http://blog.echofish.org/?p=478#comments</comments>
		<pubDate>Fri, 13 Aug 2010 18:05:24 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpgolf]]></category>

		<guid isPermaLink="false">http://blog.echofish.org/?p=478</guid>
		<description><![CDATA[The term Perl Golf comes from competitions where the objective is to sovle programming challenges with as few bytes (strokes) as possible. Read more here. Golfing in Perl is much more efficient then with PHP, you can tweak and hack Perl indefinitely. But I&#8217;m going to show some tips and tricks of how to make [...]]]></description>
			<content:encoded><![CDATA[<p>The term Perl Golf comes from competitions where the objective is to sovle programming challenges with as few bytes (strokes) as possible. Read more <a href="http://en.wikipedia.org/wiki/Perl_Golf_Apocalypse">here</a>.<img class="alignright" src="http://upload.wikimedia.org/wikipedia/commons/b/bc/Map_symbol_golf_course_02.png" alt="" width="90" height="100" /></p>
<p>Golfing in Perl is much more efficient then with PHP, you can tweak and hack Perl indefinitely. But I&#8217;m going to show some tips and tricks of how to make PHP code as little as possible.</p>
<p>Of course, use short one char variable names, remove useless whitespace (spaces, newlines, tabs etc). Use echo instead of print. Don&#8217;t write the same code twice and in general think outside the box.</p>
<p>Use short php tag you don&#8217;t need to close the php tag. So you can do this without any problem:</p>
<pre class="brush: php;">&lt;?
print &quot;hello world&quot;;</pre>
<p>and if possible:</p>
<pre class="brush: php;">&lt;?=&quot;hello world&quot;;</pre>
<p>You don&#8217;t need to add quotes on single word strings. It will give a notice, but most golf competitions will ignore notices:</p>
<pre class="brush: php;">$foo = bar;</pre>
<p>Multi assign variables:</p>
<pre class="brush: php;">$a=$b=0;</pre>
<p>Use actual newline instead of &#8220;\n&#8221;. You will save a whole byte.</p>
<pre class="brush: php;">print &quot;hello world
&quot;;</pre>
<p>Don&#8217;t use braces {} where you don&#8217;t need to. And in some cases add as much as possible inside it.</p>
<pre class="brush: php;">for($a='a',$b='b',$i=0;$i&lt;10;$i++,$a=$b)echo$i;</pre>
<p>Use short ifs instead of the ordinary if operator:</p>
<pre class="brush: php;">$a = $x == 1? 'a' : 'b';</pre>
<p>In the above example you can make it even smaller if you drop the checking of $x being 1, by just checking if its true:</p>
<pre class="brush: php;">$a = $x? 'a' : 'b';</pre>
<p>You can do that in a for-loop also:</p>
<pre class="brush: php;">for($i = 10; $i; $i--);</pre>
<p>You can assign multiple variables and print them out in one statement:</p>
<pre class="brush: php;">echo $a = &quot;hello&quot;, $b = &quot;world&quot;;</pre>
<p>You can also use short ifs inside echo and decrease $i while you check if its true. This example will print &#8220;foo&#8221; as long as $i is over 0:</p>
<pre class="brush: php;">for($a=foo,$i=99;$i;)echo--$i?$a:'';</pre>
<p>You can use strings to simulate arrays:</p>
<pre class="brush: php;">$s = &quot;hello&quot;;
echo $s[0], $s[1], $s[2], $s[3], $s[4];</pre>
<p>Remove the last &#8220;invisible&#8221; newline at the bottom of your file. Lets say we have this file:</p>
<pre class="brush: plain;">$a=0;</pre>
<p>You count 5 bytes, right? But the filesize says 6 bytes.<br />
Open a hex editor and remove it manually or run this command from a shell:</p>
<pre class="brush: perl;">perl -pi -e 's/\n*$//' file.php</pre>
<p>I will continue to update this post as when more tricks comes to my mind&#8230;</p>
<p>Here are some sites where you can golf around:<br />
<a href="http://perlgolf.sourceforge.net/">Perl Golf</a><br />
<a href="http://shiva.norgrind.net/~tom/cgolf">C Golf</a><br />
<a href="http://codegolf.com">Code Golf</a> (Ruby, PHP, Perl, Python)<br />
<a href="#">PHP Golf</a> (Under contruction by me)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=478</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quick intro to PDO (PHP Data Objects)</title>
		<link>http://blog.echofish.org/?p=465</link>
		<comments>http://blog.echofish.org/?p=465#comments</comments>
		<pubDate>Thu, 12 Aug 2010 20:23:55 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.echofish.org/?p=465</guid>
		<description><![CDATA[PDO is an awsome database interface extension for PHP. It&#8217;s written in C and are included in the PHP core. It&#8217;s easy to use and is much more robust against SQL-injections. This is because you explicit define what is a value. Here are some examples of how to use PDO. Initalize the PDO object. try [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://php.net/manual/en/book.pdo.php">PDO</a> is an awsome database interface extension for PHP. It&#8217;s written in C and are included in the PHP core. </p>
<p>It&#8217;s easy to use and is much more robust against SQL-injections. This is because you explicit define what is a value. </p>
<p>Here are some examples of how to use PDO.</p>
<p>Initalize the PDO object.</p>
<pre class="brush: php;">try {
    $pdo = new PDO(
        &quot;mysql:dbname=db;host=localhost&quot;, 'user', 'pass',
        array(
            PDO::ATTR_EMULATE_PREPARES =&gt; true,
            PDO::FETCH_ASSOC =&gt; true,
            PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION
        )
    );
}
catch (PDOException $e) {
    die ($e-&gt;getMessage());
}</pre>
<p><b>PDO::ATTR_EMULATE_PREPARES => true</b><br />
PDO emulates prepared statements instead of sending them to the sql driver. With the MySQL driver, this will increase speed.</p>
<p><b>PDO::FETCH_ASSOC => true</b><br />
Fetching rows from a query will only return a set of associative keys. By default you get a set of numerical keys too, which are rarely used. If you fetch &#8216;SELECT firstname, middlename, surname&#8217; in $row, you will get $row['firstname'], $row[0], $row['middlename'], $row[1],<br />
$row['surname'] and $row[2]. PDO::FETCH_ASSOC will not return the numerical keys.</p>
<p><b>PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION</b><br />
Makes an exception on errors, which makes it nice and easy to handle errors.</p>
<p>Here&#8217;s an example of how to make a standard query with parameters.<br />
You don&#8217;t need to escape the inputs with mysql_real_escape_string(), because PDO knows what is parameters and not.<br />
(This is just and example, you don&#8217;t want the users password as plain text in the database.)</p>
<pre class="brush: php;">$sql = &quot;SELECT id FROM users
          WHERE username = :user AND password = :pass&quot;;
$stmt = $pdo-&gt;prepare($sql);
$stmt-&gt;bindParam(':user', $_POST['username']);
$stmt-&gt;bindParam(':pass', $_POST['password']);
$stmt-&gt;execute();
$result = $stmt-&gt;fetch();
print $result['id'];</pre>
<p>When calling a static call without paramters you could just do:</p>
<pre class="brush: php;">$sql = 'SELECT username FROM users ORDER BY id DESC';
foreach ($pdo-&gt;query($sql) as $row) {
    print $row['username'];
}</pre>
<p>When dealing with classes. Pass the PDO-object with the constructor and make it protected.</p>
<pre class="brush: php;">class Foo {
    protected $pdo;
    function __contruct($pdo) {
        $this-&gt;pdo = $pdo;
    }
}</pre>
<p>When you need to use SQL&#8217;s &#8220;LIMIT&#8221; you need to explicit tell PDO that it is in fact integers we are inserting.</p>
<pre class="brush: php;">
$stmt = $pdo-&gt;prepare(&quot;SELECT foo FROM bar LIMIT :offset, :hits&quot;);
$stmt-&gt;bindValue(':offset', (int) $offset, PDO::PARAM_INT);
$stmt-&gt;bindValue(':hits', (int) $hits, PDO::PARAM_INT);
</pre>
<p>This is explained more in detail here:<br />
<a href="http://e-mats.org/2009/02/pdo-and-pdoparam_int/">http://e-mats.org/2009/02/pdo-and-pdoparam_int/</a></p>
<p>Now go and explore PDO if you havn&#8217;t already done so!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=465</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get latest bleeding edge gfx drivers in Ubuntu</title>
		<link>http://blog.echofish.org/?p=411</link>
		<comments>http://blog.echofish.org/?p=411#comments</comments>
		<pubDate>Fri, 18 Jun 2010 10:41:35 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=411</guid>
		<description><![CDATA[Want the latest of the latest updated bleeding edge graphic drivers in Ubuntu? Open /etc/apt/sources.list: sudo gedit /etc/apt/sources.list Add these lines at the bottom: deb http://ppa.launchpad.net/xorg-edgers/ubuntu lucid main deb-src http://ppa.launchpad.net/xorg-edgers/ubuntu lucid main Update and upgrade: sudo apt-get update sudo apt-get upgrade If you don&#8217;t use Lucid (Ubuntu 10.04) just change &#8220;lucid&#8221; to what ever you [...]]]></description>
			<content:encoded><![CDATA[<p>Want the latest of the latest updated bleeding edge graphic drivers in Ubuntu?</p>
<p>Open /etc/apt/sources.list:</p>
<pre class="brush: plain;">sudo gedit /etc/apt/sources.list</pre>
<p>Add these lines at the bottom:</p>
<pre class="brush: plain;">
deb http://ppa.launchpad.net/xorg-edgers/ubuntu lucid main
deb-src http://ppa.launchpad.net/xorg-edgers/ubuntu lucid main
</pre>
<p>Update and upgrade:</p>
<pre class="brush: plain;">sudo apt-get update
sudo apt-get upgrade</pre>
<p>If you don&#8217;t use Lucid (Ubuntu 10.04) just change &#8220;lucid&#8221; to what ever you use, for example &#8216;karmic&#8217;.</p>
<p>Enjoy :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=411</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generate random string in PHP</title>
		<link>http://blog.echofish.org/?p=405</link>
		<comments>http://blog.echofish.org/?p=405#comments</comments>
		<pubDate>Fri, 18 Jun 2010 07:27:00 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=405</guid>
		<description><![CDATA[Here&#8217;s a function to create a random string with the chars &#8216;a&#8217; to &#8216;z&#8217;, &#8216;A&#8217; to &#8216;Z&#8217; and 0 to 9 in PHP. I have seen many people asking for this, so here it is: &#60;?php function randStr($length, $str='') { $array = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)); for($i = 0; $i &#60; $length; $i++) [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a function to create a random string with the chars &#8216;a&#8217; to &#8216;z&#8217;, &#8216;A&#8217; to &#8216;Z&#8217; and 0 to 9 in PHP.<br />
I have seen many people asking for this, so here it is:</p>
<pre class="brush: php;">&lt;?php

function randStr($length, $str='') {
	$array = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
    for($i = 0; $i &lt; $length; $i++) {
        $str .= $array[rand(0, (count($array) - 1))];
    }
    return $str;
}

?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=405</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Add Tweet with C++/Qt4</title>
		<link>http://blog.echofish.org/?p=390</link>
		<comments>http://blog.echofish.org/?p=390#comments</comments>
		<pubDate>Tue, 25 May 2010 20:26:19 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=390</guid>
		<description><![CDATA[This is a code from my Twitter client for how to send a Http request from C++/Qt4 to add your status message&#8230; It used the QNetworkAccessManager class instead of the deprecated QHttp. #include &#60;QtCore&#62; #include &#60;QNetworkAccessManager&#62; #include &#60;QNetworkRequest&#62; #include &#60;QNetworkReply&#62; void main(int argc, char ** argv) { QString unescaped = &#34;&#60;My status update!&#62;&#34;; QString data [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://ark.asengard.net/blog/wp-content/uploads/2008/10/qt-logo.png" alt="Qt logo" width="70" height="80" />This is a code from my Twitter client for how to send a Http request from C++/Qt4 to add your status message&#8230;</p>
<p>It used the QNetworkAccessManager class instead of the deprecated QHttp.</p>
<pre class="brush: cpp;">
#include &lt;QtCore&gt;
#include &lt;QNetworkAccessManager&gt;
#include &lt;QNetworkRequest&gt;
#include &lt;QNetworkReply&gt;

void main(int argc, char ** argv)
{
    QString unescaped = &quot;&lt;My status update!&gt;&quot;;
    QString data = &quot;status=&quot; + QUrl::toPercentEncoding(unescaped.toLatin1());
    QString auth = &quot;&lt;Username&gt;&quot; + &quot;:&quot; + &quot;&lt;Password&gt;&quot;;
    QString encryptedAuth = auth.toAscii().toBase64();
    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    QNetworkRequest request;
    QNetworkReply *reply;
    request.setUrl(QUrl(&quot;http://twitter.com/statuses/update.xml&quot;));
    request.setRawHeader(QByteArray(&quot;Host&quot;), &quot;twitter.com&quot;);
    request.setRawHeader(QByteArray(&quot;Content-Type&quot;), &quot;application/x-www-form-urlencoded&quot;);
    request.setRawHeader(QByteArray(&quot;User-Agent&quot;), &quot;Mozilla&quot;);
    request.setRawHeader(QByteArray(&quot;Authorization&quot;), &quot;Basic &quot; + encryptedAuth.toAscii());
    QByteArray postData(data.toLatin1(), data.length());
    reply = manager-&gt;post(request, postData);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=390</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Showing off HTML5</title>
		<link>http://blog.echofish.org/?p=377</link>
		<comments>http://blog.echofish.org/?p=377#comments</comments>
		<pubDate>Fri, 21 May 2010 17:08:58 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=377</guid>
		<description><![CDATA[Today I opened my favorite web browser Chrome and then suddently I heard the Pac-man theme melody and there it was, a pac-man game as the Google logo written in HTML5 to celebrate Pacman&#8217;s 30th birthday. I also noticed a nice virtuel keypad as shown in the screenshot down the page, but only in the [...]]]></description>
			<content:encoded><![CDATA[<p>Today I opened my favorite web browser Chrome and then suddently I heard the Pac-man theme melody and there it was, a pac-man game as the Google logo written in HTML5 to celebrate Pacman&#8217;s 30th birthday. I also noticed a nice virtuel keypad as shown in the screenshot down the page, but only in the Norwegian google site (google.no).</p>
<p>I guess this is to show the world the power of HTML5 and that the developement are highly in progress :)</p>
<p style="text-align: center;"><a href="http://echofish.org/blog/wp-content/gallery/misc/googlepacman.jpg"><img class="ngg-singlepic ngg-none aligncenter" src="http://echofish.org/blog/wp-content/gallery/misc/googlepacman.jpg" alt="googlepacman" width="614" height="293" /></a></p>
<p>Hit insert coin, and you will get Ms. Pac-man which you control with the asdf buttons :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=377</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free Up Some Ubuntu Space!</title>
		<link>http://blog.echofish.org/?p=372</link>
		<comments>http://blog.echofish.org/?p=372#comments</comments>
		<pubDate>Wed, 19 May 2010 19:13:06 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=372</guid>
		<description><![CDATA[Having trouble cleaning up space for your Ubuntu installation? I only have a 4GB SSD drive on my Lenovo S10e netbook, so I have the problem myself. Here are some handy tips for you! Remove files not needed sudo apt-get autoremove Remove all stored archives in the cache Basically it clears up the &#8216;/var/cache/apt/archives/&#8217; and [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://128.32.18.189/w/images/thumb/2/2c/Broom_icon.svg/400px-Broom_icon.svg.png" alt="cleaning up ubuntu" width="100" height="100" />Having trouble cleaning up space for your Ubuntu installation?<br />
I only have a 4GB SSD drive on my Lenovo S10e netbook, so I have the problem myself. Here are some handy tips for you!</p>
<h4>Remove files not needed</h4>
<pre class="brush: bash;">sudo apt-get autoremove</pre>
<h4>Remove all stored archives in the cache</h4>
<p>Basically it clears up the &#8216;/var/cache/apt/archives/&#8217; and &#8216;/var/cache/apt/archives/partial&#8217; folders</p>
<pre class="brush: bash;">sudo apt-get clean</pre>
<h4>Remove package files that can no longer be downloaded</h4>
<pre class="brush: bash;">sudo apt-get autoclean</pre>
<h4>Remove locale data</h4>
<p>This will remove unneeded locale files and localized man pages.</p>
<pre class="brush: bash;">sudo apt-get install localepurge</pre>
<p>Run it:</p>
<pre class="brush: bash;">localepurge</pre>
<p>A window will pop up. There choose your language. I use English, therefor I chose &#8220;en&#8221;.<br />
Ignore the capitalized ones.</p>
<h4>Remove orphaned packages</h4>
<p>It shows you which packages that have no other packages depending on them.</p>
<pre class="brush: bash;">sudo apt-get install deborphan</pre>
<p>Run it:</p>
<pre class="brush: bash;">sudo deborphan | xargs sudo apt-get -y remove --purge</pre>
<h4>Cleaning up log files</h4>
<pre class="brush: bash;">sudo find /var/log -type f -exec rm {} \;</pre>
<h4>Cleaning up doc files (use only when desperate use of space)</h4>
<pre class="brush: bash;">sudo rm -rf /usr/share/doc/*</pre>
<h4>Remove Linux kernels not in use</h4>
<p>Check what kernel you are using:</p>
<pre class="brush: bash;">uname -r</pre>
<p>Goto System-&gt;Administration-&gt;Synaptic Package Manager</p>
<p>Search for &#8220;Linux&#8221; and mark all Linux header/kernel files which you are not currently using for complete removal. Then hit &#8216;apply&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=372</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Not Enough Space to Upgrade Ubuntu</title>
		<link>http://blog.echofish.org/?p=362</link>
		<comments>http://blog.echofish.org/?p=362#comments</comments>
		<pubDate>Wed, 19 May 2010 17:23:27 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=362</guid>
		<description><![CDATA[I have just a small 4GB SSD drive with my Ubuntu installation on it, and when I was going to upgrade to Ubuntu 10.04 (Lucid), I had to free up some space. Instead of removing all programs that I had installed, I googled and found something neat. New packages are downloaded to &#8216;/var/cache/apt/archives&#8217; and by [...]]]></description>
			<content:encoded><![CDATA[<p>I have just a small 4GB SSD drive with my Ubuntu installation on it, and when I was going to upgrade to Ubuntu 10.04 (Lucid), I had to free up some space. Instead of removing all programs that I had installed, I googled and found something neat.<br />
<img class="aligncenter" src="http://www.unsayablejazer.com/blog/wp-content/uploads/2007/07/300px-ubuntu-logo_ohne_schriftzugsvg.png" alt="Ubuntu logo" width="100" height="100" /><br />
New packages are downloaded to &#8216;/var/cache/apt/archives&#8217; and by creating a link to another place with more space you will &#8220;trick&#8221; the upgrader.</p>
<p>I have also a 150GB drive which I have my home folder located in, so I created a folder there to take the heavy upgrading.</p>
<pre class="brush: plain;">
sudo su
cd /var/cache/apt
mv archives archives-original
mkdir -p archives/partial
mkdir -p /home/&lt;username&gt;/temp/archives
ln -s /home/&lt;username&gt;/temp archives
upgrade-manager
</pre>
<p>Restore to default:</p>
<pre class="brush: plain;">
rm archives
mv archives-original archives
rm -r /home/&lt;username&gt;/temp
</pre>
<p>Source:<br />
<a href="http://www.webupd8.org/2009/11/how-to-upgrade-to-ubuntu-1004-lucid.html">http://www.webupd8.org/2009/11/how-to-upgrade-to-ubuntu-1004-lucid.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=362</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Presentation</title>
		<link>http://blog.echofish.org/?p=348</link>
		<comments>http://blog.echofish.org/?p=348#comments</comments>
		<pubDate>Sat, 17 Apr 2010 16:27:01 +0000</pubDate>
		<dc:creator>echofish</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://echofish.org/blog/?p=348</guid>
		<description><![CDATA[This presentation will blow you mind how powerful HTML5 is/will be. Some of the new things are: New form inputs Canvas Audio Video Drag &#8216;n&#8217; Drop Client side storage Geolocation and much more!]]></description>
			<content:encoded><![CDATA[<p><a href="http://apirocks.com/html5/html5.html">This presentation</a> will blow you mind how powerful HTML5 is/will be.<br />
Some of the new things are:<br />
New form inputs<br />
Canvas<br />
Audio<br />
Video<br />
Drag &#8216;n&#8217; Drop<br />
Client side storage<br />
Geolocation and much more!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.echofish.org/?feed=rss2&amp;p=348</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
