<?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/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Slacy's Blog &#187; linux</title>
	<atom:link href="http://slacy.com/blog/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://slacy.com/blog</link>
	<description>This site is solar powered!</description>
	<lastBuildDate>Tue, 01 May 2012 05:50:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>How to set session variables in Django unit tests.</title>
		<link>http://slacy.com/blog/2012/01/how-to-set-session-variables-in-django-unit-tests/</link>
		<comments>http://slacy.com/blog/2012/01/how-to-set-session-variables-in-django-unit-tests/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 00:24:45 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=1639</guid>
		<description><![CDATA[This was super non-obvious, and I lifted code from a couple of different places. If you&#8217;ve got Django view code that gets &#38; sets session values, you&#8217;ll want to test it properly, and the standard &#8220;self.client&#8221; from Django&#8217;s TestCase doesn&#8217;t really give you a usable session.  So, here&#8217;s the method I&#8217;m using: def stuff_session(client, dictionary): [...]]]></description>
			<content:encoded><![CDATA[<p>This was super non-obvious, and I lifted code from a couple of different places.</p>
<p>If you&#8217;ve got Django view code that gets &amp; sets session values, you&#8217;ll want to test it properly, and the standard &#8220;self.client&#8221; from Django&#8217;s TestCase doesn&#8217;t really give you a usable session.  So, here&#8217;s the method I&#8217;m using:</p>
<pre>def stuff_session(client, dictionary):
    """Given a client (self.client in a unit test TestCase) set the session to the contents of
    the dictionary given"""
    from django.conf import settings
    from django.utils.importlib import import_module
    engine = import_module(settings.SESSION_ENGINE)
    store = engine.SessionStore()
    store.save()  # we need to make load() work, or the cookie isworthless
    client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key
    session = client.session
    session.update(dictionary)
    session.save()
    # and now remember to re-login!</pre>
<p>So, in my setUp() methods, I just call stuff_session(self.client, {&#8216;key&#8217;: &#8216;value&#8217;}) and it all works out great.</p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2012/01/how-to-set-session-variables-in-django-unit-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Port forwarding using netcat</title>
		<link>http://slacy.com/blog/2011/01/port-forwarding-using-netcat/</link>
		<comments>http://slacy.com/blog/2011/01/port-forwarding-using-netcat/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 23:14:42 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nc]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[port forwarding]]></category>
		<category><![CDATA[ports]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tcp]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=1424</guid>
		<description><![CDATA[netcat (nc) is a really useful, if obscure command for managing and listening on TCP sockets. I had a need to implement a local port forward on my machine. (more details coming).  I could use ssh to do this, but decided to write a simple shell script using nc instead.  Here&#8217;s the script, which I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>netcat (nc) is a really useful, if obscure command for managing and listening on TCP sockets.</p>
<p>I had a need to implement a local port forward on my machine. (more details coming).  I could use ssh to do this, but decided to write a simple shell script using nc instead.  Here&#8217;s the script, which I&#8217;m calling port_forward.sh</p>
<pre>#!/bin/bash
# Run as root if your listening port is &lt; 1024!

FIFO=$(mktemp -u)
trap "rm -f $FIFO; killall -9 nc; exit 255;" SIGINT SIGTERM SIGKILL
mkfifo $FIFO

while true; do
    # echo "Listening..."
    cat $FIFO | nc -k -l localhost $1 | nc localhost 6543 &gt; $2
done</pre>
<p>And then, you run it like this:</p>
<pre>$ ./port_forward.sh 80 8080</pre>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2011/01/port-forwarding-using-netcat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
	</item>
		<item>
		<title>Zuma clone for Ubuntu Linux</title>
		<link>http://slacy.com/blog/2010/10/zuma-clone-for-ubuntu-linux/</link>
		<comments>http://slacy.com/blog/2010/10/zuma-clone-for-ubuntu-linux/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 23:53:45 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[clone]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[zuma]]></category>
		<category><![CDATA[zuma clone linux]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=1369</guid>
		<description><![CDATA[Just found out that there&#8217;s a great clone of the game Zuma for Ubuntu. Enable the Universe repository and apt-get install zaz or use the Update Manager to install.  It&#8217;s got a pretty interesting dynamic and twist on the original Zuma.]]></description>
			<content:encoded><![CDATA[<p>Just found out that there&#8217;s a great clone of the game <a href="http://www.popcap.com/games/free/zumasrevenge/?icid=zumasrevenge_HP_OL_4_8_19_08_en">Zuma</a> for Ubuntu.</p>
<p>Enable the Universe repository and apt-get install <a href="http://zaz.sourceforge.net">zaz</a> or use the Update Manager to install.  It&#8217;s got a pretty interesting dynamic and twist on the original <a href="http://www.popcap.com/games/free/zumasrevenge/?icid=zumasrevenge_HP_OL_4_8_19_08_en">Zuma</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2010/10/zuma-clone-for-ubuntu-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Is it safe to rm files from /var/spool/mqueue?</title>
		<link>http://slacy.com/blog/2010/04/is-it-safe-to-rm-files-from-varspoolmqueue/</link>
		<comments>http://slacy.com/blog/2010/04/is-it-safe-to-rm-files-from-varspoolmqueue/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 18:06:44 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[/var/spool/mqueue]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[rm]]></category>
		<category><![CDATA[sendmail]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=1154</guid>
		<description><![CDATA[Is it safe to just remove messages that are failing to be delivered, or is there some other special sendmail &#8220;cancel delivery&#8221; command that I can execute to remove these from the queue?  Is it necessary to stop sendmail if I touch /var/spool/mqueue, or can I just rm the queued message files there while sendmail [...]]]></description>
			<content:encoded><![CDATA[<p>Is it safe to just remove messages that are failing to be delivered, or is there some other special sendmail &#8220;cancel delivery&#8221; command that I can execute to remove these from the queue?  Is it necessary to stop sendmail if I touch /var/spool/mqueue, or can I just rm the queued message files there while sendmail is still running?</p>
<p>(FYI this is on Ubuntu 8.04.4 LTS)</p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2010/04/is-it-safe-to-rm-files-from-varspoolmqueue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Best remote backup solution for Linux?</title>
		<link>http://slacy.com/blog/2009/12/best-remote-backup-solution-for-linux/</link>
		<comments>http://slacy.com/blog/2009/12/best-remote-backup-solution-for-linux/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 18:08:46 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=1049</guid>
		<description><![CDATA[I&#8217;m running my own hand-crafted remote backup (rsync++) script to back up data from one machine to another.  But, it has some serious drawbacks, and I&#8217;m still looking for something better.  Here are my requirements: Runs on Ubuntu Is either: Available in the standard distro (i.e. via apt-get) A simple self-contained script (Python, Perl, Bash, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m running my own hand-crafted remote backup (rsync++) script to back up data from one machine to another.  But, it has some serious drawbacks, and I&#8217;m still looking for something better.  Here are my requirements:</p>
<ul>
<li>Runs on Ubuntu</li>
<li>Is either:
<ul>
<li>Available in the standard distro (i.e. via apt-get)</li>
<li>A simple self-contained script (Python, Perl, Bash, etc.)</li>
</ul>
</li>
<li>Uses ssh/scp/rsync to transport files</li>
<li>Is incremental (i.e. does &#8220;what&#8217;s changed from last time&#8221;, and only backs up that much)</li>
<li><strong>Handles file renames &amp; moves without re-transmitting the underlying data</strong>.</li>
<li>Puts files in a simple &#8220;directory by date&#8221; format.  No fancy databases, no fancy metadata required for restoring.</li>
<li>Preserves file permissions &amp; modification dates.</li>
<li>Correctly handles both hard &amp; soft symbolic links.</li>
<li>Is client-side only.  In other words, I don&#8217;t want to have to maintain 2 copies of this script, one for the server, and one for the client.</li>
</ul>
<p>Is there anything out there that meets these requirements?</p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2009/12/best-remote-backup-solution-for-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
	</item>
		<item>
		<title>git error &#8220;unable to write sha1 filename &#8230; Permission denied&#8221;</title>
		<link>http://slacy.com/blog/2009/09/git-error-unable-to-write-sha1-filename-permission-denied/</link>
		<comments>http://slacy.com/blog/2009/09/git-error-unable-to-write-sha1-filename-permission-denied/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 03:49:37 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sha1]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=963</guid>
		<description><![CDATA[I was having the following issue while doing a &#8220;git push&#8221;: $ git push Counting objects: 50, done. Compressing objects: 100% (33/33), done. Writing objects: 100% (36/36), 4.42 KiB, done. Total 36 (delta 13), reused 0 (delta 0) error: unable to write sha1 filename ./objects/fc/0bf175cf9bf2ecdf15eee84adad32230107aa7: Permission denied fatal: failed to write object error: unpack failed: [...]]]></description>
			<content:encoded><![CDATA[<p>I was having the following issue while doing a &#8220;git push&#8221;:</p>
<pre>$ git push
Counting objects: 50, done.
Compressing objects: 100% (33/33), done.
Writing objects: 100% (36/36), 4.42 KiB, done.
Total 36 (delta 13), reused 0 (delta 0)
error: unable to write sha1 filename ./objects/fc/0bf175cf9bf2ecdf15eee84adad32230107aa7: Permission denied

fatal: failed to write object
error: unpack failed: unpacker exited with error code
To slacy@myhost.com:/home/git/name-of-repo
 ! [remote rejected] master -&gt; master (n/a (unpacker error))
error: failed to push some refs to 'slacy@myhost.com:/home/git/name-of-repo'</pre>
<p>The issue turned out to be that because I&#8217;m using ssh + git to push the files, the files in the .git/objects directories are created with the user+group of the user on the host.  So, the first user to create the file makes them with their own userid &amp; groupid, and are set with default permissions as u=rxw,g=rx,o=rx, and thus, when the second user comes it to add a new file to that pre-existing subdirectory, they don&#8217;t have permissions.</p>
<p>I tried to solve this issue by creating &#8220;group git&#8221; and adding all users who are using the repository in /home/git/name-of-repo, but it still turns out that new files are created with userid:groupid as user:user not user:git.</p>
<p>How do you get around this issue?  How do I make it so that new directories created by git during the push process are given the correct permissions (u=rxw,g=rxw,o=) and assigned to group git instead of the user group?</p>
<p>This issue is easy enough to fix manually, by doing something along the lines of:</p>
<pre>$ ssh userid@myhost.com
(myhost.com)$ cd /home/git/name-of-repo/.git/objects
(myhost.com)$ find . type d | xargs chgrp git
(myhost.com)$ find . type d | xargs chmod g=rxw</pre>
<p>But, I&#8217;m going to have to continue to do this as new directories in the &#8220;objects&#8221; area are going to continue to be created with the wrong permissions.</p>
<p>GIT HAS THE WORST ERROR MESSAGES IN ANY PIECE OF USER-FACING SOFTWARE I&#8217;VE EVER SEEN.</p>
<p>There, I said it. Peace out.</p>
<h2>UPDATE:</h2>
<p>Just read about the git config setting &#8220;core.sharedRepository&#8221; which will automatically give group rwx permissions to newly created files in the repository.  So, I ran:</p>
<pre>$ git config --add core.sharedRepository group</pre>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2009/09/git-error-unable-to-write-sha1-filename-permission-denied/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
	</item>
		<item>
		<title>Throttling pipes in ubuntu linux using cstream</title>
		<link>http://slacy.com/blog/2009/08/throttling-pipes-in-ubuntu-linux-using-cstream/</link>
		<comments>http://slacy.com/blog/2009/08/throttling-pipes-in-ubuntu-linux-using-cstream/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 21:06:44 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cstream]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[throttle]]></category>
		<category><![CDATA[throttling]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=938</guid>
		<description><![CDATA[When I stream music from my home to my work, I want to make sure that I throttle my music such that it doesn&#8217;t saturate my outgoing network connection and make the rest of my internet slow. All I wanted to do was throttle a stdout pipe that&#8217;s being sent to the music player.  I [...]]]></description>
			<content:encoded><![CDATA[<p>When I stream music from my home to my work, I want to make sure that I throttle my music such that it doesn&#8217;t saturate my outgoing network connection and make the rest of my internet slow.</p>
<p>All I wanted to do was throttle a stdout pipe that&#8217;s being sent to the music player.  I found reference to a utility called <a href="http://klicman.org/throttle/">throttle</a>, but also found that it isn&#8217;t included in the Ubuntu 9.04 distribution.</p>
<p>There&#8217;s a maliing list post that says that the program cstream will do the same thing.</p>
<p>man cstream says:</p>
<blockquote><p>-t num    Limit the throughput of the data stream to num bytes/second. Limiting is done at the input side, you can rely on cstream not accepting more than this rate. If the number you give is positive, cstream accumulates errors and tries to keep the overall rate at the specified value, for the whole session. If you give a negative number, it is an upper limit for each read/write system call pair. In other words: the negative number will never exceed that limit, the positive number will exceed it to make good for previous underutilization.</p></blockquote>
<p>So, I changed my audio transcoding script to say:</p>
<blockquote><p>lame &#8211;quiet -V6 $FILE &#8211; | cstream -t 25000</p></blockquote>
<p>The number &#8220;25000&#8243; comes from the fact that I don&#8217;t want to use more than 192kbps of my outbound stream, and cstream&#8217;s argument is in bytes per second.  192kbps = 24000 bytes/second, and I added a little extra.  It would probably be safer if I also passed &#8220;-B 192&#8243; to lame, but that would actually limit my overall quality, so I&#8217;m just going to cross my fingers and hope that &#8220;-V6&#8243; doesn&#8217;t produce &gt;192kbps for very long.</p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2009/08/throttling-pipes-in-ubuntu-linux-using-cstream/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>transcoding mp3-to-mp3 in mt-daapd</title>
		<link>http://slacy.com/blog/2009/08/transcoding-mp3-to-mp3-in-mt-daapd/</link>
		<comments>http://slacy.com/blog/2009/08/transcoding-mp3-to-mp3-in-mt-daapd/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 20:44:16 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[lame]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[mt-daapd]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[transcoding]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vbr]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=935</guid>
		<description><![CDATA[Introduction mt-daapd is an iTunes daap-protocol server for Unix systems.  I&#8217;m using mt-daapd on by Ubuntu 9.04 system to stream music over the internet to my workplace.   The issue is that many of my mp3 files are 256kbps mp3 files, and streaming these takes up more bandwidth than necessary. mt-daapd includes a transcoding system called [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>mt-daapd is an iTunes daap-protocol server for Unix systems.  I&#8217;m using mt-daapd on by Ubuntu 9.04 system to stream music over the internet to my workplace.   The issue is that many of my mp3 files are 256kbps mp3 files, and streaming these takes up more bandwidth than necessary.</p>
<p>mt-daapd includes a transcoding system called &#8220;ssc&#8221; for &#8220;Server Side Conversion&#8221;.  This system works by either a shared-object plugin (i.e. ssc_ffmpeg) or via an external script file (i.e. ssc_script).</p>
<p>using the ssc_script functionality, one can invoke &#8216;lame&#8217; (the mp3 encoder) to transcode high bitrate mp3 files into lower bitrate mp3 files.  The setup for this in mt-daapd wasn&#8217;t very obvious, so I&#8217;ll document it here.</p>
<h2>Install mt-daapd</h2>
<p>The version of mt-daapd provided by Ubuntu 9.04 includes support for transcoding, so you can just run:<br />
<code><br />
$ sudo apt-get install mt-daapd</code></p>
<h2>Turn on ssc</h2>
<p>Edit your /etc/mt-daapd.conf file, and make sure you have the following lines in the correct places:</p>
<blockquote><p>ssc_codectypes = mpeg</p>
<p>always_transcode = mpeg</p>
<p>ssc_prog = /path/to/script/shown/below/mt-daapd-mp3-ssc.sh</p>
<p>[plugins]</p>
<p>plugins = ssc-script.so</p></blockquote>
<h2>Create mt-daapd-mp3-ssc.sh</h2>
<p>You&#8217;ll need to create a shell script to do the transcoding via ssc_scrpit / ssc_prog.  Here&#8217;s the script I&#8217;m using:</p>
<blockquote><p>#!/bin/bash</p>
<p>FILE=$1<br />
OFFSET=0</p>
<p>if [ "$2" == "" ]; then<br />
OFFSET=0<br />
else<br />
OFFSET=$2<br />
fi</p>
<p>if [ "$3" == "" ]; then<br />
FORGELEN=$3<br />
fi</p>
<p>lame -V6 &#8211;quiet &#8220;$FILE&#8221; -</p></blockquote>
<p>Note that I&#8217;m looking at the 2nd and 3rd args, but I&#8217;m not doing anything with them.  These arguments are used to make sure that seeking works properly in your daap client.  I don&#8217;t care about seeking, and doing it properly is somewhat hard, so I&#8217;ve just ignored those arguments.  I think that this could be accomplished properly using the program &#8216;mp3splt&#8217; but I haven&#8217;t looked into it enough to see what it would take.</p>
<p>Make sure the script above is put somewhere accessible by the user specified as &#8216;runas&#8217; in your mt-daapd.conf.   Make sure the script is executable by this user as well.</p>
<h2>Restart mt-daapd and see if it works</h2>
<p>Restart mt-daapd via:</p>
<blockquote><p>$ sudo /etc/init.d/mt-daapd restart</p></blockquote>
<p>Then reconnect your daap client (I use rhythmbox).  You can see if the script is working by running &#8220;ps auwxww | grep lame&#8221; just after pressing play on a song.  You should see your script executing lame and doing realtime transcoding.</p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2009/08/transcoding-mp3-to-mp3-in-mt-daapd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
	</item>
		<item>
		<title>I&#8217;ve given up on web-based music services.</title>
		<link>http://slacy.com/blog/2009/08/ive-given-up-on-web-based-music-services/</link>
		<comments>http://slacy.com/blog/2009/08/ive-given-up-on-web-based-music-services/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 18:24:48 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[mt-daapd]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[sharing]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=917</guid>
		<description><![CDATA[It was a long and tumultuous affair, but now I&#8217;ve officially given up on web-based streaming of my personal music collection. I started out with netjuke, which died and got absorbed into the horrible jinzora project.   So then I switched to Ampache, which worked fairly well, but needs some serious UI upgrades/changes to make it [...]]]></description>
			<content:encoded><![CDATA[<p>It was a long and tumultuous affair, but now I&#8217;ve officially given up on web-based streaming of my personal music collection.</p>
<p>I started out with netjuke, which died and got absorbed into the horrible jinzora project.   So then I switched to Ampache, which worked fairly well, but needs some serious UI upgrades/changes to make it reasonably useful.</p>
<p>Now that I&#8217;m fully ubuntu-ized, I&#8217;m using mt-daapd through an SSH tunnel to listen via a native client app.  This solution has lots of interesting benefits:</p>
<ol>
<li>Running mt-daapd locally means other people in my house can see my music, including my TiVo and any other desktops with an iTunes/daap compatible frontened.</li>
<li>I don&#8217;t have to worry about security issues with having all my music accessible via a web portal that could be hacked.</li>
<li>mt-daapd is available as a package in Ubuntu, so that means upgrades are easy.  Doing upgrades (by hand) of php-based web apps was really becoming a drag.</li>
<li>This means less junk on my slacy.com web server, which I&#8217;m trying to significantly trim down and make more secure by having less applications.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2009/08/ive-given-up-on-web-based-music-services/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
	</item>
		<item>
		<title>RRDTool bindings for php5 in Ubuntu</title>
		<link>http://slacy.com/blog/2009/08/rrdtool-bindings-for-php5-in-ubuntu/</link>
		<comments>http://slacy.com/blog/2009/08/rrdtool-bindings-for-php5-in-ubuntu/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 05:42:44 +0000</pubDate>
		<dc:creator>slacy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rrd]]></category>
		<category><![CDATA[rrdtool]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://slacy.com/blog/?p=910</guid>
		<description><![CDATA[As far as I can tell, there are no RRDTool bindings for php5 for Ubuntu 9.04.  It appears as though it existed in prior distributions that included php4, but Ubuntu 9.04 no longer includes php4. Several others are talking about compiling it from source, but this seems very wrong and unnecessary to me. If you [...]]]></description>
			<content:encoded><![CDATA[<p>As far as I can tell, there are no <a href="http://oss.oetiker.ch/rrdtool/index.en.html">RRDTool</a> bindings for php5 for Ubuntu 9.04.  It appears as though it existed in prior distributions that included php4, but Ubuntu 9.04 no longer includes php4.</p>
<p>Several others are talking about <a href="http://www.ioncannon.net/system-administration/25/how-to-build-the-php-rrdtool-extension-by-hand/">compiling it from source</a>, but this seems very wrong and unnecessary to me.</p>
<p>If you have any other information about how to easily via apt-get make RRDTool functions work in php in Ubuntu 9.04, please leave a comment here.</p>
<p><a href="http://oss.oetiker.ch/rrdtool/pub/contrib/php_rrdtool.txt">I&#8217;m not sure why this has to be so complicated.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://slacy.com/blog/2009/08/rrdtool-bindings-for-php5-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
	</item>
	</channel>
</rss>

